首页 上一页 1 2 下一页 尾页

能详细解答的高手请进,关于S7-200与ACS510变频器的MODBUS通讯。 点击:8323 | 回复:33



EBN战略军团-未来的高手

    
  • 精华:0帖
  • 求助:12帖
  • 帖子:17帖 | 173回
  • 年度积分:52
  • 历史总积分:2846
  • 注册:2017年4月11日
发表于:2012-06-26 08:41:34
楼主
求助帖20分-已结帖
哪位可以详细说说S7200与ABB变频器MODBUS通讯怎么编写?下面是我在网上找到的一个例子,不知道是不是对的,那位高手解答一下


楼主最近还看过



EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-26 08:43:28
1楼
想问一下Addr为什么是40001,怎么来确定的数值?

空虚寂寞冷

  • 精华:0帖
  • 求助:2帖
  • 帖子:5帖 | 38回
  • 年度积分:0
  • 历史总积分:115
  • 注册:2012年5月31日
发表于:2012-06-26 12:23:55
2楼

西门子的MODEBUS块用起来是很方便,但是不知道你测试过没,通讯周期特别的长。建议根据ABB提供的协议,采用自由口方式编写自己的代码》。发送数据以前做过,读到现在也没做通(搁下了就没时间了)

zuozhuan2009

  • 精华:0帖
  • 求助:1帖
  • 帖子:4帖 | 95回
  • 年度积分:0
  • 历史总积分:3435
  • 注册:2010年7月29日
