找回密码
 注册

QQ登录

只需一步,快速开始

搜索

[变频传动] 西门子s7-200与富士变频器通讯的程序,有详细注释

[复制链接]
问题多多 发表于 2018-10-18 11:37:22 | 显示全部楼层 |阅读模式
厂商
厂商: 西门子
本程序采用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台变频器的程序,如果要控制多台变频器,那么发送/接收/频率显示功能还需要进行相关处理--接收条件,频率显示对应的地址等。
富士通讯.zip (9.53 KB, 售价: 15 E币)

1.jpg 2.jpg

首次扫描初始化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#08,就是十进制的8个Bytes。

下面是中断子程序(中断号26是发送完成中断)的内容:
从指定的PORT端口接收数据缓冲区TBL的数据,TBL的第1个数据(本例为VB601)指明了接收的字符数;
在接收的时候有个问题需要说明一下,因为接收的控制字设置中启动了空闲线检测,所以SMW190设置的时间没用--也就是说,只要没检测到结束字符,不会因为超时而终止接收。而在实际的测试中,也印证了上面的说法:在上例中,只要接收时没用接收到结束字符,而且接收到的字节也不够,那么PLC不会因为没有接收到信息而超时停止接收--此时,虽然RCV指令已经断开,但因为接收没有完成,它仍然在执行接收操作。此时如果执行发送指令,那么是不可以的,无法发送数据!如果要定时器超时功能有效,那么得再设置控制字的时候,把空闲线设置为无效,把定时器超时设置为有效,并设置定时器SMW190的值。更具体的描述请参阅相关手册。
VB601表示接收到多少个字节的信息,VB602~617为接收到的数据;
根据富士专用通讯协议FGI-Bus可知,VB611~614的数据就是当前频率值。

初始化接收信息控制字节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指令前,首先执行R SM87.7,1;RCV VB100,0两条指令(VB100可以换成其他地址);
设定信息起始字符为16#01;
SMB190设置空闲线超时;
SMB194设置接收的最大字符为8个字节;
接收信息控制字节en sc ec il c/m tmr bk 0
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=用中断条件作为信息检测的开始。

jale 发表于 2018-12-25 23:22:28 来自手机 | 显示全部楼层
学习一下     
jale 发表于 2018-12-26 09:23:38 | 显示全部楼层
进来学习一下。
lizhendong 发表于 2019-1-17 16:01:34 | 显示全部楼层
支持支持一下,能用吗
whd8023 发表于 2019-3-24 19:11:37 | 显示全部楼层
学习一下 支持支持
承诺 发表于 2019-12-27 11:54:29 | 显示全部楼层
过来看看,行不行?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-26 23:05

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表