各位大侠帮忙看看这段程序哪里有问题

主程序
LD     SM0.1                       
MOVB   16#09, SMB30                                               MOVB  16#B0,SMB87                                                              
MOVB   16#0A, SMB89                
MOVW   +5, SMW90                  
MOVB   100, SMB94                  
ATCH   INT_0:INT0, 23              
ATCH   INT_2:INT2, 9               
ENI                                
RCV    VB100, 0
中断0
LDB=   SMB86, 16#20                
MOVB   10, SMB34                   
ATCH   INT_1:INT1, 10              
CRETI                             
NOT
RCV    VB100, 0 
中断1
LD     SM0.0
DTCH   10                          
MOVB   2, VB200
MOVB   16#05, VB201
MOVB   16#52, VB202
XMT    VB200, 0
中断2
LD     SM0.0
RCV    VB100, 0

问题补充:
这个是我参照别人的程序编的s7-200与仪表的自由口通讯,用串口调试工具可以发送接收数据,所以硬件连接方面应该没问题,写的这个程序传进去就是接收不到东西,弄了N天就是搞不好,不知道程序出错在哪里,请各位朋友帮帮忙

最佳答案

主程序
1、初始化通讯参数
2、关联通讯中断程序,接收完成后执行中断0,发送完毕后执行中断2
3、使能中断
4、第一个扫描周期内,执行一次接收。
中断0:接收检测
接收完成?
是,调用中断1
否,继续接收,直到完成接收。
中断1:通讯回执
调用后只执行一次
一条通讯完成,回传HEX 05 52 
中断2:接收程序
接收
这是一个在不同中断间不停切换的程序

首先,在第一周期开始接收,接收完成,调用中断0,中断0结束后调用中断1,中断1发送结束后调用中断2(接收),之后又是中断0,如此循环。
整个程序逻辑上没什么问题,关键在于启动事件——23,假设在第一个周期并没有接收到数据,或者PLC启动时,仪表没有上电,都可能造成程序不运行。
你可以试试在主程序里添加一个网路,写入下面语句
LDB<> SMB86,0
RCV VB100,0
试试看

提问者对于答案的评价:
谢谢帮忙,前段时间忙,今天刚上网

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月31日
下一篇 2020年10月31日

相关推荐