很少看到富士变频器通信方面的实例,在这里开个帖子弄个实例。该实例经笔者测试,成功!
关于富士G11/P11系列变频器的通信协议及更详细的内容,请参阅相关手册,也请查阅下面的帖子:
富士变频器通信应用实例:http://www.gongkong.com/Forum/ForumTopic.aspx?Id=2008112811473600003
........这个PLC程序中,我采用了另一种思维方法。
........普通的思维方法是:要发送数据时,用MOVB指令把数据写入发送缓冲区;这样发送不同的数据时需要写很多的MOVB指令,程序看来比较复杂,有点头晕。
........这个程序的思维方法是:有多少种命令,把发送数据全部在数据块中写入相应的存储区。程序中需要发送某个指令的时候把对应存储区的数据直接COPY到发送缓冲区;这样发送不同的数据时仅需要几个BLK_MOVB指令,不需要写很多的MOVB指令,程序看来比较简洁。
下面是数据块的内容:
DATA_BLOCK_TAB 用户定义1
//
BEGIN
//按 F1 键获取帮助和示范数据页
//频率给定60Hz:01 30 32 05 57 53 30 35 20 31 37 37 30 03 36 38
VB101 16#1
VB102 16#30
VB103 16#32
VB104 16#05
VB105 16#57
VB106 16#53
VB107 16#30
VB108 16#35
VB109 16#20
VB110 16#31
VB111 16#37
VB112 16#37
VB113 16#30
VB114 16#03
VB115 16#36
VB116 16#38
//正转运行:01 30 32 05 66 30 30 30 31 03 39 31
VB201 16#1
VB202 16#30
VB203 16#32
VB204 16#05
VB205 16#66
VB206 16#30
VB207 16#30
VB208 16#30
VB209 16#31
VB210 16#03
VB211 16#39
VB212 16#31
//反转运行:01 30 32 05 66 30 30 30 32 03 39 32
VB301 16#1
VB302 16#30
VB303 16#32
VB304 16#05
VB305 16#66
VB306 16#30
VB307 16#30
VB308 16#30
VB309 16#33
VB310 16#03
VB311 16#39
VB312 16#32
//停止运行:01 30 32 05 66 30 30 30 30 03 39 30
VB401 16#1
VB402 16#30
VB403 16#32
VB404 16#05
VB405 16#66
VB406 16#30
VB407 16#30
VB408 16#30
VB409 16#30
VB410 16#03
VB411 16#39
VB412 16#30
//读取当前运行频率:01 30 32 05 52 4d 30 39 20 30 30 30 30 03 35 32
VB501 16#1
VB502 16#30
VB503 16#32
VB504 16#05
VB505 16#52
VB506 16#4D
VB507 16#30
VB508 16#39
VB509 16#20
VB510 16#30
VB511 16#30
VB512 16#30
VB513 16#30
VB514 16#03
VB515 16#35
VB516 16#32
END_DATA_BLOCK_TAB
下面是主程序的内容:(把下面的内容复制到WIN XP的记事本后保存个新名字,如“富士通信.txt”再把“富士.txt”的后缀名修改为“富士.awl”后保存。打开西门子编程软件,点击“文件”/“导入”找到自己保存的“富士.awl”后导入即可。再把上面的蓝色数据块内容复制保存一个“富士数据块.txt”,打开编程软件的数据块后点击“文件”/“导入”找到自己保存的“富士数据块.txt”后导入。注意内容不要遗漏)
ORGANIZATION_BLOCK 主程序:OB1
TITLE=S7-200 CPU226CN(6ES7216-2AD23-0XB8)通过自由口通信控制富士FRN3.7G11S-4CX型变频器(序列号FEA032G00370-1-072);
// 本程序采用PORT1端口与变频器通信,把PORT0端口留给PLC与其编程软件STEP 7 MicroWIN进行通信,以便实时监测PLC的数据变化;
// 实际上,早期的G11不支持Modbus通讯,通讯使用富士电机自己的协议--在其RS485接口手册上有详细的指令格式。从06年开始,G11支持了Modbus通讯,通过用户在变频器参数U49中选择是采用富士电机协议FGI-Bus还是采用Modbus RTU协议。不过,笔者的这台富士变频器太老,不支持Modbus RTU协议,所以就采用自由口通信来控制这台富士FRN3.7G11S-4CX型变频器;
// 虽然MODBUS RTU模式通信相对而言比较简单,不过快乐到自由口通信应用更为广泛和灵活,该程序的自由口通信也比较有参考价值。
// 变频器参数设置:与通讯有关的主要参数设置如下所诉(如果变频器通信过程中存在问题"无法按设定频率运行等",怀疑其他参数还有问题,那么请将参数初始化"参数H03,同时按STOP键和上键设为1,再按FUNC/DATA键确认"以后再来设定以下参数)。
// 变频器地址设置为2,通讯格式设置为9600bps,8位数据,E〕偶校验,1个停止位:
// F01:频率设定1;默认为0,采用默认值;
// H30:链接功能(通信功能);默认为0,现设置为3--RS485设定有效,运行命令有效;
// H31:RS485地址;默认为1,现设置为2;
// H32:故障处理;默认为0--立即Er8跳闸,采用默认值;
// H33:定时时间--通信故障后,再定时时间内继续运行;默认为2.0秒,采用默认值;
// H34:通信传送速度(波特率);默认为1--9600bit/s,采用默认值;
// H35:数据长度:默认值0--8位数据,采用默认值
// H36:奇偶校验;默认值0--无奇偶校验,现设置为1--偶校验;
// H37:停止位;默认值0--2个停止位,现设置为1--1个停止位;
// H49:RS485协议;默认为0--富士专用通信协议FGI-Bus,采用默认值;对于老版本变频器,不用设置该参数(因为没有该参数),默认就是富士专用通信协议FGI-Bus;该程序为控制1台变频器的程序,如果要控制多台变频器,那么发送/接收/频率显示功能还需要进行相关处理--接收条件,频率显示对应的地址等。
BEGIN
Network 1 // PORT1端口自由口通信初始化
// 首次扫描初始化PORT1通讯口;
// SMB30控制PORT0通讯口的通信方式,SMB130控制PORT1通信口的通信方式;
// SMB130的值为16#49,就是二进制的1001001;
// SM130.0~SM130.1:01为自由口协议;
// SM130.2~SM130.4:010为9600波特;
// SM130.5:0为每个字符8个数据位;
// SM130.6~SM130.7:01为偶校验;
// PORT1自由口通信参数即为:9600,8,E,1,即9600波特,8个数据位,偶校验,1个停止位。
// 设置发送的数据字节数为16#10,就是十进制的16个Bytes。
LD SM0.1
MOVB 16#49, SMB130
MOVB 16#10, VB10
Network 2 // 频率给定60Hz
LD I0.0
EU
BMB VB101, VB11, 16
Network 3 // 正转运行
LD I0.1
EU
BMB VB201, VB11, 16
Network 4 // 反转运行
LD I0.2
EU
BMB VB301, VB11, 16
Network 5 // 停止
LD I0.3
EU
BMB VB401, VB11, 16
Network 6 // 读取当前运行频率
// 每0.5秒读一次;笔者建议该时间为0.5秒至1秒比较合适;
// 如果读取时间间隔太短(笔者以100mS为例),将影响其他信号(频率设置/正负转/停止指令)的发送--因为PLC频繁的去接收信息,而接收没有完成的情况下又不能发送指令(此时频率设置/正负转/停止指令无效);只有等到接收完成后,才可以接收其他指令,可是在很短的时间后又开始下一次发送频率读取指令了,这个时间间隔很短--经常引起频率设置/正负转/停止指令无效。
// 如果读取间隔时间很短(笔者以100mS为例测试),采用串口调试助手,也会导致该富士变频器响应跟不上,变频器经常输出错误信息。如果PLC接收到错误消息,也就失去了快速监测的意义了。当读取间隔时间增大到200mS,就没发现有错误信息了。
LD SM0.0
LPS
AN T37
TON T37, 5
LPP
A T37
BMB VB501, VB11, 16
Network 7
// 在发送数据前中断接收工作;如果不这样做,一旦遇上PLC工作中出现通讯线断开以后再连接上的情况,PLC将无法发送数据,无法执行控制指令。更具体的说明,请参阅"PORT1通讯口接收信息控制"程序段的注释;
// 从指定的PORT1端口发送数据缓冲区TBL的数据,TBL的第一个数据(本例为VB10)指明了发送的字节数(本例为16,即VB11~VB26);
LD I0.1
O I0.2
O I0.3
O T37
EU
R SM187.7, 1
RCV VB601, 1
XMT VB10, 1
Network 8
// 首次扫描;定义PORT1发送完成中断服务为INT-0;
// 全局中断允许。
LD SM0.1
ATCH INT0, 26
ENI
Network 9 // 通讯口接收信息控制
// 初始化接收信息控制字节SMB187:16#B0即二进制11010000;使能RCV;检测信息起始字符;检测空闲线信息条件;设置检测起始字符来判断接收开始,检测空闲线超时来判断接收结束;
// 初始化接收信息控制字节SMB187:16#9C即二进制10011100;用任意字符开始一条信息允许使用信息定时器,来监控信息接收是否超时。这对于自由口协议的主站是非常有用的,并且当在指定时间内,没有来自从站的任何响应的情况,也需要采取超时处理。对于空闲线时间设置为0,当接收指令执行时,信息定时器启动。如果没有其他终止条件满足,信息定时器超时会接收接收信息功能。设置:il=1,sc=0,bk=0,SMW90/SMW190=0,SMB88/SMB188被忽略,c/m=1,tmr=1,SMW92/SMW192=信息超时时间,单位为毫秒。信息定时器的典型值是在当前波特率下,接收到最长信息所需时间值的大约1.5倍。
// 用户接收:用户可以通过程序来结束接收信息功能,先将SMB87或SMB187中的使能位置为0,再次执行接收指令即可。这样可以立即终止接收信息功能。
// 关于通信超时的问题,在SM187.2设为1的时候,并不是超过SMW192的时间值即终止接收,而是只有接收到首字符后未能在规定时间内完成接收才可以自动终止接收,如果收不到首字符,RCV将一直保持有效。解决办法:如果要停止RCV,需要复位相应的SM187.7,但是需要执行一次RCV才能有效,因为只有新的RCV指令CPU才去读SMB。……所以,无论怎么设置SMB187,一旦运行中通讯线断开,RCV就可能一只在执行,因此在发送指令前必 |