登录
首页 PLC论坛 海为Haiwell
回帖 发帖
正文

主题:给海为提点意见

点击:1284 回复:20

便用边学,s16m2r或s20m2r与安川变频器485通讯,安川变频器是一位停止位固定,结果此型海为modbus 指令不支持,只好用comm指令,令我没想到的是捣鼓了一下午加半晚上才跟变频器通讯上,读出的频率乱七八糟不知道怎样转换,查看手册也没有详细说明,在此给海为提点意见:
【1】虽然通讯用法比较固定,但有一个数据错误就会造成通讯失败,令初学者无从下手。所以手册上必须举例详细说   明,包括每一个数据的具体含义,一个读频率指令,初始表格有18个数据却没告诉读者怎么来的。
【2】由于国内plc市场国外品牌进入早,使用者已经习惯了其用法,如三菱的RS指令,所以国产PLC在创新的同时必须考虑到大多数人的习惯,不能自己想当然就认为使用者也想当然,正是由于通讯指令用法固定一旦明白就觉得没什么奥妙,所以开发者出发点必须让初次使用者很容易理解和操作,而不是让他们绞尽脑汁。
【3】comm指令的16 位模式不太好用,如读取寄存器2102(hex),使用者在输入初始表格的时候要写成0x0221,在使用RS指令的时候多数情况下都是用8位模式,但海为的comm.BL费了九牛二虎也没链接成功。
【结论】 一旦使用者熟练了其用法就觉得没什么可探讨的,甚至于海为的开发者还在为自己的杰作而沾沾自喜,作为初次使用者所遇到的问题应该成为海为改进的方向。
15-07-28 22:47
你好!已经转给海为工作人员。
15-07-28 23:12
楼主,你的变频器是Modbus协议吧?我查了下海为手册, E S系列,PLC是支持N, 8, 2 For RTU ,E, 8, 1 For RTU      O, 8, 1 For RTU ,N, 7, 2 For ASCII , E, 7, 1 For ASCII , O, 7, 1 For ASCII。另外变频器的校验方式应该可以改的吧?如果可以的话:
1、建议你把变频器设置为奇校验或者偶校验,也就是E 8 1,或者O 8 1这样的话,就可以直接用MODR和MODW指令了。
2、海为软件好像自带了很多个和变频器通讯的例子,在你软件安装目录的Program文件夹里,我查看了下,里面正好有一个“通信演示程序-安川变频器.gpc”的例子,楼主可以看看哇!
刚用海为两年,只能帮你到这里了表情
15-07-29 09:08
s16m2r只支持n,8,2
15-07-29 10:26
要想支持一位停止位必须采用comm指令。
15-07-29 10:28
感谢楼主和各工控朋友对海为的支持!
1、如“929263961”所说,您如果是N, 8, 2 For RTU 、E, 8, 1 For RTU 、 O, 8, 1 For RTU 、N, 7, 2 For ASCII
、E, 7, 1 For ASCII、O, 7, 1 For ASCII 的通讯资料格式,可以用MODR和MODW指令,要是N, 8, 1 For RTU,E S系
列主机得用COMM指令来跟变频器做通讯。
2、COMM指令你可以理解为我们常用的串口调试工具软件跟变频器通讯。它有两种发送数据的模式:高低字节发送模式
COMM,和低字节发送模式COMM.LIB。
  模式可以通过双击这条指令来设置选择。
  高低字节发送模式:先发寄存器的低字节数据,再发寄存器的高字节数据;
  低字节发送模式  :只发送寄存器的低字节数据。
假设:你的变频器地址是01 读取地址是2102(Hex),那么Modbus读的功能码就是03,根据标准Modbus协议可知,我们要发送的数据为:
  01(地址) 03(功能码) 21(读地址高字节) 02(读地址低字节) 00(个数高字节) 01(个数低字节)2F (CRC校验)F6(CRC校验)
就是发送为8字节:01 03 21 02 00 01 2F F6,选用高低字节发送模式COMM,发送数据的起始地址为V1000,发送字节数为8,根据Modbus协议可知,回来的字节数7字节,回来数据假设存在V50为起始的地址中,那么COMM指令程序如下:
附件 1.jpg
初始寄存器表里填入我们要发送的数据,如下:
附件 2.jpg
由上述高低字节发送的模式:先发寄存器的低字节数据,再发寄存器的高字节数据;所以最终发送出去数据就是:
01 03 21 02 00 01 2F F6,发送完,变频器接收到命令数据,并且响应返回7个字节数据,假设这个2102(Hex)的数值为十进制数1000,也就是16进制的0x03E8,那么根据Modbus协议,返回数据为 01 03 02 03 E8 B8 FA
最后修改:2015/7/29 15:10:52
15-07-29 10:39
楼主说“令我没想到的是捣鼓了一下午加半晚上才跟变频器通讯上,读出的频率乱七八糟不知道怎样转换”,我想这个就是对返回数据不知道如何解析的问题,以下我讲介绍下,对返回的数据“01 03 02 03 E8 B8 FA”如何解析出,最终得到我们要的数值1000。
由上述介绍可知,我们把返回数据存在V50起始地址中,返回时先把数据放在低字节,再存放在高字节,依此类推,所以数据返回时,最终在寄存器中的存放如下:
附件 3.jpg
我们可以看到,我们要的03E8这个数据,在V51的高字节和V52的低字节,接下来我们要做的就是先用左移指令,把数据左移一个字节,然后把03E8放在同一个寄存器,左移动完就在V52存放为E803,如下图:
附件 5.jpg
那这个跟我们实际要的03E8需要高低字节交换,所以我们用XCH进行高低字节交换即可。以下是具体程序:
附件 4.jpg
程序用海为通讯仿真器仿真。
最后修改:2015/7/29 11:13:40
15-07-29 11:09
您好!您可以通过双击通讯指令的Protocol管脚,然后在即可选择我们需要的资料格式,比如MODR指令可选择如下:
附件 6.jpg
同样的COMM指令也是可以选择设置,如下图:
附件 7.jpg
15-07-29 11:23
跟楼主学习知识了,谢谢。
15-07-29 11:23
支持很多格式的,海为的通讯我用得多,总体来说:PLC做主站时,一个通讯口可以同时走不同波特率和资料格式,因为他的通讯参数是由Protocol这个管脚定义的,由通讯指令决定,跟通讯口默认的参数是19200 N 8 2或者其他,没有关系。
PLC做从站的时候,比如接个上位机组态或者触摸屏 文本的时候你才要关心主机的通讯口的通讯参数是多少。
PLC做主站的时候,跟仪表通讯的波特率 和资料格式 都由通讯指令的PROTOCOL这个管脚决定。
15-07-29 11:31

上一页下一页

工控新闻

更多新闻资讯