各位前辈:最近老板安排了个活,里面含200PLC与一个多功能电力表的通信,我看了不少资料,觉得200PLC与200PLC的modbus通信比较好理解并且测试成功了,但换成200PLC与仪表通信就迷糊了,仪表那边的地址还附属了命令,真的弄不清楚。我把多功能电力表的规约截图给大家看看,如果我要读取A、B、C三相的测量电压,是不是直接从40000开始还是怎么的,规约里又提到“使用0x03命令,寄存器从40000开始”这句话有什么用呢?请大家指点指点!谢谢!
问题补充:
首先感谢雅克的指点,我如果是要读取A、B、C三相的电压值,是不是直接使用地址40000,40002,40004.既然S7-200提供了库指令,可以读写操作,还要0X03呢?谢谢,真的不懂。
图片说明:
最佳答案
1、如果我要读取A、B、C三相的测量电压,是不是直接从40000开始还是怎么的?
根据你提供的协议,你直接按照协议上的地址读就可以了。因为仪表的寄存器地址是从40000开始的,而不是从40001开始的。
2、规约里又提到“使用0x03命令,寄存器从40000开始”这句话有什么用呢?
0x03是modbus协议的功能码,对该功能码的说明如下:
Function Code-3:读取AO资料,于modbus规定Register Address由40001开始。但是通信协议内取后面四位数,且由零起算,例如:于文件上Register Address为 44321,其通信协议内转换的Address为4320。
“使用0x03命令,寄存器从40000开始”,当你使用了0x03功能码时,读的是寄存器4XXXX,也就是说,功能码0x03是与寄存器4XXXX对应的。其他的比如功能码0x01与寄存器0XXXX对应,功能码0x02与寄存器1XXXX对应,功能码0x04与寄存器3XXXX对应。
寄存器从40000开始,这句话是针对"modbus规定Register Address由40001开始"说的。如果寄存器地址从40000开始,则上面所说的文件上的寄存器地址为44321,则通信协议内转换的地址就为44321,而不是44320了。
3、建议你花时间好好研究一下modbus协议,磨刀不误砍柴工,然后自己动手用PLC和仪表进行测试。
《modbus高级通讯教程》
http://wenku.baidu.com/link?url=AT48MuUKkCJ3VVKae0twMDOJ1_vqxX3RXWKFL2pDBFmf-wx8i0ImdC2S8EiZYPmCKsD0TdaNoj8PEv-QeYxarHyCzKm9ytDyI9AdvYHi8La
《modbus通讯协议中文版》
http://wenku.baidu.com/link?url=zAKtzY_Joi6yXB0sxVHYdSxENpNBGYrhz2Yle_83kpipCOjZ1SouwEGA12uNz5_Mmu4t0Sb4Qe_MgXKcjMi_IVnNKbYpiOVWI5W_ddNSnie
提问者对于答案的评价:
感谢你的指点!谢谢!
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc214095.html