当前位置: 主页 > PLC控制

PC机用Window API与S7-224XP Modbus通讯 停止位的问题

我上位机用WindowAPI与S7-224XPMODBUS通讯,PLC做主站,用是modbus库指令,PC机做从站,用WindowsAPI来读主站指令并返回数据(实际上是用PC机模拟传感器信号).现在遇到一个问题,百思不得其解,请教各位高手:
当PC机读主站发的信号时,需要设成N,8,1才能正确读出;但是当返回数据需要写串口时,却需要设成N,8,2PLC主站才能收到并解析正确。
这里1,2是停止位位数.

这是什么原因呢?
我的电脑是笔记本,没有串口,用的是USB转485的串口。串口号是7(可以改).已经试过,在设备管理器里的端口设置中设停止位不影响。
如附件所示,PLC主站发出的信息(16进制)为010400400004F01D
要求从地址Hx64处返回4个字的寄存器值,如果设为N,8,1,用WindowsAPI读出的信息正确,但是设为N,8,2,则读出的信息为011040041D.

问题补充:
又发现一个问题,如果以N,8,1打开串口,读后,关闭串口,然后以N,8,2打开串口,写串口后。再以N,8,1打开串口,读出来的又不对了。
但是用网上的串口调试工具,就一点问题都没有

图片说明:

PC机用Window API与S7-224XP Modbus通讯 停止位的问题dbd88b157162cf0b2ab9BF6150a07e01 08fb1d83da883297f3431042d94379f9PC机用Window API与S7-224XP Modbus通讯 停止位的问题 PC机用Window API与S7-224XP Modbus通讯 停止位的问题PC机用Window API与S7-224XP Modbus通讯 停止位的问题

最佳答案

是容错设计让串口调试软件能够正常工作的。
停止位1或2都能正确读出。
我是用串口调试工具进行调试的,劝你不要浪费精力纠结这个问题了。

提问者对于答案的评价:
问题原因找到了,因为WindowsAPI设置停止位时,1bit的参数是0;1.5bit是1,2bit是2,从网上找的代码设置时,直接设置成1,就相当于是用的1.5bit的停止位,所以读串口时总是读不对。改设成0,也就是1bit的停止位,读写都没问题了。经过实验,证明读PLC发出的信息时,停止位必须设置为1bit才能读出来,但是写串口(返回信息给PLC)时,设置为1bit或2bit在PLC上都可以正确地读出.
不纠结无进步。
不过还是谢谢你。

  • 关注微信

猜你喜欢

微信公众号