S7-200PLC基于Modbus与ABB变频器的通信

发表于 讨论求助 2019-05-21 21:29:22

可编程控制器

    1.系统配置方案

    (1)系统配置方案1

    采用S7-200PLC与四台ABBACS510变频器构成Modbus网络如图4-26a所示,S7-200PLC为主工作站,变频器1、变频器2、变频器3和变频器4为从工作站。设置变频器的通信协议参数9802均为1,即变频器通过RS- 485串行通信接口和Modbus总线相连。设置通信速率参数530319. 2kbit/s。设置校验方式参数5304为偶校验,1个停止位。设置控制类型参数5305ABB传动版。从左到右变频器1234的站地址参数5302分别设置为3456,并将变频器4的总线终端电阻DIP开关置ON。在对变频器以上参数设置完成后应对传动重新上电激活,使新地址及通信协议生效。


    4-26    系统构成框图

    变频器分现场和远程两种控制模式,现场控制柜设置三位置模式选择开关,分别为停止、本控和远程。在本控模式下起动/停止命令由现场开关触发数字输入DI1控制,频率由现场的电位器改变模拟输入AI1的输入电压进行调节。当选择远程模式时,数字输入DI2接通,通知PLC变频器已经处于远程控制模式。为能够实现以上功能并在人机界面能够观察到变频器的运行频率和通过模拟输入AI2输入的实际流量,还需要对变频器其他部分参数进行设置。

    (2)系统配置方案2

    在此系统方案中,PLC采用西门子公司的SIMATICS7-226系列,S7-200系列属于小型PLC,可用于代替继电器的简单控制场合,也可以用于复杂的自动化控制系统。S7-226系列PLCCPU内部集成了2个通信接口,该通信接口为标准的RS-485口,可在三种方式下工作,即PPI方式、MPI方式和自由通信接口方式。PPI (Point-to-Point)是西门子专为S7-200系列PLC开发的一个通信协议,为主/从协议,可以将第一个口设为PPI方式,用于连接PC,用来作人机信息交换,而第二个口设为自由通信接口方式,自由口通信方式是S7-200PLC的一个很有特色的功能。它是一种通信协议完全开放的工作方式,在该方式下的通信接口的协议由外设决定,PLC通过程序来适应外设,从而使得S7-200系列PLC可以与任何具有通信能力的并且协议公开的设备通信,即S7-200PLC可以由用户自己定义通信协议。采用ABBACS800系列变频器时,需配置NNMBA-01适配模块。相关系统构成框图如图4-26b所示。在该系统中,PLCPort2和变频器构成Modbus总线网络,通过S7-226PLC控制多台变频器完成系统控制需要,实现对变频器的速度设定、运行状态监控及参数交换等。

    2.网络协议

    在本系统中S7-226 PLC作为主站,变频器作为从站时,主站向变频器传送运行指令,同时接收变频器反馈的运行状态及故障报警状态的信号。西门子在Micro/WinV4.0SP5中推出ModbusRTU主站协议库(西门子标准库指令)。通过调用该指令库,可以使S7-200CPU上的通信接口设置在自由口模式下,成为ModbusRTU的主站(对Port0Portl有效)。在S7-200控制系统中,要实现ModbusRTU通信,需要STEP7-Micro/Win32V4.0软件且必须安装的指令库如图4-27所示。在调用指令库时,需要注意以下问题:调用库指令时要为其分配存储区,此数据区不能和其他数据重叠,否则在运行时会产生错误,不能正常通信。

    STEP7-Micro/Win32指令库包含有专门为Modbus通信设计的预先定义的子程序和中断服务程序,使得PLCModbus从站的通信简单易行。调用ModbusRTU主站初始化和控制子程序如图4-28所示,使用SM0.0(Always-On)调用MBUS-CTRL完成主站的初始化,并起动其功能控制。调用ModbusRTU主站读写子程序如图4-29所示。

    4-27    指令库

    4-28    调用ModbusRTU主站初始化与控制子程序

    4-29    调用ModbusRTU主站读写子程序

    在控制精度要求不高的情况下,通信程序的编写可以在调用主站初始化和控制子程序后,采用定时轮回发出读写指令的方式,定时周期应大于从站响应时间。控制精度要求高的情况下,可以采用前一读写子程序的完成位,驱动后一读写子程序的读写请求位,多次调用读写子程序时,最后一次调用的读写完成位用来起动首次调用子程序的读写请求位,如此循环的程序流程图如图4-30所示。

    4-30    程序流程图

    变频器与NMBA- 01通信适配器模块相连,接入Modbus网中作为从站,接受从主站SIMATICS7-226来的控制。NMBA-01通信适配器模块将从Modbus网中接收到的过程数据存入双向RAM中的每一个字都被编址,在变频器端的双向RAM可通过被编址参数排序,向变频器写入控制字、设置值或读出实际值、诊断信息等参量。

    变频器现场总线控制系统若从软件角度看,其核心内容是现场总线的通信协议。Modbus通信协议的数据报文结构分为协议头、网络数据和协议层。Modbus通信协议是一种串行的、非同步的主从通信协议,网络中只有—个设备能够建立协议,其他的设备只能通过提供数据响应主机的查询,或根据查询做出相应的动作。Modbus协议定义了主机查询的格式,其包括:主从机的编址方法(或广播);要求动作的功能代码;传输数据和错误校验等,若不能完成主机要求的动作,它将组织一个故障作为响应。Modbus协议不需要特别的接口,典型的物理接口是RS- 485。在Modbus通信网络中,一般提供ASCIIRTU两种通信模式。本控制系统中,S7-200PLC通过自由口编程支持Modbus协议,可以灵活运用ASCIIRTU两种通信模式,ABB变频器支持Modbus中的RTU通信模式。

    在本控制中,较难做的是对S7-200PLC自由口的编程,通过编制Modbus协议来实现通信和对变频器的控制,自由口的编程尤以CRC校验程序最为关键,而在ABB变频器上,只需对几项参数进行相关的设置就可以了。

    3.通信内容

    主工作站轮流发送请求报文到每个变频器从工作站,随之每个从工作站产生响应报文。PLC主工作站分别对每个变频器从工作站进行如下操作:

    1)对每个变频器的输出线圈13的状态进行查询。

    2)查询变频器状态寄存器40004状态字、40005实际值、40006实际值和40007实际值。40005~ 40007数据值对应于变频器参数531053115312中的实际值。

    3)写变频器控制字,对变频器的远程起停进行控制。

    4)写变频器寄存器,对变频器的外部2给定进行控制。

    对一个变频器的数据全部读写完成后,开始对下一站号变频器的数据进行读写。当所有变频器的数据读写完成后,主工作站重新开始对最小站号变频器的数据进行读写。数据的传输及接收采用PLC自由通信接口模式进行,报文按照Modbus的协议组织。

    4.通信格式

    因在S7-200PLC发送的指令中,发送缓冲器的第一个字节指定的是数据传输的字节数,从第二个字节以后的数据为需要发送的数据。在整个网络通信过程中,主工作站轮流发送请求报文到每个从工作站,随之每个从工作站必须产生响应报文返回到主工作站。当主工作站向从工作站发送请求报文和接收从工作站返回的响应报文时,在主工作站储存区开辟了发送缓冲区和接收缓冲区。主工作站向从工作站发送请求报文时,首先对相应从工作站输出缓冲区的数据进行CRC运算生成校验码,并将校验码叠加在输出缓冲区的数据之后再传送到发送缓冲区,然后再由发送指令发出。建立一个远程循环结束标志位,当响应报文全部接收完成,置该位为ON。主工作站在接收从工作站的响应报文时,先把响应报文输入到接收缓冲区,再把接收缓冲区中的数据传送到输入缓冲区。为此,在主工作站中要留有两个数据存储区,一个作为报文请求(输出缓冲区),另一个作为报文响应(输入缓冲区)。

    Modbus通信协议中都必须要求有CRC循环冗余校验,CRC循环冗余校验为两个字节,附加在报文后面的CRC值由发送设备计算,当放置CRC值于报文时,高低字节必须交换。首先发送低位字节,然后再发送高位字节。故此在发送缓冲区中的数据要比输出缓冲区的数据多两个CRC循环冗余校验字节。接收设备在接收报文时重新计算CRC值,并将计算结果与实际接收到的CRC值相比较。如果两个值不相等,则传送的数据为错误。

    (1) Modbus通信格式

    Modbus协议定义了两种传输模式,即RTUASCII。发送同样的数据时,RTU模式的效率大约为ASCII模式的两倍。一般来说,数据量少而且主要是文本时采用ASCII,通信数据量大而且是二进制数值时,多采用RTU模式。

    主站一次可向一个或所有从站发送通信请求(或指令),主设备通过消息帧的地址域来选通从设备。主站发送的消息帧的内容和顺序为:从站地址、功能码、数据域(数据起始地址、数据量、数据内容)、CRC校验码;从站应答的信息内容和顺序与主站信息帧基本相同。Modbus除了定义通信功能码之外,同时还定义了出错码,标志出错信息。主站接收到错误码后,根据错误的原因采取相应的措施。从站应答的数据内容依据功能码进行响应,例如功能代码03要求读取从站设备中保持寄存器的内容。

    (2) CRC校验实现

    Modbus通信的RTU模式中,规定信息帧的最后两个字节用于传递循环冗余校验(CyclicRedundancyCheckCRC)码。发送方将信息帧中地址域、功能码、数据域的所有字节按规定的方式进行位移并进行XOR(异或)计算,即可得到2BCRC码,并把包含CRC校验码的信息帧作为一连续的流进行传输。接收方在收到该信息帧时按同样的方式进行计算,并将结果同收到的CRC码的双字节比较,如果一致就认为通信正确,否则认为通信有误,从站将发送CRC错误应答。

    (3) ABB变频器参数的设置

    ABB变频器的寄存器40001为控制字,寄存器40002为给定值1,寄存器40004为状态字,寄存器40005为实际值。其相关参数设置与说明如下:

    9802=STD-Modbus通信。

    9807=ABBDRIVES

    5201=1(23)-变频器站号。

    5202=5-波特率为9600bit/s

    5203=0-无校验。

    5003=1.0-通信超时时间。

    1001=COMM4. CW-外部命令1为通信控制。

    1003=REQUST-电动机正、反转控制。

    1104=0.1-频率给定最小单位0.1Hz

    1105=50-最大给定频率为50Hz

    1601=COMM4. CW(位3)——通信允许运行。

    1604=COMM. CW(位7)——故障通信复位。

    ABB变频器的菜单参数一一映射为Modbus协议的寄存器,Modbus通信对各寄存器的操作,即实现了对ACS800中与寄存器对应的菜单参数的操作。对应的命令寄存器为40001,对每一台变频器进行控制时,通过计算机给定起停信息。同时,通过对存储寄存器40004的读取,可获得变频器的运行状态等信息,然后通过计算机显示界面,操作人员可以直观地了解变频器运行信息。

    ACS550变频器参数的设置步骤如下:

    1)将变频器参数9802(COMMPROTSEL)改为1(STDModbus)

    2)设置RS-485链路的站点地址,即参数5302 (EFBSTATIONID);将多台变频器地址设置对应站号。

    3)根据主站系统的要求,设置波特率、数据长度和校验方式,即参数5303和参数5304[本系统的参数5303=9.6kbit/s,参数5304 =2 (8E1)8位,偶检验,一个停止位]。变频器其他参数组,如10组、11组、l6组根据要求设置(如需现场总线通过外部1命令运行起动或停止,设置参数1001=10;如需总线设置给定值1参数1102=0,选择外部11103=8,给定值来自串行通信)。

    4) ABB变频器的传递参数0101~ 9999被映射为总线的寄存器40101~ 49999,寄存器40001~40099被映射到传动控制和实际值。例如,主机向通信给定1(Modbus寄存器40002)中写入设定的频率数值[范围为0~ +20000(换算到0~参数1105给定1最大),或- 20000~0(换算到1105给定1最大~0];即设定变频器参数1105= 50Hz,若赋值寄存器40002 =10000,即变频器频率为25Hz。同时,通过读取对应存储寄存器,可以得到变频器运行的状态等信息,然后通过人机界面操作人员可以直观地了解变频器的运行信息。

    5.程序描述

    (1) sbr0子程序

    1)PLC上电初始化阶段,设置通信接口为自由口通信方式,并设置波特率及校验方式,允许全部中断事件,并设置定时中断的时基为20ms。在这里设置波特率为19. 2kbit/s,偶校验,每字符8个数据。但必须与从工作站的通信参数相同。为输出和输入缓冲区的数据地址建立间接寻址指针,并设置请求报文的剩余数目为4,设置从工作站的查询剩余数目为4

    2)将输出缓冲区指针中指出的地址为起始地址的12个字节通过块传送命令传送到发送缓冲区单元中,并复位远程循环结束标志位。

    3)对发送缓冲区中的报文进行运算生成CRC,交换CRC寄存器中的高低字节,并将交换完成的CRC寄存器叠加到发送缓冲区中。

    4)起动定时中断和发送中断,并通过发送指令将发送缓冲区中的请求报文发送。

    5)建立跳转入口,标号1

    6)若循环未结束,跳转到标号1。程序不向下执行,直至远程循环结束,标志位为ON

    7)远程I/O更新完成,将接收的报文通过块传送命令传送到接收缓冲区指针指出的接收缓冲区中。

    8)修改发送缓冲区和接收缓冲区指针值,指向下一个输出和输入缓冲区字节地址。将请求报文的剩余数目减1

    9)当请求报文的剩余数目为零时,重新设置请求报文的剩余数目为4,将从工作站的查询剩余数目减1

    10)当工作站的查询剩余数目为零时,重新设置从工作站的查询剩余数目为4,为输出和输入缓冲区的数据地址重新建立间接寻址指针。

    (2)中断程序

    1) int_0中断程序。在接收报文超时的情况下,禁止接收中断和接收定时中断,置远程循环结束标志位为ON

    2) int_1中断程序。在发送报文超时的情况下,禁止发送中断和发送定时中断,置PLCSTOP模式。

    3) int_10中断程序。禁止发送完成中断,起动接收定时中断int_0和接收数据中断程序int_11

    4) int_11中断程序。若接收的首字符(从工作站地址)为从工作站的正确地址,则建立一个接收字符的地址指针,并把接收到的字符装入到接收字符指针指出地址中。增加指针的数值,指向下一个地址。并起动中断程序int_12

    5) int_12中断程序。把接收到的第二个字符(功能码)装入到接收字符指针指出地址中,增加指针的数值,指向下一个地址。起动中断程序int_13

    6) int_13中断程序。把接收到的第三个字符(字节数)装入到接收字符指针指出地址中,并修改指针值。第三个字符为接收的不含CRC校验码字符的总数目,剩余接收字符数目为将字节数加2,若反馈的功能码为十六进制数Of,全部剩余字符数目为5。将全部剩余字符数目置入到累加器acl中,当累加器acl为零时,接收字符也就完成。起动中断程序int_14

    7) int_14中断程序。将接收到的字符装入接收字符指针指出地址中,并修改地址指针值和将累加器acl数值减1。若累加器acl的数值为零,则关闭字符接收中断和定时中断,并将远程循环结束标志位置ON

    当主站通信程序运行时,调出各变频器参数5306EFBOKMESSAGESEFB好消息),该参数显示变频器收到的有效信息的计数。通信程序正常运行中,该计数器数值一直在增加,即网络通信正常。

(作者稿费要求:需要高清无水印文章的读者3元每篇,请联系客服,谢谢!在线客服:)


发表
26906人 签到看排名