发表于:2012-06-26 15:29:44
3楼

   

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中写入115116进制数为47F

  启动电机:发出【02 06 00 00 04 7F CRC校验码】(站号 功能 寄存器号 数值 CRC校验码

   个人理解!你还要根据ABB变频器的Modbus报文是怎么定义的!

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-26 17:07:20
4楼
回复内容:
对: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不是其他的数值?

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-06-26 21:08:00
5楼
40001是MODBUS定义的通用地址换算,这个程序本身需要更改下写入ABB变频器的地址。

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-27 08:17:32
6楼
回复内容:
对:青岛黄工关于 40001是MODBUS定义的通用地址换算,这个程序本身需要更改下写入ABB变频器的地址。 内容的回复:

黄工,您好。不知道你可不可以举一个简单的例子解释一下?为什么是40001不是40002或者40005?

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-06-27 08:26:06
7楼
引用 EBN战略军团-未来的高手 的回复内容:回复内容:对:青岛黄工关于 40001是MODBUS定义的通用地址换算,这个程序本身需要更改下写入ABB变频器的地址。 内容的回复:黄工,您好。不知道你可不可以举一个简单的例子解释一下?为什么是40001不是40002或者40005?


当然可以40002,40005,记不清ABB字的表示方法啦,比如DT0是第一个数据地址,对应40001,那么如果DT100是控制变频器速度给定的,那就是对应40101。所以关键还是找出ABB通讯的地址。

zuozhuan2009

  • 精华:0帖
  • 求助:1帖
  • 帖子:4帖 | 95回
  • 年度积分:0
  • 历史总积分:3435
  • 注册:2010年7月29日
发表于:2012-06-27 09:29:12
8楼

回复内容:
对: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位二进制数,每一位代表什么意思,对应看下就明白了!你要把变频器的控制字和状态字搞清楚,这些控制字的含义,你就明白了!

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-27 11:22:30
9楼
感谢黄工和zuozhuan2009,通过你们的解释我大概懂了一点,自己先看看资料在向大家请教,再次感谢

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-27 14:35:57
10楼
回复内容:
对:青岛黄工关于 引用 EBN战略军团-未来的高手 的回复内容:回复内容:对:青岛黄工关于 40001是MODBUS定义的通用地址换算,这个程序本身需要更改下写入ABB变频器的地址。 内容的回复:黄工,您好。不知道你可不可以举一个简单的例子解释一下?为什么是40001不是40002或者40005? 当然可以40002,40005,记不清ABB字的表示方法啦,比如DT0是第一个数据地址,对应40001,那么如果DT100是控制变频器速度给定的,那就是对应40101。所以关键还是找出ABB通讯的地址。 内容的回复:

这点经过大家的指点我现在已经知道了,不知道可不可以用西门子写一段由PLC给定变频器频率的程序,解释一下,我想更形象的理解一下,麻烦您了。

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-27 14:44:17
11楼
回复内容:
对:zuozhuan2009关于 回复内容:对: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中就可以了?如果我要读取变频器中的实际值,例如压力等。。。该怎么办了?

bhdxzgp

  • 精华:8帖
  • 求助:10帖
  • 帖子:197帖 | 5451回
  • 年度积分:0
  • 历史总积分:21613
  • 注册:2006年4月16日
发表于:2012-06-28 00:57:58
12楼

支持一下;

自己真正理解其通信协议;应该委好实现!!!

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-28 08:05:16
13楼
回复内容:
对:bhdxzgp关于 支持一下;自己真正理解其通信协议;应该委好实现!!! 内容的回复:

关键是还没有理解啊,希望给位指点指点啊,

EBN战略军团-棋影

  • [版主]
  • 精华:5帖
  • 求助:23帖
  • 帖子:748帖 | 5676回
  • 年度积分:53
  • 历史总积分:88538
  • 注册:2004年5月28日
发表于:2012-06-28 09:44:41
14楼
引用 EBN战略军团-未来的高手 的回复内容:回复内容:对:bhdxzgp关于 支持一下;自己真正理解其通信协议;应该委好实现!!! 内容的回复:关键是还没有理解啊,希望给位指点指点啊,

你不是高手嘛!这还难倒你了?

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-28 13:16:53
15楼
回复内容:
对:EBN战略军团-棋影关于 引用 EBN战略军团-未来的高手 的回复内容:回复内容:对:bhdxzgp关于 支持一下;自己真正理解其通信协议;应该委好实现!!! 内容的回复:关键是还没有理解啊,希望给位指点指点啊, 你不是高手嘛!这还难倒你了? 内容的回复:

是未来的高手,现在还不是啊

pei358401101

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 20回
  • 年度积分:0
  • 历史总积分:68
  • 注册:2011年10月23日
发表于:2012-06-28 15:46:45
16楼

最近我也需要西门子PLC200和ABBACS510变频器通讯,现在正头疼呢,哪位大侠给个程序研究一下。

小弟不胜感谢,要自由通信端口,MODBUS通讯的~~~~~~~~~~~~~~~

邮箱1021589083@qq.com

qq1021589083

yexiaomeng

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 181回
  • 年度积分:0
  • 历史总积分:731
  • 注册:2005年12月19日
发表于:2012-06-28 16:03:41
17楼
不要被4××××什么的迷惑了,4××××只是各个厂家自己定义的modbus的一种表示方法,以4打头是对应的MODBUS的一种功能码,好像是0x06(还是0x03?)。遇到4xxxx的地址,可以把头去掉,比如40001,其实地址就是0,40002地址就是1,这个具体寄存器地址在手册里面有说明。通讯的时候就按照手册上说的地址通讯。

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-28 18:11:05
18楼
回复内容:
对:yexiaomeng关于 不要被4××××什么的迷惑了,4××××只是各个厂家自己定义的modbus的一种表示方法,以4打头是对应的MODBUS的一种功能码,好像是0x06(还是0x03?)。遇到4xxxx的地址,可以把头去掉,比如40001,其实地址就是0,40002地址就是1,这个具体寄存器地址在手册里面有说明。通讯的时候就按照手册上说的地址通讯。 内容的回复:

您说的意思是不是这样:例如西门子PLC中40001对应的是寄存器,而对应ASC510中的是控制字,也就是说40001只是一个中间站一样的东西,它可以对应不同的东西。不知道是不是这样?如果是的,假如有一个压力传感器将压力给了变频器的模拟量输入端子,我要读取压力的数值,是不是我就要找到它对应的MODBUS是哪个地址?

EBN战略军团-未来的高手

  • 精华:0帖
  • 求助:17帖
  • 帖子:22帖 | 173回
  • 年度积分:0
  • 历史总积分:2885
  • 注册:2017年4月11日
发表于:2012-06-28 18:17:56
19楼
回复内容:
对:pei358401101关于 最近我也需要西门子PLC200和ABBACS510变频器通讯,现在正头疼呢,哪位大侠给个程序研究一下。小弟不胜感谢,要自由通信端口,MODBUS通讯的~~~~~~~~~~~~~~~邮箱1021589083@qq.comqq1021589083 内容的回复:

您如果找到了,给我也发一份啊,多谢了。在这个上面找了好长时间都没找到,那位大哥如果懂的话,发一短程序上来大家看看啊。

yexiaomeng

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 181回
  • 年度积分:0
  • 历史总积分:731
  • 注册:2005年12月19日
发表于:2012-06-28 18:51:01
20楼

回复内容:
对: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)


热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页