西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)

Modbus RTU 通讯在工业现场的应用是比较普遍的,西门子全系列的PLC都可以通过串口通讯模块和配套的Modbus 指令读写数据。

以S7-1500做主站为例,我们在程序中,只需要调用“Modbus_Comm_load”和“Modbus_Master”即可。

西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)(1)

西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)(2)

两个程序块的背景数据块中也提供了很多其它参数,我们通常使用默认值,不需要修改。小编今天给大家分享一个实际案例,通过更改这里的配置参数来解决实际的通讯问题。

西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)(3)

话说小编最近接下一个S7-1500 Modbus的调试,读取第三方仪表的数据,但是调试过程中指令一直报错误16#81EA,通过软件帮助我们可以大致知道,16#81EA 是说从站响应的数据帧不满足Modbus 的最小长度,所以根据报错信息,自然把问题的矛头指向了通讯伙伴,也就是第三方的仪表。

西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)(4)

但是,同样的硬件链路下,客户使用现场的SMART 200 替换S7-1500测试,居然通讯一切正常,这就说明硬件、仪表的配置没有问题,问题又回到了S7-1500 这一侧上。

西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)(5)

再次反复检查了通讯的波特率、硬件接线、增大看门狗时间,并没有任何改善,S7-1500 指令仍然报同样的错误,问题到底是出在哪里呢?难道是S7-1500 模块有问题?

怀着惴惴不安的心情,小编再次分析错误,16#81EA 是说主站接收到了从站的响应,但是响应的数据包不满足最小长度的要求,也就是说接收到了响应数据包的一部分就认为结束了,那Modbus 指令如何判断Modbus数据包的结束呢?

S7-1500/1200/300/400使用的Modbus指令块,默认3.5个字符延时时间,作为Modbus报文结束条件,就是说,如果字符间的间隔时间超过这个时间,就会认为Modbus 报文结束, 3.5 个字符的延迟时间,和波特率有关系,如下图。以9600波特率为例,如果字符间的延迟时间超过4ms,之前进入缓存区的数据就会认为是一包完整的Modbus 响应,这样指令接收到的数据当然不完整了。

西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)(6)

考虑到这里,基本就定位了问题的可能原因,有可能是第三方仪表的工作特性以及网络上的延迟,导致了字符间的延迟较大,这样无法形成完成的Modbus 响应帧。有没有办法增大字符间的延迟时间呢,仔细研究指令之后,还真找到了参数“ICHAR_GAP”,以毫秒为单位增大字符延迟时间。

最大延迟时间=“3.5倍字符延迟时间” “ICHAR_GAP” 。

西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)(7)

最后的结果果然应证了小编的判断,更改参数加大了最大延迟时间后,通讯果然恢复正常!看来指令的背景DB中的隐藏参数,有时候对调试有时候还真有帮助!

最后,客户又纠结了一下,那为什么SMART 200 的指令直接可以呢,SMART 200 和早期的S7-200 PLC 使用的指令基本相同,打开指令的说明,可以看到S7-200/SMART 200 指令,判断Modbus报文的结束和S7-1200/1500/300/400 不同,它使用100ms最大延迟作为Modbus 的结束条件,这样就可以解释通之前的现象了!

西门子s7-1200子程序怎么使用(1500隐藏参数帮你搞定)(8)

更多文章关注公众号:巨控电子

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页