MODBUS 功能码05/15的问题

?功能码05是写单个线圈

功能码15是写多个线圈

手册里有句话:输出点不是被强制,用户程序可以重写由modbus的请求而写入的值 

PLC做从站,计算机发送01 0F 00 00 00 08 01 FF BE D5 

程序是试验程序 就用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亮

计算机发送01 0F 00 00 00 08 01 01 CRC码,程序还是I0.0去点Q0.0,依旧点不亮Q0.0,PLC返回代码正常


怎么去重写modbus请求呢?比如怎么选择性去输出Q0.0?

问题补充:
谢谢半瓶醋,dyhhh,wb210xa
wb210xa所说:如果希望看到由程序和上位下发命令的不同变化,其实很简单,找个地址如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,这时楼主就可以看到希望的变化了。

提问者对于答案的评价:
因为我用的是MODBUS指令库,我不知道上位赋值在哪,地址在哪?能详细指点下吗?

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc252407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月6日 上午1:12
下一篇 2018年12月6日 上午1:12

相关推荐