基本配置:
CPU是226,变频器SB200,通讯参数设定波特率9600,1个起始位,8个数据位,1个停止位,无校验。
故障现象:
读指令间歇性的报03错误,通讯超时,读取的数据一直未零。
问题1:寄存器地址应该怎么写?
变频器的寄存器地址是四位16进制地址,PLC的Mbus_MSG指令要求5位十进制地址。变频器功率参数的地址为320DH,转成十进制是12813.Mbus_MSG指令中这个地址应该咋写呢?
参考附件图片里的寄存器特点。
问题2.为啥老是通讯不上
我用的支持中心下载的示例程序,还是不行,程序段如下:
TITLE=程序注释: modbus 主站读写程序
//
// 注意:1. modbus RTU主站功能是通过指令库中预先编好的程序功能块实现的,该库只针对Port 0口有效
// 2. modbus RTU主站使用了一些用户中断,在用户程序中不能禁止中断
// 3. 该例程访问的为一个从站,若访问不同的从站,可通过改变从站地址来实现。
//
Network 1
// 第一扫秒周期, 复位各标志位和起始位
LD SM0.1
R M2.0, 8
R M4.0, 8
R M0.0, 2
Network 2
// modbus 主站初始化完成后, 启动读写指令
LD M0.0
EU
S M0.1, 1
Network 3 // 网络标题
LD SM0.0
= L60.0
LD SM0.0
= L63.7
LD L60.0
CALL SBR1, L63.7, 9600, 0, 1000, M0.0, MB1
Network 4
LD M0.1
O M2.3
= L60.0
LD M0.1
EU
LD M2.3
EU
OLD
= L63.7
LD L60.0
CALL SBR2, L63.7, 1, 0, 412814, 1, &VB1500, M2.1, MB3
Network 5
// 读取从站保持寄存器的数据完成,复位请求
LD M2.1
R M2.3, 1
R M0.1, 1
Network 6
// 读取从站输入点
LD M2.1
= L60.0
LD M2.1
EU
= L63.7
LD L60.0
CALL SBR2, L63.7, 1, 0, 412824, 2, &VB2000, M2.2, MB4
Network 7
// 读取从站输入点完成,复位请求
LD M2.2
R M2.1, 1
Network 8
// 写从站实际输出值
LD M2.2
= L60.0
LD M2.2
EU
= L63.7
LD L60.0
CALL SBR2, L63.7, 1, 1, 12801, 2, &VB3000, M2.3, MB5
Network 9
// 写从站实际输出值完成,复位请求
LD M2.3
R M2.2, 1
问题补充:
二楼关于地址的讲法不太确切,用哪种方式写地址的话,编译通不过,提示指令操作数非法!
继续求解……
图片说明:
最佳答案
你的参数表里
3200H,对应地址为43201或43200你自己试看看吧,其他的都是顺序就是了,指令里写w#16#43200
还有你这样也看不出什么来,你用个串口监视器监控下看看有没有发出正确的命令,还有你的485线可能需要交叉互换,你要换下看看。例子程序本身没有问题,看看线路和变频设置对不对。
提问者对于答案的评价:
后来证明程序确实没问题,参考http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=112731&cid=1028
里面的评价内容。
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc217817.html