modbus 功能码05/15的问题
林慧玲
发布于2014-03-27 18:02
4
0
标签:
?功能码05是写单个线圈
功能码15是写多个线圈
手册里有句话:输出点不是被强制,用户程序可以重写由modbus的请求而写入的值
plc做从站,计算机发送010f0000000801ffbed5
程序是试验程序就用i0.0去点q0.0,i0.0不闭合,q0.0不输出
这时发现输出点,q0.0灭,q0.1~q0.7亮。按理说应该全都亮吧
把程序改动,i0.0去点q0.1,再发送一遍发现q0.0亮,q0.1灭,q0.2~q0.7亮
计算机发送010f000000080101crc码,程序还是i0.0去点q0.0,依旧点不亮q0.0,plc返回代码正常
怎么去重写modbus请求呢?比如怎么选择性去输出q0.0?
问题补充:
所说:如果希望看到由程序和上位下发命令的不同变化,其实很简单,找个地址如i0.1或其他任何地址作为程序赋值和上位赋值的切换开关。当该开关为0时,程序赋值,当开关为1时,上位赋值。
因为用的是modbus指令库,库程序上锁啊,不知道上位赋值在哪,该怎么处理?
佳答案
正如上所述的原因出现在对同一q0.0线圈出现重复赋值现象。
1)对于plc程序来说,由于i0.0直接赋值给q0.0,而plc扫描时间很短,同时不断的执行。而上位计算机发送时只是一瞬间赋值为1,赋值完成后很快就被plc程序刷新成0了,因此,只能看到0,而不是希望的1;
2)如果希望看到由程序和上位下发命令的不同变化,其实很简单,找个地址如i0.1或其他任何地址作为程序赋值和上位赋值的切换开关。当该开关为0时,程序赋值,当开关为1时,上位赋值。修改一下plc程序在不同情况下把相关的值输出到q0.0,这时就可以看到希望的变化了。