登录
首页 串口通信 串口通信
回帖 发帖
正文

主题:【话题】西门子S7-1200施耐德M241和称重显示仪ASCII串口通信(20250908)

点击:67 回复:4

有个小项目,一期用的西门子、二期被客户指定为施耐德M241了,现在分别要和一个称重仪表通信
称重显示仪定时发送数据,PLC接收
协议格式是这样的:
附件 微信图片_20250907213833.jpg
报文具体含义如下所示:
STX:报文开始,为STX的ASCII码,即就是16进制02,占用1个字节;
正负符号位:字符“+”对应正数、字符“-”对应负数,两个字符对应的ASCII码分别是16进制2B和2D,占用1个字节;
称重原始数据:依次为个位、十位、百位、千位、万位、十万位,字符范围为“0”~“9”,对应的ASCII码为16进制30~39,占用6个字节;
小数点位数:实际称重数据最多6个小数位,所以字符范围为“0”~“6”,对应的ASCII码为16进制30~36,占用1个字节;
异或校验:为第2个字节~第9字节数据的异或校验的ASCII码,占用2个字节;
ETX :报文结束,为ETX的ASCII码,即就是16进制03,占用1个字节。
可知数据1的符号位为-,原始数据为9152,小数位为2,所以称重实际值为-91.52;
   可知数据2的符号位为+,原始数据为123456,小数位为3,所以称重实际值为+123.456。
请问PLC程序如何编写呢?请教各位大神。
最后修改:2025/9/9 9:33:44
25-09-07 21:40
先把ASCII码转换成数字,然后对应的数字乘以倍率后加在一起
假设转换的数字分别放在D10 D12 D14 D16 D18 D20 里面
就是D10*100000+D12*10000+D14*1000+D16*100+D18*10+D20
结果转换成浮点后,再根据小数点位做除法,假设等于2就除以100,等于1就除以10
最后再根据符号位,判断正负数
如果是三菱或者信捷,我可以给你程序参考,但是施耐德从来没接触过
25-09-08 10:52
西门子S7-1200Receive_P2P指令实时接收,接收到的数据做一个帧头和帧尾的判断,然后使用Chars_To_Strg指令和STRG_VAL指令,最后根据小数位数做一下浮点数除法就可以了。
25-09-08 16:54
施耐德M241用SEND_RECV_MSG指令和ADDM指令,接收到数据也是做一个帧头和帧尾的判断,判断基本数据格式是正确的,然后处理数据用MID和STRING_TO_REAL指令,最后根据小数位数做除法运算就可以了。
25-09-08 21:34
专用指令更方便
25-09-09 10:01

工控新闻

更多新闻资讯