上位机通信 VS PLC通信

大家好!我是付工。

无论是学习上位机还是学习PLC,似乎都离不开一个话题——通信。

PLC通信更侧重于应用,只需要调用对应的功能块,填入正确的参数即可,无需关于底层实现原理。

上位机通信更侧重底层原理,不仅要了解各种通信报文,还要掌握如何封装通信库。

今天给大家分享一个现场通信故障排除的案例。

一、项目背景

前段时间承接了一个地磅的上位机项目,需要采集进出场两个地磅的数据,设计思路是使用两个串口服务器,将RS485转换成以太网,PLC通过ModbusTCP通信采集地磅。

那天跟PLC工程师一起到现场,发现他带了一根485的通信线缆,他说昨天测试发现PLC无法通过ModbusTCP采集到地磅数据,实在不行就改成ModbusRTU通信。

虽然这个与上位机无关,但是作为技术人员,我知道ModbusRTU肯定不是最优方案,因为会涉及到轮询或者掉站的问题。

所以我跟他说:我来帮你看看,实在解决不了再换ModbusRTU方案。

二、通信测试

1、首先对串口服务器进行配置。

串口服务器一般会有两种模式:

一种是透传模式,透传模式仍然是ModbusRTU报文,只不过使用TCP通信,这个就是ModbusRTUOverTCP通信。

图片

另一种是Modbus协议转换,内部可以将ModbusRTU报文直接转换成ModbusTCP报文,这个就是ModbusTCP通信。

图片

2、配置完成后,通过软件进行测试。

这里使用ModbusPoll软件,选择ModbusTCP,IP地址为,192.168.2.7,端口号为26,测试结果如下:

图片

3、这里已经测试通过,说明串口服务器没有问题。

三、PLC测试

检查了一下PLC工程师写的PLC程序,似乎没有什么问题,但是就是读取不到数据。

图片

PLC工程师说问题就在这里,没法解决。

我分析了一下,既然ModbusPoll测试没问题,而PLC通信不上,那么可能是PLC程序发出的报文与ModbusPoll软件发出的报文不一致,因此需要监听一下PLC发出的报文内容。

四、监听报文

1、首先我用本机开了一个Modbus Slave,IP地址填写本机的IP,端口也设置为26。

图片

2、然后让PLC工程师把PLC程序里的IP改成192.168.2.78,这样我就可以通过Slave观察到PLC发出的报文了。

图片

3、改完之后PLC工程师说可以读到数据了,同时我这边也看到了PLC发出的报文。

PLC发出的报文中单元标识符是255(0xFF),而地磅的站地址是0x01,因此地磅不会返回报文。

PLC之所以用255作为默认值,因为某些实现中,地址255被当做广播地址用,但并不是所有的硬件都支持广播地址。

为什么Slave软件会返回呢?因为我上面设置了Ignore Unit ID。

找到原因之后,我让PLC工程师把地磅的从站地址设置为255,通信测试正常。

五、问题分析

在S7-200Smart的帮助中,我们找到了关于MBUS_Client的相关说明:

图片

对于ModbusTCP来说,我们可以通过IP地址去区分不同设备,因此Unit ID很多时候显得并不重要,但是对于有些情况,比如S7-200 SMART作为 Modbus TCP客户端, 服务器为网关模块,连接多个 Modbus RTU 设备时,这时候就需要区分 Modbus RTU 从站地址了。

因此上面的解决方案并不完美,如果串口服务器挂接多个RTU设备时,就不适用了。

MBUS_Client库中的mModbusUnitID默认值为255(16#FF),如果从站设备有多个,可以S7-200 SMART 和网关模块建立一个连接,在这个连接上通过修改UnitID的值进行UnitID的轮询。

我们打开Modbus_TCP Client的符号表,可以看到UnitID对应的地址是VB3739。

图片

后面,我让PLC工程师把地磅站地址恢复为1,然后通过修改PLC程序,解决这个问题。

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上位机付工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值