485转modbustcp后与plc通讯,程序怎么写

485转modbustcp后与plc通讯,程序怎么写,第1张

西门子plc与modbus设备进485通信详解(modbus多机轮询)

huasum >《西门子》

阅499转82022.06.26 江西关注

接触西门子s7-200一段时间后,接手一个通信项目,需要在触摸屏上显示三台pid温度表的温度。

一开始打算触摸屏多余的串口转485直接连接温度表,后来由于一直通信不上,怀疑触摸屏的问题,于是打算用plc来读取pid表,走的是modbus协议,即port1接三台pid表,port0用来连触摸屏以及下载程序。好了,直接上代码。

1、定义port1口的modbus属性,注意,定义完后,如果要再用port1口下载程序的话,必须先把plc设成stop(专家请无视)。

这里的奇偶校验是个坑,要找到合适的,否则error的值会一直是为3,没有返回值

2、这里是关键了,轮询三台485连接的pid温度表,这里利用done来实现三台pid表的msg发送工作,这样也能保证返回数据互不干扰。

打开APP查看高清大图

打开APP查看高清大图

3、同一时间只能有一个msg在工作,所以一定要让这几个m10.x分别释放

打开APP查看高清大图

4、解析返回的数据,这部分就比较简单了,到处都有范例

打开APP查看高清大图

经过一周的研究,总算把三台仪表的数据稳定的传出来,但是还有个疑问,modbus返回的数据里,为什么找不到地址码信息,只有返回41001的值,如果有地址码,就更好了。

下周要继续研究分别写入三个pid表参数的功能,成功了再来分享。

最后,感谢网络上那些开源的资料,虽然弯也没有少绕,

,同时鄙视一下那些要注册才能看资料的“专业”网站,以及要各种xx币才能**的资料。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

无需关心数据是否接收完毕,只要有数据发过来,都收到自己的缓冲区当中。

在应用层,打开一个任务以定期扫描缓冲区中的新数据。 如果有新数据,确定其是否为必需的协议帧。 通过帧头帧尾标识符还有校验等判断接收帧的正确性,如果正确再处理,不正确丢弃。

Modbus没有固定的帧头标记,长度也没有固定。 判断时,首先查找具有正确地址的字符,然后找出后续功能代码是否正确。 根据功能代码,确定后续数据有多长并进行校验。 如果验证正确,则说明帧是正确的。

扩展资料:

举例说明如下:

从站地址03,从0开始读取10个寄存器,则接收到的帧为03 03 00 00 00 0a xx xx,查找从站地址03的字节,找到后,以下功能码为03,符合功能码范围。

该功能码的数据包括固定为8个字节的校验和,然后在其后没有8个字节时,表示其已被没收,然后在关闭后进行判断。 如果正确,则可以在应用层中正确处理该帧。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11109286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存