西门子6ES7231-7PF22-0XA0产品信息
在使用西门子S7-200时,在不增加其它通讯接口模块时,紫金桥软件可以通讯PPI协议与S7-200直接通讯。但这种通讯方式由于受通讯协议本身限制,在通讯数据较多时,通讯速度相对较慢,使用Modbus协议则通讯速度可以提高约一倍。下面就介绍一下怎么使用Modbus协议建立S7-200与紫金桥软件之间的通讯:
硬件连接在使用Modbus协议时,计算机与S7-200之间通讯直接使用PPI通讯电缆即可。但如果通讯距离较远,或者需要将多个S7-200连接到一个通讯总线上时,我们可以通过如下方法配制通讯链路。
选配一个计算机通讯端口
由于S7-200通讯端口物理层使用的是RS-485通讯规范,我们需要在计算机端增加一个RS-485通讯端口,才能与计算机通讯建立通讯。如果计算机闲置的串口,我们可以选配一个RS-232转RS-484转换器即可;如果没有闲置的串口,我们通过在计算机中增加一个RS-485通讯卡也可以;现在很多计算机都有USB口,我们也可以在计算机上外接一个USB转RS-485转换器。
连接通讯电缆
S7-200的通讯端口是一个9孔(famel)D型插头,针脚分布如下所示:
针脚
信号
1
地线 (RS-485 逻辑地)
2
24 V 地线 (RS-485 逻辑地)
3
信号B (RxD/TxD+)
4
RTS (TTL level)
5
地线 (RS-485 逻辑地)
6
(空)
7
24 V 电源
8
信号A (RxD/TxD-)
9
通讯选择
S7-200通讯端口(端口0)与RS-485板卡或RS-485/RS-232转换器之间接线,如下图所示:
S7-200编程及设置
在缺省情况下S7-200的通讯端口是不支持Modbus协议的,要想实现Modbus通讯必需在PLC的主程序模块中调用Modbus通讯子程序。Modbus通讯子程序可以从“STEP7-Micro/WIN Add-On: Instruction Library (STEP7-Micro/WIN附件:指令库)”中获得。在安装了“STEP7-Micro/WIN附件:指令库”后,在导航树“指令/库”下面我们可以找到“ModbusProtocol”。在其下面包含了MBUS_INIT和MBUS_SLAVE两个子程序,MBUS_INIT用于对Modbus通讯进行初始化,MBUS_SLAVE用于在指定端口上提供Modbus从站通讯服务。下在介绍如何在主程序中调相关子程序及环境参数设置:
调用Modbus通讯初始化命令为MBUS_INIT命令建立一个触发条件(只触发一次),如:SM0.1;从导航树“指令/库/ ModbusProtocol”下面,将MBUS_INIT指令拖拽到主程序块中。再就是正确设置MBUS_INIT各项调用参数和执行结果输出地址,我们可以建立一下如下图所示初始化调用过程:
Mode:协议类型,1-Modbus协议;0-PPI协议。
Addr: PLC地址,1~247,。
Baud: 通讯波特率,1200、2400、4800、9600、19200、38400、57600或11520。
Parity: 校验方式,0-无校验;1-奇数校验;2-偶数校验。
Delay:信息结束超时时间,0~32767,有线连接设置为0即可。
MaxIQ:0~128,映射在离散输入寄存器或离散输出寄存器中的I或Q数。建议为:128。
MaxAI:0~32;映射在模拟输入寄存器中AIW数;CPU 221为0,CPU 222为16,CPU224、226和226XM为32。
MaxHold:V内存映射在保持寄存器中的寄存器数。
HoldStart:V内存的映射时的起始地址。
Done:初始化指完成时,输出为开状态;开关量(Bit)。
Error:初始化错误代码,请参阅Modbus从机协议执行错误代码;输出为字节。
调用Modbus从机通讯命令初始化完成后,就可以调用Modbus从机通讯命令(MBUS_SLAVE)了。通常Modbus从机通讯命令在主程序块的每个执行周期都要初执行(始终保持通讯状态),因为可以用一个常开量作为命令的触发条件,如:SM0.0。从导航树“指令/库/Modbus Protocol”下面,将MBUS_SLAVE指令拖拽到主程序块中。调用过程如下图所示:
Done: 当MBUS_SLAVE指令响应对Modbus请求时,"Done"为开状态。没通讯请求时"Done"为关状态。
Error:指令执行结果。只有"Done"为开状态时,此状态有效。请参阅Modbus从机协议执行错误代码;输出为字节。
库存储区分配在完成前面两个指令调用后,还要为库指令使用的符号分配内存。当库指令被插入到主程序块中,在导航树“程序块”下会出现一个“库”节点。在“库”节点上点击鼠标右键,在弹出菜单中选择“库存储区”,进入“库存储区分配”对话框。
在地址框中输入分配内存的开始地址,或者通过点击“建议地址”按钮自动分配内存。注意,分配的内存不要与已使用的内存重叠。
紫金桥软件组态完成PLC编程和配制后,还要对紫金桥软件进行配制,这样才能获取、处理、查测、存储和显示相应的数据。组态过程分为两个步骤:(1)设备组态,即建立一个与PLC相对应的逻辑设备;(2)点组态,即建立过程数据库点的过程参量与PLC中变量的对应关系,从而利用点的自身功能进行处理、检测和存储。当然要将过程数据在计算机上展现给用户,还要进行交互界面(窗口)组态。但这一过程对所有应用是相同这,这里就不介绍了。
设备组态设备组态就根据PLC使用的通讯协议及在网上的节点地址、端口属性等对通讯参数进行定义的过程。
进入紫金桥开发环境,将导航树切换到“数据库”,在导航树上选择“设备驱动/MODBUS/
MODBUS(ASCII&RTU串口通讯)”,单击鼠标右键,在单出菜单中选择“增加设备驱动”会弹出发下所示对话框:
在对话框中输入设备名称、设备地址(与PLC中MBUS_INIT初始化的Addr参数一致),选择串口号,并且设置(点击“设置”按钮)端口属性,使用它与PLC中MBUS_INIT命令设置的属性一致。点击“下一步”:
在Modbus设备定义对话框中将协议类型选择为“RTU”,存贮器类型选择“32位”(即长整和浮点型4字节的数据的传送格式为高位在前,低位在后)。单击“完成”按钮,则设备组态完成。
点组态及I/O连接完成了点组态还要进行点组态I/O连接,这样才能将PLC中的变量映射到紫金桥软件中。
进入紫金桥开发环境,将导航树切换到“数据库”,在导航树上双击“点组态”,进入点组窗口:
选择点类型,建点,设置常规参数是点组态的基本操作,对所有应用是相同的,这里就不详细说明了。下面重点介绍一下I/O连接及与变量对应关系。
这里以模拟I/O点的I/O连接为例。新建一个模拟I/O点后,输入点名,切换到“数据连接”属性页:
从该属性的设备列表框中选择在上一步骤中建立的设备(如:MOD),点击“增加连接项”按钮,进入“Modbus组点对话框”:
这里的“内存区”、“偏置”和“数据格式”是与PLC中部分内存类型和地址相对应的。对于在Modbus协议中不能对应的PLC内存类型,如果需要上传到过程数据库中,可以先它们先移动到V内存区,再通过V内存区读取。S7-200内存区与紫金桥I/O连接对应关系如下所示:
S7-200地址
紫金桥软件I/O连接
内存区
偏置
Q0.0
DO离散输出量
0
Q0.1
1
Q0.2
2
……(Qm.n)
……(m*8+n)
Q15.6
126
Q15.7
127
I0.0
DI离散输入量
0
I0.1
1
I0.2
2
……(Im.n)
……(m*8+n)
I15.6
126
I15.7
127
AIW0
AR输入寄存器
0
AIW2
1
AIW4
2
……(AIW2n)
……(n)
AIW62
31
Hold Start(如:VB0)
0
Hold Start+2(如:VB2)
1
Hold Start+4(如:VB4)
2
……
……
Hold Start+(HoldMax-1)*2
HoldMax-1
在完成存贮区和地址组态,还要注意一点就是数据类型一致性,只有类型一致才能从PLC上获得正确数据。我们可以从“数据格式”中选择格式。对于字寄存器我们也可以将它拆分为位,从而获得某个位的状态。
注:对新组态的数据库点只有重新启动后才会生效。
1 引言
可编程逻辑控制器(Programming Logic Controller, PLC)作为一台工业计算机,集数据的采集、处理、显示于一身,那么作为数据终端,数据的显示是完全必要的。PLC本身有许多指示灯,可以观测到PLC的CPU单元、输入/输出单元及网络通信单元的运行工作状态,但无法显示PLC内部数据。计算机通过与PLC通信以及触摸屏都可以实现PLC内部数据显示,但价格昂贵,对一些小型不需要经常改动的系统来说更是浪费。本文采用拨码开关和数码管来显示PLC内部数据,操作简单、成本低廉,对实验教学和工程人员有参考价值。
(1)应用行业:机加工、过程控制等。
(2)使用产品:CJ1M(CPU22), CS1W-ID211,CS1W-OD261
(3)应用的主要工艺点及要解决的主要问题:内部数据的动态显示
(4)应用方案简介:用高频率晶体管输出单元,结合高速定时器指令TIMH实现内部数据的动态显示。
2 动态数据显示
2.1 硬件系统设计
LED数码管有7段显示灯,可以用来显示0~9间的10个数字。CJ1M系列PLC内部通道数据一般都是四位,如果用借用每个输出点来控制一个显示灯,那么一个数码管就需要7个输出点,这显然要占用大量的输出点,是不经济的。这里选用含有内置译码电路的数码管如CD4511,可以把8421码自动译成7段码。8421码或BCD码用4个接口加选通信号,就可以显示一个数据位。将四个8421输入线组合与某个输出通道的低四位相连,每个选通信号的输入信号与通道中剩下的四位相对应连接,这样一个输出通道就能显示PLC四位(一个字)内部数据。具体接线图如图1所示。
图1 PLC硬件接线图
注意,这里的PLC输出模块应选用晶体管或者晶闸管输出单元,而不宜采用继电器输出单元。因为继电器输出单元为有触点开关,响应慢、速度低,不适用于高频率的通断,也不适用于动态数据显示[1]。故图1中采用OMRON公司CJ1W-OD261(64点)晶体管作为输出单元,其在本PLC机架上的IO地址分配为6.00~9.15,这里用0006通道作为内部数据的显示通道。6.00~6.03为CD4511的数据输入端A、B、C、D,其中A为低位,D为高位, 为高电平时锁存数据,四位数据的 端由PLC的6.04~6.07分别控制,4个数码管共占用8个输出点。
2.2 选通信号的生成
由于4个数码管 的线皆由一个I/O口控制,在每一瞬间,4位LED会显示相同的字符。要想每位显示不同的字符,就必须采用扫描方式轮流点亮各位LED,即在每一瞬间只使某一位显示字符。使每位分时显示该位应显示字符,根据人眼视觉特性,当LED所加信号频率大于50Hz时,人眼不能感觉其变化,每位显示的间隔不能超过20ms,也就是说要在20ms之内分时的点亮所有LED,LED越多所分的时间越短,亮度就会不足;如果增加点亮时间,又会使扫描频率下降,有闪烁感容易造成人眼的彼劳,故常采用动态扫描方式[2]。这种扫描方式仅适用于LED不超过10个时的场合,本例中只有4只LED数码管,故可以选用此方法。
CJ1M系列PLC有丰富的定时指令,其定时器类型有1ms、10ms和100ms,这里选用TIMH指令[3],定时器的设定值为#1,这样选通信号的周期为10ms。
2.3 同步化处理
PLC采用循环周期扫描工作方式,指令的执行由上至下,有左至右,前面的结果将影响后面;前一个周期的结果影响下一周期。PLC逻辑设计同步化就是设法实现:用脉冲信号控制输出及内部状态的转换,有脉冲作用的周期,执行指令才有效果;在脉冲信号起作用的这周期中,前面指令的执行结果,不改变后面指令的执行条件[4]。同步化处理的方法很多,在图2中是通过合理安排指令的先后顺序来实现同步的。
图2中,系统上电,高速定时器开始定时,10ms后,其常闭触点断开,即T0输出一个脉冲,宽度为一个扫描周期。个脉冲到了, 6.04置位,成为前一行的指令执行条件,但这时它的指令已经执行完毕,故在此脉冲作用期间,也不会有什么变化。依此类推,第四个脉冲之后,6.07置位,6.06复位,成为工作寄存器W0.00输出的条件,第五个脉冲到来,6.07复位,梯形图又回到初始状态,如此反复,分时实现四位数据的 端6.04~6.07轮流接通10ms。
图2 选通信号的生成
2.4 数据显示
采用MOVD指令,将要显示的内部数据如DM区、W区、T/C区等中的一个字通过通道6显示出来。如图3所示,本例中,依不同的选通信号,将D0中的数据通过选择不同的位进行显示。
图3 数据显示输出
3 功能扩展
3.1 显示双字
在图1中,PLC输入端0.01接拨码开关SA,其作用根据其所在位置不同结合跳转指令(JMP/JME)来确定数据显示是哪个通道。如图4中,当SA为ON时,显示D0中的数据;当SA为OFF时,显示D1中的数据。
图4 双字数据显示输出
3.2 硬件扩展
如果对4个选通输出点6.00~6.03采用一片4线-16线译码器(如SG74HC154)进行译码,可以扩展成16个循环的选通信号,就能显示4个通道的数据。如果结合开关SA,按图4中的方式,就可以显示8个通道的数据。