基本配置:
CPU是226,变频器SB200,通讯参数设定波特率9600,1个起始位,8个数据位,1个停止位,无校验。
故障现象:
读指令间歇性的报03错误,通讯超时,读取的数据一直未零。
问题1:寄存器地址应该怎么写?
变频器的寄存器地址是四位16进制地址,PLC的Mbus_MSG指令要求5位十进制地址。变频器功率参数的地址为320DH,转成十进制是12813.Mbus_MSG指令中这个地址应该咋写呢?
参考附件图片里的寄存器特点。
问题2.为啥老是通讯不上
我用的支持中心下载的示例程序,还是不行,程序段如下:
TITLE=程序注释:MODBUS主站读写程序
//
//注意:1.modbusRTU主站功能是通过指令库中预先编好的程序功能块实现的,该库只针对Port0口有效
//2.modbusRTU主站使用了一些用户中断,在用户程序中不能禁止中断
//3.该例程访问的为一个从站,若访问不同的从站,可通过改变从站地址来实现。
//
Network1
//第一扫秒周期,复位各标志位和起始位
LDSM0.1
RM2.0,8
RM4.0,8
RM0.0,2
Network2
//modbus主站初始化完成后,启动读写指令
LDM0.0
EU
SM0.1,1
Network3//网络标题
LDSM0.0
=L60.0
LDSM0.0
=L63.7
LDL60.0
CALLSBR1,L63.7,9600,0,1000,M0.0,MB1
Network4
LDM0.1
OM2.3
=L60.0
LDM0.1
EU
LDM2.3
EU
OLD
=L63.7
LDL60.0
CALLSBR2,L63.7,1,0,412814,1,&VB1500,M2.1,MB3
Network5
//读取从站保持寄存器的数据完成,复位请求
LDM2.1
RM2.3,1
RM0.1,1
Network6
//读取从站输入点
LDM2.1
=L60.0
LDM2.1
EU
=L63.7
LDL60.0
CALLSBR2,L63.7,1,0,412824,2,&VB2000,M2.2,MB4
Network7
//读取从站输入点完成,复位请求
LDM2.2
RM2.1,1
Network8
//写从站实际输出值
LDM2.2
=L60.0
LDM2.2
EU
=L63.7
LDL60.0
CALLSBR2,L63.7,1,1,12801,2,&VB3000,M2.3,MB5
Network9
//写从站实际输出值完成,复位请求
LDM2.3
RM2.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
里面的评价内容。
专家置评
已阅,最佳答案正确。