楼主最近还看过
Modbus 地址
通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbusmaster协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbusmaster协议库支持如下地址:
其中,40001 - 49999:数据保持寄存器,01就是要读取的ABB变频器寄存器地址对应的地址为00。
特别注意,Modbus地址遵从IEC1的地址标准(最小地址为*1),西门子遵从IEC0的标准(最小地址为0,如M0.0)。因此,不同标准的地址做通讯时需要做地址变换,即加1的操作。多厂家的设备在编码时都是按照最小地址为0来编码的,所以,写设备的数据区地址时必须加1。
实例:
启动电机,即向ABB的Modbus寄存器40001中写入1151(16进制数为47F)‘
启动电机:发出【02 06 00 00 04 7F CRC校验码】(站号 功能 寄存器号 数值 CRC校验码 )
个人理解!你还要根据ABB变频器的Modbus报文是怎么定义的!
回复内容:
对:EBN战略军团-未来的高手关于回复内容:对:zuozhuan2009关于 Modbus 地址通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbusmaster协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbusmaster协议库支持如下地址:00001 - 09999:数字量输出( 线圈) 10001 - 19999:数字量输入(触点) 30001 - 39999:输入数据寄存器(通常为模拟量输入) 40001 - 49999:数据保持寄存器 其中,40001 - 49999:数据保持寄存器,01就是要读取的ABB变频器寄存器地址对应的地址为00。 特别注意,Modbus地址遵从IEC1的地址标准(最小地址为*1),西门子遵从IEC0的标准(最小地址为0,如M0.0)。因此,不同标准的地址做通讯时需要做地址变换,即加1的操作。多厂家的设备在编码时都是按照最小地址为0来编码的,所以,写设备的数据区地址时必须加1。 实例: 启动电机,即向ABB的Modbus寄存器40001中写入1151(16进制数为47F)‘ 启动电机:发出【02 06 00 00 04 7F CRC校验码】(站号 功能 寄存器号 数值 CRC校验码 ) 个人理解!你还要根据ABB变频器的Modbus报文是怎么定义的! 内容的回复:为什么启动电机的时候是向40001中写入1151,我就是这个地方不懂?为什么是40001不是10001?为什么好似1151不是其他的数值? 内容的回复:
你好!
10001 代表的是数字量输入!(10001 - 19999:数字量输入(触点)),
而你的与ABB变频器通讯的地址是寄存器,(40001 - 49999:数据保持寄存器 ),所以要以40001-49999之间的地址。而不能用10001.
为什么写的是1151,这个1151是十进制数,你转换为16进制数为47F,这个跟你的ABB变频器的控制字一一对应的,你把这个047F展开为16位二进制数,每一位代表什么意思,对应看下就明白了!你要把变频器的控制字和状态字搞清楚,这些控制字的含义,你就明白了!
你的回答,很容易就让我理解了。再次感谢,如果我要向40001中写入0476,是不知直接写入Dataptr中就可以了?如果我要读取变频器中的实际值,例如压力等。。。该怎么办了?
最近我也需要西门子PLC200和ABBACS510变频器通讯,现在正头疼呢,哪位大侠给个程序研究一下。
小弟不胜感谢,要自由通信端口,MODBUS通讯的~~~~~~~~~~~~~~~
qq1021589083
回复内容:
对:EBN战略军团-未来的高手关于回复内容:对:yexiaomeng关于 不要被4××××什么的迷惑了,4××××只是各个厂家自己定义的modbus的一种表示方法,以4打头是对应的MODBUS的一种功能码,好像是0x06(还是0x03?)。遇到4xxxx的地址,可以把头去掉,比如40001,其实地址就是0,40002地址就是1,这个具体寄存器地址在手册里面有说明。通讯的时候就按照手册上说的地址通讯。 内容的回复:您说的意思是不是这样:例如西门子PLC中40001对应的是寄存器,而对应ASC510中的是控制字,也就是说40001只是一个中间站一样的东西,它可以对应不同的东西。不知道是不是这样?如果是的,假如有一个压力传感器将压力给了变频器的模拟量输入端子,我要读取压力的数值,是不是我就要找到它对应的MODBUS是哪个地址? 内容的回复:
郁闷,写了半天没有回复成功,再来一遍。
MODBUS的通讯格式
从站号,功能码,字节数,起始地址,起始数据,CRC校验(大致这样,不是标准,只说明问题)
其中的功能码有0~255种定义分别对应256种寻址方式和操作。例如0x01,读取输出位,0x03,读取寄存器,0x06,写单寄存器等等。有些厂家为了简便,对这些功能码进行了封装,例如将“0x06+寄存器地址”封装为4xxxx,起始地址就是(4xxxx-40001)