背景:仪表只支持RS485自由口通讯
报文格式: 接收(AA ID 52 CHK)应答(AA ID 52 FNOW FALL UNIT CHK),其中ID为仪表地址,CHK为校验码,AA+ID+52=CHK,取16 进制后两位。
连接:PLC为ST20, 5块表,采用串接的形式,地址为1~5。
现状:PLC和串口调试工具可以正常通讯,即发送询问指令并正常接收应答。仪表可以响应串口调试工具的询问指令并及时应答。
思路:采用定时器,每秒钟按照地址轮询仪表,轮询指令发送完成后采用中断读取仪表的应答信息。
问题:PLC和仪表直接的话无法接收。附件是单对单的程序,也不能成功,求大神过目指点。
问题补充:
TITLE=程序注释
Network 1
// 程序段注释
LD SM0.0
AN M10.0
TON T100, 1000
Network 2
LDW= T100, 1000
EU
= M10.0
Network 3
// 设置端口0自由口通讯
// 9600, 8位, 无校验
LD SM0.1
MOVB 2#1001, SMB30
Network 4
LD SM0.0
MOVB 13, VB200
MOVB 4, VB99
MOVB 16#AA, VB100
MOVB 16#52, VB102
MOVB 16#1, VB101
MOVB 16#FD, VB103
Network 5
LD SM0.0
MOVB 16#F4, SMB87
MOVW 2, SMW90
MOVW 200, SMW92
MOVB 13, SMB94
MOVB 16#AA, SMB88
MOVB 16#1D, SMB89
Network 6
LD SM0.0
AW= T100, 150
XMT VB99, 0
Network 7
LD SM0.0
ATCH INT0, 9
ENI
INT_0
LD Always_On
RCV VB200, 0
最佳答案
说说我的想法。
首先是采用定时器轮询(1S)时间,如果按9600的通讯速率,你的通讯数据一般是足够发送一条数据了的。轮询发送完成后用什么中断?在中断中能够正常读取到从站的数据?中断执行一次仅仅只是一个周期。
另外,无法通讯查外部接线是否正确,这个在通讯中经常性的问题,因为各家对通讯口都有各家 的定义,西门子侧3+、8-
提问者对于答案的评价:
谢谢回复。接线应该不会有问题,而且我也尝试更换了A,B..... 中断执行时,用串口工具发送给PLC,PLC可以正常收取(就13个字节)。现在的问题就是PLC和仪表直联不能收到或者读取到仪表的应答信息。。。。
最佳答案作者回复:
你检查中断的定义用SM0.1。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc285483.html