S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx

上传人:b****8 文档编号:10197345 上传时间:2023-02-09 格式:DOCX 页数:23 大小:530.87KB
下载 相关 举报
S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx_第1页
第1页 / 共23页
S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx_第2页
第2页 / 共23页
S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx_第3页
第3页 / 共23页
S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx_第4页
第4页 / 共23页
S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx

《S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx》由会员分享,可在线阅读,更多相关《S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx(23页珍藏版)》请在冰豆网上搜索。

S7200 CPU226CN与富士G11P11系列变频器的通信实例.docx

S7200CPU226CN与富士G11P11系列变频器的通信实例

S7-200CPU226CN与富士G11/P11系列变频器的通信实例

........这个PLC程序中,我采用了另一种思维方法。

........普通的思维方法是:

要发送数据时,用MOVB指令把数据写入发送缓冲区;这样发送不同的数据时需要写很多的MOVB指令,程序看来比较复杂,有点头晕。

........这个程序的思维方法是:

有多少种命令,把发送数据全部在数据块中写入相应的存储区。

程序中需要发送某个指令的时候把对应存储区的数据直接COPY到发送缓冲区;这样发送不同的数据时仅需要几个BLK_MOVB指令,不需要写很多的MOVB指令,程序看来比较简洁。

下面是数据块的内容:

下面是主程序的内容:

我都发这么多图片了,不填满10个字硬是不准我发送,汗!

下面是中断子程序(中断号26是发送完成中断)的内容:

为了方便学习,我把“老菜鸟”的以上内容字直接用文本的形式保存,可以直接导入到西门子编程软件里面试验与富士变频器通信。

闲事准备与我公司的富士变频器通信试验。

 

S7-200CPU226CN与富士G11/P11系列变频器的通信实例

很少看到富士变频器通信方面的实例,在这里开个帖子弄个实例。

该实例经笔者测试,成功!

关于富士G11/P11系列变频器的通信协议及更详细的内容,请参阅相关手册,也请查阅下面的帖子:

富士变频器通信应用实例:

........这个PLC程序中,我采用了另一种思维方法。

........普通的思维方法是:

要发送数据时,用MOVB指令把数据写入发送缓冲区;这样发送不同的数据时需要写很多的MOVB指令,程序看来比较复杂,有点头晕。

........这个程序的思维方法是:

有多少种命令,把发送数据全部在数据块中写入相应的存储区。

程序中需要发送某个指令的时候把对应存储区的数据直接COPY到发送缓冲区;这样发送不同的数据时仅需要几个BLK_MOVB指令,不需要写很多的MOVB指令,程序看来比较简洁。

下面是数据块的内容:

DATA_BLOCK_TAB用户定义1

//

BEGIN

//按F1键获取帮助和示范数据页

//频率给定60Hz:

01303205575330352031373730033638

VB10116#1

VB10216#30

VB10316#32

VB10416#05

VB10516#57

VB10616#53

VB10716#30

VB10816#35

VB10916#20

VB11016#31

VB11116#37

VB11216#37

VB11316#30

VB11416#03

VB11516#36

VB11616#38

//正转运行:

013032056630303031033931

VB20116#1

VB20216#30

VB20316#32

VB20416#05

VB20516#66

VB20616#30

VB20716#30

VB20816#30

VB20916#31

VB21016#03

VB21116#39

VB21216#31

//反转运行:

013032056630303032033932

VB30116#1

VB30216#30

VB30316#32

VB30416#05

VB30516#66

VB30616#30

VB30716#30

VB30816#30

VB30916#33

VB31016#03

VB31116#39

VB31216#32

//停止运行:

013032056630303030033930

VB40116#1

VB40216#30

VB40316#32

VB40416#05

VB40516#66

VB40616#30

VB40716#30

VB40816#30

VB40916#30

VB41016#03

VB41116#39

VB41216#30

//读取当前运行频率:

01303205524d30392030303030033532

VB50116#1

VB50216#30

VB50316#32

VB50416#05

VB50516#52

VB50616#4D

VB50716#30

VB50816#39

VB50916#20

VB51016#30

VB51116#30

VB51216#30

VB51316#30

VB51416#03

VB51516#35

VB51616#32

END_DATA_BLOCK_TAB

下面是主程序的内容:

