欢迎来到西门子工业支持中心网站!
欢迎来到西门子工业支持中心网站!
悬赏:5西币 | 解决时间:2018-05-28 08:37
产品版区:
SIMATIC S7-1200
孤独天空
孤独天空 - 资深学长  第3级
我设置循环中断OB30 时间0.5S,每0.5S执行一次。
在OB30里调用Send_P2P ,M6.0 0.5S导通,0.5S闭合,就是每1S上升沿激活一次串口发送命令。
但是在串口调试工具里,每接受一次数据的时间是2S,而不是1S。这是为什么?
把循环中断改成5S,即10S发一次,结果串口调试工具里每20S才接受一次数据。之所以在循环中断里发送,是因为我要定时更新一个数据,一更新就要把这个数据用串口发出去。
看图片,M6.0上升沿两次,DONE才有一次,这是什么原因,如何解决
问题补充:
感谢回答,确实是要把Send_P2P放到OB1里,M6.0放到OB30里。但是我觉得你说的解释不对,M6.0 0.5S导通,0.5秒关闭,确实是1S一次上升沿,那么发送数据也该是1S发一次,但是接收的数据却是2S一次。我觉的是OB30执行时间短,间隔时间长。0.5S上升沿来了,激活发送,刚发送还没发完,OB30走完了不再执行,等一下个OB30结果是下降沿又没发,再等0.5S第二个上升沿激活发送,结果这个上升沿执行的上次没发完的数据,新的数据被忽略了,所以才有2个上升沿只发完一次。
后面我改成了TCP/IP自由口通讯,同样在OB30里用M6.0上升沿触发,结果是1S接收1次数据,而不是按照你的说的2秒。
后来我提高了传输速度,把OB30设为10MS,每10MS发一次,结果开始有丢数据问题。
最佳答案
回答者:
Jeffery Zhang
回答时间:2018-05-26 22:23
提问者对于答案的评价:
确实,串口速度也只能这样了