发表于:2020/5/15 14:50:00
#0楼
前面的帖子,基本说完了树莓派Codesys功能的全景图,但一些协议的详细配置没细讲。
看到有朋友对TCP-Modbus的使用感兴趣,本帖详细讲一下。
TCP-Mobus作为施耐德产品的主力协议,应用还是很广泛的,在现场做一些PLC间的通讯和HMI通讯,还是很方便的。
协议的工作原理我在之前现场总线的帖子介绍的比较多,当然也是因为比较简单而且开放,所以很多设备都支持。
Codesys配置TCP-Modbus,一样不外乎以下参数:
通道(使用哪个网卡,一般通过本地IP地址等参数来识别)
主设备数据地址(读来的数据存在哪里)
从设备地址(IP),从设备ID(多数是1,多台的要单独设置)
从设备数据地址(从从设备的哪些寄存器地址读数据)
超时/错误/状态等数据,以方便做错误处理,工业场合,这些是一定要考虑的,否则会出大事的。
首先配置通道,这个是以太网,而且你要告诉Codesys你用的是哪块网卡
在以太网的通用设置里,接口点旁边的 ... 按钮,可以看到你的树莓派的所有网卡,一般用eth0,IP设置已经自动从操作系统取过来了。
其他设置用默认值即可,正确的做法,是把诊断数据块也适当处理,这样用户在通讯中断是可以很快找到原因,方便维护。
Ethernet下面可以挂各种协议,像Ethernet/IP,CAT等,TCP-Modbus主站只是其中一种协议。
再点开TCP-Modbus Master,
基本用默认配置就可以,这里会设置响应时间,超时等,现场根据情况调整,测试无所谓。
一个重要的参数是:自动重新连接, 默认不选中,是基于安全考虑的,现场使用还是选上方便,但自动连接可能让一些网络问题不好被发现,使用的时候一定要清楚后果。
设好主设备,再设从设备,
从设备的通用设置有IP地址,超时,端口一般是502,不要动。超时也不要动,除非你对以太网的工作原理非常熟悉:
通过上面的设置,树莓派已经知道从哪个网卡,通过什么协议,到哪个从设备的502端口读取数据了,但读哪些数据呢? 就要通过Modbus从站通道来设置了:
Codesys的这个驱动还是非常强大的,功能强大了,就要求使用的人也具备相当的知识,增加通道时可以看到可以选择函数代码(功能码),参见我之前的帖子,学会3读16写就包打天下了,高手可以尝试23,一个数据包搞定读写,效率加倍。
这里面的错误处理:保持最后值和清零的设置一定要小心,根据现场需要,兼顾安全和稳定的要求来设置。
设置完这些,就差最后一个问题:读来的数放哪里? 通过从设备IO映射来把读到的数据放到需要的变量即可:
其他的设置一般默认即可,除非有特殊需要。当然,不明白的地方不要乱动,免得意外惊喜。
看到有朋友对TCP-Modbus的使用感兴趣,本帖详细讲一下。
TCP-Mobus作为施耐德产品的主力协议,应用还是很广泛的,在现场做一些PLC间的通讯和HMI通讯,还是很方便的。
协议的工作原理我在之前现场总线的帖子介绍的比较多,当然也是因为比较简单而且开放,所以很多设备都支持。
Codesys配置TCP-Modbus,一样不外乎以下参数:
通道(使用哪个网卡,一般通过本地IP地址等参数来识别)
主设备数据地址(读来的数据存在哪里)
从设备地址(IP),从设备ID(多数是1,多台的要单独设置)
从设备数据地址(从从设备的哪些寄存器地址读数据)
超时/错误/状态等数据,以方便做错误处理,工业场合,这些是一定要考虑的,否则会出大事的。
首先配置通道,这个是以太网,而且你要告诉Codesys你用的是哪块网卡
在以太网的通用设置里,接口点旁边的 ... 按钮,可以看到你的树莓派的所有网卡,一般用eth0,IP设置已经自动从操作系统取过来了。
其他设置用默认值即可,正确的做法,是把诊断数据块也适当处理,这样用户在通讯中断是可以很快找到原因,方便维护。
Ethernet下面可以挂各种协议,像Ethernet/IP,CAT等,TCP-Modbus主站只是其中一种协议。
再点开TCP-Modbus Master,
基本用默认配置就可以,这里会设置响应时间,超时等,现场根据情况调整,测试无所谓。
一个重要的参数是:自动重新连接, 默认不选中,是基于安全考虑的,现场使用还是选上方便,但自动连接可能让一些网络问题不好被发现,使用的时候一定要清楚后果。
设好主设备,再设从设备,
从设备的通用设置有IP地址,超时,端口一般是502,不要动。超时也不要动,除非你对以太网的工作原理非常熟悉:
通过上面的设置,树莓派已经知道从哪个网卡,通过什么协议,到哪个从设备的502端口读取数据了,但读哪些数据呢? 就要通过Modbus从站通道来设置了:
Codesys的这个驱动还是非常强大的,功能强大了,就要求使用的人也具备相当的知识,增加通道时可以看到可以选择函数代码(功能码),参见我之前的帖子,学会3读16写就包打天下了,高手可以尝试23,一个数据包搞定读写,效率加倍。
这里面的错误处理:保持最后值和清零的设置一定要小心,根据现场需要,兼顾安全和稳定的要求来设置。
设置完这些,就差最后一个问题:读来的数放哪里? 通过从设备IO映射来把读到的数据放到需要的变量即可:
其他的设置一般默认即可,除非有特殊需要。当然,不明白的地方不要乱动,免得意外惊喜。