(把下面的内容复制到WINXP的记事本后保存个新名字,如“富士通信.txt”再把“富士.txt”的后缀名修改为“富士.awl”后保存。

打开西门子编程软件,点击“文件”/“导入”找到自己保存的“富士.awl”后导入即可。

再把上面的蓝色数据块内容复制保存一个“富士数据块.txt”,打开编程软件的数据块后点击“文件”/“导入”找到自己保存的“富士数据块.txt”后导入。

注意内容不要遗漏)

ORGANIZATION_BLOCK主程序:

OB1

TITLE=S7-200CPU226CN(6ES7216-2AD23-0XB8)通过自由口通信控制富士FRN3.7G11S-4CX型变频器(序列号FEA032G00370-1-072);

//本程序采用PORT1端口与变频器通信,把PORT0端口留给PLC与其编程软件STEP7MicroWIN进行通信,以便实时监测PLC的数据变化;

//实际上,早期的G11不支持Modbus通讯,通讯使用富士电机自己的协议--在其RS485接口手册上有详细的指令格式。

从06年开始,G11支持了Modbus通讯,通过用户在变频器参数U49中选择是采用富士电机协议FGI-Bus还是采用ModbusRTU协议。

不过,笔者的这台富士变频器太老,不支持ModbusRTU协议,所以就采用自由口通信来控制这台富士FRN3.7G11S-4CX型变频器;

//虽然MODBUSRTU模式通信相对而言比较简单,不过快乐到自由口通信应用更为广泛和灵活,该程序的自由口通信也比较有参考价值。

//变频器参数设置:

