现在正在使用自由口接受数码显示器的数据,数码显示器的是这样的,从PLC发送6个字节的数据到数码显示器,0X3A,0X02,0X43,0X45,0X0A,之后显示器发送一串数据到PLC ,
我使用的是发送、接受中断的方式,
现在PLC 发送信息已经产生中断了,但是PLC无法接收到数据,接受数据都是0,
请大侠帮分析一下。
我定义的发送数据是:VB400~VB406,装载的数据时发送数据个数6和以上的5个字节数以及结束符0X0D。这样发送数据会有问题吗?
中断程序应该是没有问题的。
问题补充:
dhyyyy兄说的”接收结束方式“是怎么设置的啊?
还有我接收到的第一个和后面的数据都是0;
用示波器检测RS485的A、B通道,发送数据时没有脉冲,是怎么回事?
直接由计算机发送数据可以接收到反馈数据的。
我定义了3个中断,定时中断,发送完中断都已经产生了,就是无法长生接收完成中断!!
最佳答案
发一个通用的通讯程序:
MAIN:
LD SM0.1
MOVB XXX , SMB30 //根据和对方约定的波特率,字符格式等设定
MOVB 16#9C, SMB87 //允许接收信息,使用SMB90值检察空闲状态,定时器是信息定时器 , 超过SMW92值停止接收
MOVW +80, SMW92 //根据报文长短,波特率及从站响应的快慢设定,这个时间要小于接收中断(INT3)里定时中断的时间。
MOVW +0, SMW90
MOVB 200, SMB94 //SMW94 最大接收字符数,这里无用,但必须要设置。
ENI
LD SM0.1
ATCH 接收:INT3, 9 //传输完成中断
MOVB 150, SMB34
ATCH 发送:INT2, 10 //定时中断
发送:
LD SM0.0
DTCH 10
XMT VB100, 0
接收:
LD SM0.0
RCV VB200, 0
MOVB 250, SMB34
ATCH 发送:INT2, 10
1 本程序只适用于单从站的问答式规约(包括modbus)。该程序为主站程序。
2 发送的数据放置在数据块,比如读取从站地址为16#12的寄存器的数据。校验提前算好,减轻PLC负担。
VB100 16#8 16#12 16#03 16#00 16#0A 16#00 16#02 16#E6 16#AA
3 不用考虑起始字符 结束字符等等,以下是通讯流程图,不论从站有无故障,询问不受影响。
4 9600波特率,从站回复13字节
5 校验程序可以放在主程序里,
有时间再发一个多从站的程序,程序大小和这个基本程序不变。
提问者对于答案的评价:
虽然还没有解决问题,但还是谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc315881.html