在S7-200和S7-200 Smart编程软件的帮助文件中,对MBUS_MSG指令的输出分别有下面的描述:
S7-200:
"完成"输出在发送请求和接收应答时关闭。"完成"输出在应答完成或MBUS_MSG指令因错误而中止时打开。
S7-200 Smart:
程序已发送请求并接收响应后,Done 输出为 FALSE。响应完成或 MBUS_MSG 指令因错误中止时,Done 输出为 TRUE。
按照字面意思,这两个指令是有区别的。S7-200在改写First参数后,Done就被复位为False;而S7-200 Smart需要在接收从站响应后才复位Done为False,至少要在一个扫描周期之后。真的是这样吗?
问题补充:
两位都没有回答我的问题。我想知道:S7-200 SMART 的 MBUS_MSG 指令输出的 DONE 是什么时候被复位为 FALSE 的?是和 S7-200 一样,在执行了该指令后即被复位为 FALSE?还是如中方版手册描述的,在接收到从站的应答后才被复位为 FALSE?
特意下载了英文版手册,上面是这样描述的:The Done output is FALSE after the program has sent a request and is receiving a response.按我的理解,应该是在发送了请求后并且正在接收应答时复位 DONE 为 FASLE。这应该与 S7-200 一样。我的英文不太好,请大家帮助参谋一下,是我对英文手册的理解不对,还是中文版手册翻译错误?
最佳答案
1、200中
done位的含义是指当该读、写指令完成后,一直为ON;需要等待下一个msg指令被执行时才会OFF。
此时done位值是前一次执行msg时的。
2、200 smart中
MBUS_MSG 指令被激活时将发送 Modbus 请求报文帧,如果在Timeout 参数定义的时间间隔内主站未接收到从站应答,Modbus RTU 主站协议库默认的情况下还会再发送 2 次 Modbus 请求报文帧;在最后一次请求报文帧发送后,经过 Timeout 参数定义的时间间隔后还未收到应答时, MBUS_MSG 指令的 Done 完成位才被设置为 1 。将 mModbusRetries 变量的数值由 2 改为 0 ,即可取消 Modbus 请求报文帧的重试次数。mModbusRetries 变量的绝对地址可通过查询Modbus RTU 主站协议库的符号表获取。
参考https://support.industry.siemens.com/cs/cn/zh/view/84175754
路径:s7-200plc-->通信章节-->modbus通信
补充:英文版的翻译过来在程序发出请求并接收响应后,他完成输出是false。200中在发出指令被执行完毕时done为ON,在等待下一个msg指令被执行时才会OFF。所以中文翻译的没错。200smsrt在Modbus执行:通信中时done置1,无 Modbus 通信活动时done为 0。
《200smart Modbus通信常见问题》其中介绍了几个案例
http://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/smartsms/020.html
提问者对于答案的评价:
谢谢
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc366264.html