PLC是CPU226CN,两个485中的port1接的“USB-PPI”线缆,port0接称重变送器,具体名称为“TR700 数字式重量变送器”,照PLC手册上的自由口通讯例子写了个程序,好像读不到数据。
没有加变送器的时候实验过一些小程序,都能正常运行。现在的问题是不知道怎么把变送器中的数据读到PLC里。
变送器里的参数设置为:通讯地址02;9600bps;偶校验;8个数据位;通讯方式为连续方式;通讯速率为20次/s(所有波特率都可);通讯协议为串口通讯协议。
变送器显示传感器上的数据正常,变送器的16、17、18端分别接PLC的port0端口的8、3、1脚。
请问最简单可以用什么方法读到变送器的数据?我用自由口通讯的程序为什么读不到?是不是哪儿没有设置到位?谢谢
主程序
LD SM0.1
MOVB 16#49, SMB30
MOVB 16#B0, SMB87
MOVB 16#0A, SMB89
MOVW +5, SMW90
MOVB 18, 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
XMT VB100, 0
中断2
LD SM0.0
RCV VB100, 0
问题补充:
MOVB 16#49, SMB30不是做你说的那个事情么?这个变送器是借的,设置是用别人设好的,这种应该是最简单的吧
最佳答案
发一个通用的通讯程序:
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/plc315304.html