我编写了一个自由口协议通信程序,有两路传感器通过一个串口输入,现在我遇到了几个问题想咨询下,谢谢各位大师指点。
1、如果采用定时中断(10),两路输入采用分时,即分不同时段将两个传感器的型号发送出去,然后接受相应的数据,问题是:当一路传感器断电后,另一路传感器也不能发送数据,请问这是怎么回事呢?而且,当又给传感器上电后,发送接收数据不能自动更新,需要再次运行PLC,请问这出了什么问题吗?
定时中断程序如下:
主程序:
先初始化,定义端口模式:
LD SM0.1
MOVB 16#09, SMB30
MOVB 16#EC, SMB87
MOVB 16#0A, SMB88
MOVB 16#0D, SMB89
MOVW +1000, SMW92
MOVB 17, SMB94
ENI
ATCH INT0, 9
MOVB 150, SMB34
ATCH INT1, 10
子程序定义时钟:
LDN T34
TON T33, 250
TON T34, 500
LD T33
MOVB 16#1, VB53
NOT
MOVB 16#02, VB53(产生5秒周期时钟脉冲并分时将机型号传给VB53)
中断0:(发送完成中断9)
LD SM0.0
RCV VB99, 0
MOVB 250, SMB34
ATCH INT1, 10
中断1:(定时中断10)
LD SM0.0
DTCH 10
XMT VB50, 0
2、如果采用上升沿中断,一路传感器断电后,另一路也不能输入,请问这是什么原因呢?但是当再给传感器上电后,中断会再启动,更新数据继续接收,这为什么与上面的不同呢?
简要说明下程序:初始化与上面一样,连接的两个中断为发送完成中断9和接收完成中断23,中断程序为复位置位指令,如下:
接收发送子程序:
LD M1.0
EU
XMT VB50, 0
LD M1.1
EU
RCV VB99, 0
中断0:
LD SM0.0
R M1.0, 1
S M1.1, 1
中断1:
LD SM0.0
R M1.1, 1
S M1.0, 1
补充,两路传感器输入同样采用时钟脉冲分时向VB53传送不同的机型号,以得到两路输入,如果不这样,该如何实现两路输入呢?
3、断电后不能接收发送另一路数据,这是否是一断电中断就停止,只运行主程序,且对定时中断来说还不能再次自动启动中断,如果不是,那么该如何实现路断电时另一路可以通呢?可不可以不通过中断只在主程序中使用接收发送命令,这样每循环一次程序就执行一次发送接收,这种发送接收又该如何出发呢?
谢谢了,问题较多较烦,还望各位不吝赐教啊。
问题补充:
通讯过程中,一路传感器断电,另一路通电,不能接收到数据,采用程序状态监控时,发现中断程序都变成了灰色,而且采用状态表检测时发现smb86存储器始终为16#00,请问这代表了通讯中断了吗?数据没有传送吗?可是我不管怎么试也没有找到解决方法,望各位明示啊?可QQ联系:303627721 谢谢了
最佳答案
通讯,必须考虑容错。即估计到通讯过程随时会发生错误,又要估计到对方会无反应。然后正确处理这些情况,就不会发生中断通讯的现象。
提问者对于答案的评价:
谢谢 我正在尝试
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc321454.html