与通讯有关的主要参数设置如下所诉(如果变频器通信过程中存在问题"无法按设定频率运行等",怀疑其他参数还有问题,那么请将参数初始化"参数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

Network1//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。

LDSM0.1

MOVB16#49,SMB130

MOVB16#10,VB10

Network2//频率给定60Hz

LDI0.0

EU

BMBVB101,VB11,16

Network3//正转运行

LDI0.1

EU

BMBVB201,VB11,16

Network4//反转运行

LDI0.2

EU

BMBVB301,VB11,16

Network5//停止

LDI0.3

EU

BMBVB401,VB11,16

Network6//读取当前运行频率

//每0.5秒读一次;笔者建议该时间为0.5秒至1秒比较合适;

//如果读取时间间隔太短(笔者以100mS为例),将影响其他信号(频率设置/正负转/停止指令)的发送--因为PLC频繁的去接收信息,而接收没有完成的情况下又不能发送指令(此时频率设置/正负转/停止指令无效);只有等到接收完成后,才可以接收其他指令,可是在很短的时间后又开始下一次发送频率读取指令了,这个时间间隔很短--经常引起频率设置/正负转/停止指令无效。

//如果读取间隔时间很短(笔者以100mS为例测试),采用串口调试助手,也会导致该富士变频器响应跟不上,变频器经常输出错误信息。

如果PLC接收到错误消息,也就失去了快速监测的意义了。

当读取间隔时间增大到200mS,就没发现有错误信息了。

LDSM0.0

LPS

ANT37

TONT37,5

LPP

AT37

BMBVB501,VB11,16

Network7

//在发送数据前中断接收工作;如果不这样做,一旦遇上PLC工作中出现通讯线断开以后再连接上的情况,PLC将无法发送数据,无法执行控制指令。

更具体的说明,请参阅"PORT1通讯口接收信息控制"程序段的注释;

//从指定的PORT1端口发送数据缓冲区TBL的数据,TBL的第一个数据(本例为VB10)指明了发送的字节数(本例为16,即VB11~VB26);

LDI0.1

OI0.2

OI0.3

OT37

EU

RSM187.7,1

RCVVB601,1

XMTVB10,1

Network8

//首次扫描;定义PORT1发送完成中断服务为INT-0;

//全局中断允许。

LDSM0.1

ATCHINT0,26

ENI

Network9//通讯口接收信息控制

//初始化接收信息控制字节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就可能一只在执行,因此在发送指令前必须先禁止接收(将SM187.7复0)然后执行RCV指令,RCV指令执行时将会检测SM87.7的状态,当发现SM87.7=0时,即停止端口1的接收。

在使用XMT指令前,首先执行RSM87.7,1;RCVVB100,0两条指令(VB100可以换成其他地址);

//设定信息起始字符为16#01;

//SMB190设置空闲线超时;

//SMB194设置接收的最大字符为16个字节;

//接收信息控制字节enscecilc/mtmrbk0

//en:

0=禁止接收信息功能。

1=允许接收信息功能。

每次执行RCV指令时检查允许/禁止接收信息位。

//Sc:

0=忽略SMB88或SMB188。

1=使用SMB88或SMB188的值检测起始信息。

//Ec:

0=忽略SMB89或SMB189。

1=使用SMB89或SMB189的值检测结束信息。

//il:

0=忽略SMW90或SMW190。

1=使用SMW90或SMW190的值检测空闲状态。

//c/m:

0=定时器是内字符间定时器。

1=定时器是信息定时器。

//Tmr:

0=忽略SMW92或SMW192。

1=当SMW92或SMW192中的定时时间超出时终止接收。

//Bk:

0=忽略中断条件。

1=用中断条件作为信息检测的开始。

LDSM0.1

MOVB16#9C,SMB187

MOVW16#1,SMW188

MOVW0,SMW190

MOVB255,SMB192

MOVB16,SMB194

Network10//变频器输出频率计算

//只有VB=16#4D〕时,接收到的数据才是变频器返回的频率数据;

//根据RCV接收指令和富士专用通信协议FGI-Bus可知,VB610~613的数据就是当前频率值。

//把字节转换为整数;

//把ASCII代码数值转换为16进制数;

LDSM187.7

AB=VB607,16#4D

LPS

BTIVB611,VW810

BTIVB612,VW812

BTIVB613,VW814

BTIVB614,VW816

AW

MOVWVW810,VW820

-I16#30,VW820

LRD

AW>VW810,16#40

MOVWVW810,VW820

-I16#37,VW820

LRD

AW

MOVWVW812,VW822

-I16#30,VW822

LRD

AW>VW812,16#40

MOVWVW812,VW822

-I16#37,VW822

LRD

AW

MOVWVW814,VW824

-I16#30,VW824

LRD

AW>VW814,16#40

MOVWVW814,VW824

-I16#37,VW824

LRD

AW

MOVWVW816,VW826

-I16#30,VW826

LPP

AW>VW816,16#40

MOVWVW816,VW826

-I16#37,VW826

Network11

//把这些16进制数组合起来并转换成实数;

LDSM187.7

AB=VB607,16#40

MOVWVW820,VW830

*I16#1000,VW830

MOVWVW822,VW832

*I16#0100,VW832

MOVWVW824,VW834

*I16#10,VW834

MOVWVW830,VW840

+IVW832,VW840

MOVWVW840,VW842

+IVW834,VW842

MOVWVW842,VW844

+IVW826,VW844

ITDVW844,VD846

DTRVD846,VD850

Network12

LDSM187.7

AB=VB607,16#40

MOVRVD850,VD888

/R100.0,VD888

END_ORGANIZATION_BLOCK

SUBROUTINE_BLOCKSBR_0:

SBR0

TITLE=子程序注释

BEGIN

Network1//网络标题

//网络注释

END_SUBROUTINE_BLOCK

INTERRUPT_BLOCK发送完成中断:

INT0

TITLE=下面是中断子程序(中断号26是发送完成中断)的内容:

BEGIN

Network1//发送完成中断

//从指定的PORT端口接收数据缓冲区TBL的数据,TBL的第1个数据(本例为VB601)指明了接收的字符数;

//在接收的时候有个问题需要说明一下,因为接收的控制字设置中启动了空闲线检测,所以SMW190设置的时间没用--也就是说,只要没检测到结束字符,不会因为超时而终止接收。

而在实际的测试中,也印证了上面的说法:

在上例中,只要接收时没用接收到结束字符,而且接收到的字节也不够,那么PLC不会因为没有接收到信息而超时停止接收--此时,虽然RCV指令已经断开,但因为接收没有完成,它仍然在执行接收操作。

此时如果执行发送指令,那么是不可以的,无法发送数据!

如果要定时器超时功能有效,那么得再设置控制字的时候,把空闲线设置为无效,把定时器超时设置为有效,并设置定时器SMW190的值。

更具体的描述请参阅相关手册。

//VB601表示接收到多少个字节的信息,VB602~617为接收到的数据;

//根据富士专用通讯协议FGI-Bus可知,VB611~614的数据就是当前频率值。

LDB=VB16,16#4D

SSM187.7,1

RCVVB601,1

END_INTERRUPT_BLOCK

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1