主程序
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