CPU226CN如何通过MODBUS ASCII模式与多台仪表通讯?

小弟正做一个项目,CPU是226CN,仪表的modbus模式是ASCII,仪表台数24台。仪表的通信参数是:9600波特率,无校验,1起始位,1停止位。现在只要求读取24台表的数据,仪表的通信指令要求:指令长度5字节;指令格式是:指令前缀——通信地址高位——通信地址低位——读取命令——命令码。例子:5个字节的内容分别是:@_0_3_R_1,意思就是读取通讯地址为3的仪表的测量值。

小弟的疑问是,XMT和RCV如何指定发送地址?如何才能不让这些数据的传输不冲突?还有终端电阻是120欧姆还是330欧姆?有朋友做过类似项目吗,能不能把你的组态文件借我学习一下呢?万分感谢啊!

最佳答案

传送(XMT)指令在自由端口模式中使用,通过通讯端口传送数据。接收(RCV)指令开始或终止"接收信息"服务。您必须指定一个开始条件和一个结束条件,"接收"方框才能操作。通过指定端口(PORT)接收的信息存储在数据缓冲区(TBL)中。数据缓冲区中的第一个条目指定接收的字节数目。
给你举个例子
NETWORK 1 // 主程序
LD SM0.1 // 首次扫描时,
MOVB 16#09 SMB30 // 初始化自由端口:
 // - 选择9600波特
 // - 选择8个数据位
 // - 选择无校验
MOVB 16#B0 SMB87 // 初始化RCV信息控制字节:
 // - RCV被启用
 // - 检测到信息字符结束
 // - 将空闲行条件检测为
 // 信息开始条件。

MOVB 16#0A SMB89 // 将信息字符结束设为hex OA(换行符)。
MOVW +5 SMW90 // 将空闲行超时设为5毫秒。
MOVB 100 SMB94 // 将最大字符数设为100。
ATCH INT_0 23 // 将中断附加在接收完成事件上。
ATCH INT_2 9 // 将中断2附加在传送完成事件上。
ENI // 启用用户中断
RCV VB100 0 // 为端口0在VB100位置启用带缓冲区的接收方框

NETWORK 1 // 中断0
// 接收完成中断例行程序
LDB= SMB86 16#20 // 如果接收状态显示接收结束字符,
MOVB 10 SMB34 // 则附加一个10毫秒计时器,
ATCH INT_1 10 // 触发传送

CRETI // 并返回。

NOT
RCV VB100 0 // 如果因任何其他原因接收完成,
 // 则开始新的接收。

NETWORK 1 // 中断1
// 10毫秒计时器中断
LD SM0.0
DTCH 10 // 分离计时器中断
XMT VB100 0 // 将信息传送回端口0中的用户

通讯电缆长度超过50米时在接收端R(A)与R(B)端加入330欧姆电阻。
见《S7-200基于modbus协议与智能仪表之间的通信实现方法》连接: 
http://*s.jdzj.com/showart.asp?art_id=6877

提问者对于答案的评价:
谢谢指教!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月1日 下午4:10
下一篇 2020年11月1日 下午4:10

相关推荐