西门子模块6ES331-7NF00-0AB0
西门子模块6ES331-7NF00-0AB0
(1)分组输出 如图7所示,当两组负载不会同时工作时,可通过外部转换开关或受PLC控制的电器触点进行切换,使PLC的一个输出点可以控制两个不同时工作的负载。
图7 分组输出
(2)矩阵输出 如图8所示为4×4矩阵输出电路,用8个输出点可控制16个负载。要使某个负载接通工作,只要它所在的行与列对应的输出继电器接通即可。例如,当Y010与Y004同时接通时,KM1得电吸合。应当注意的是:当只有某一行对应的输出继电器接通,各列对应的输出继电器才可以任意接通;或者当只有某一列对应的输出继电器接通,各行对应的输出继电器才可以任意接通。否则将会错误接通负载。因此,采用矩阵输出时,必须将同一时间段接通的负载安排在同一行或同一列中,否则将无法控制。
图8 矩阵输出
(3)并联输出 通断状态相同的负载,可以并联后共用PLC的一个输出点(要考虑PLC输出点的负载驱动能力)。例如PLC控制的交通信灯,
对应方向(东与西对应、南与北对应)的灯通断规律相同,将对应的灯并联后可以节省一半的输出点。
(4)负载多功能化 一个负载实现多种用途。例如,在传统的继电控制系统中,一个指示灯只指示一种状态。在PLC控制系统中,利用PLC的软件很容易实现利用一个输出点控制指示灯的常亮和闪亮,这样就可以利用一个指示灯表示两种不同的信息,从而节省PLC的输出点。
(5)某些输出信号不进入PLC 系统中某些相对独立、比较简单的部分可以考虑不用PLC来控制,直接采用继电器控制即可。
(6)利用输出点扩展输出点 与利用输出点扩展输入点相似,也可以用输出点分时控制一组输出点的输出内容。例如:在输出端口上接有多位LED7段码显示器时,如果采用直接连接,所需的输出点是很多的。这时可使用图9的电路利用输出点的分时接通逐个点亮多位LED7段码显示器。
在图9所示的电路中,CD4513是具有锁存、译码功能的专用共阴极7图9 输出口扩展输出口
段码显示器驱动电路,两只CD4513的数据输入端A~D共用可编程序控制
器的4个输入端,其中A为位,D为高位。LE端是锁存使能输入端,在LE信号的上升沿将数据输入端的BCD数据锁存在片内的寄存器中,并将该数译码后显示出来,LE为低电平时,显示器的数不受数据输入信号的影响。显然,N位显示器所占用的输出点P=4+N。图9中Y004及YOO5分别接通时,输出的数据分别送到上下两片CD4513中
西门子PLC卡件6ES7314-6BH04-0AB0
一般认为输入点数是按系统输入信号的数量来确定的。但在实际应用中,通过以下措施可达到节省PLC输入点数的目的,下面以FX1N系列PLC来介绍。
(1)分组输入 如图1所示,系统有“手动"和“自动"两种工作方式。用X000来识别使用“自动"还是“手动"操作信号,“手动"时的输入信号为SB0~SB3,“自动"时的输入信号为S0~S3,如果按正常的设计思路,那么需要X000~X007一共8个输入点,若按图1的方法来设计,则只需X001~X004一共4个输入点。图中的二极管用来切断寄生电路。如果图中没有二极管,系统处于自动状态,SB0、SB1、S0闭合S1断开,这时电流从COM端子流出,经SB0、SB1、S0形成寄生回路流入X000端子,使输入位X002错误地变为ON。各开关串联了二极管后,切断了寄生回路,避免了错误的产生。但使用该方法应考虑输入信号强弱。
图1 分组输入
(2)矩阵输入 如图2所示为4×4矩阵输入电路,它使用PLC的四个输入点(X000~X003)和四个输出点(Y000~Y003)来实现16个输入点的功能,特别适合PLC输出点多而输入点不够的场合。当Y000导通时,X000~X003接受的是Q1~Q4送来的输入信号;当Y001导通时,X000~X003接受的是Q5~Q8送来的输入信号;当Y002导通时,X000~X003接受的是Q9~Q12送来的输入信号;当Y003 导通时,X000~X003接受的是Q13~Q16送来的输入信号。将Y000的常开点与X000~X003串联即为输入信号Q1~Q4;将Y1的常开点与X000~X003串联即为输入信号Q5~Q8;将Y002的常开点与X000~X003串联即为输入信号Q9~Q12;将Y003的常开点与X000~X003串联即为输入信号Q13~Q16。
图2 矩阵输入
使用时应注意的是除按图2进行接线外,还必须有对应的软件来配合,以实现Y000~Y003轮流导通;同时还要保证输入信号的宽度应大于Y000~Y003轮流导通一遍的时间,否则可能丢失输入信号。该方法的缺点是使输入信号的采样频率降低为原来的三分之一,而且输出点Y000~Y003不能再使用。
(3)组合输入 对于不会同时接通的输入信号,可采用组合编码的方式输入。如图3所示,三个输入信号SB0~SB2只占用两个输入点,M0~M2图3 组合输入
分别代表SB0~SB2。
(4)输入设备多功能化 在传统的继电控制系统中,一个主令(按钮、开关等)只产生一种功能的信号。在PLC控制系统中,一个输入设备在不同的条件下可产生不同的信号,如一个按钮既可用来产生启动信号,又可用来产生停止信号。如图4所示,只用一个按钮通过X000去控制Y000的“通"与“断"。即次接通X000时Y000“通"再次接通X000时Y000“断"。
图4 用一个按钮控制的启动、保持、停止电路
(5)输入触点的合并 将某些功能相同的开关量输入设备合并输入(常闭触点串联输入、常开触点并联输入)。一些保护电路和报警电路常常采用此法。
如果外部某些输入信号总是以某种“与或非"组合的整体形式出现在梯形图中,可以将它们对应的某些触点在可编程序控制器外部串并联后作为一个整体输入可编程序控制器,只占可编程序控制器的一个输入点。
例如某负载可在多处启动和停止,可以将多个启动信号并联,将多个停止信号串联,分别送给可编程序控制器的两个输入点,如图5所示。与每一个启动信号和停止信号占用一个输入点的方法相比,不仅节约了输入点,还简化了梯形图电路。
图5 输入触点的合并
(6)某些输入信号不进入PLC 系统中有些信号功能简单、涉及面窄,如图6中的手动按钮、过载保护的热继电器触点等,有时就没有必要作为PLC的输入,将它们设计在PLC外围的硬件电路中同样可以满足控制要求。如果外部硬件电路过于复杂,则应考虑仍将有关信号送入可编程序控制器,
图6 输入信号设在PLC外部用梯形图来实现连锁。
(7)利用RUN口 大多PLC有RUN口,而且只有该口接通(RUN到COM之间用导线短接)时,PLC才能运行,因此,可将某些输入信号送入RUN口。在进行电梯控制系统的设计时,曾将电梯牵引电动机进行过载保护的热继电器常闭触点、安全窗开关的常开触点、安全钳开关的常开触点、上下限位开关的常闭触点等串入到RUN口到COM之间的连线上。当出现牵引电动机过载、安全窗被打开、安全钳动作及冲顶和沉底等故障情况时,RUN口被切断,PLC停止运行,既保证了电梯和乘客的安全,又可以督促维修人员进行维修。这样做有以下两点好处,一是牵引电动机过载、安全窗被打开等故障信号不送到PLC内,也就不占用PLC的输入口;二是不通过软件实现保护,可以简化控制程序
本文讨论了设计和开发plc 驱动程序的方法;详细介绍PLC 底层驱动函数的设计和实现;并探讨了**信道利用率的几个关键问题。实验证明,能够降低开发成本并大大**计算机监控系统与PLC 之间的数据通信的效率和信道利用率。
1、引言
随着计算机科学技术、工业控制等方面的新技术的迅速发展,使用计算机监控系统与现场PLC 设备进行数据交换得到了广泛的应用。这类数据交换往往具有以下的特点,数据量大,采集点分散,带宽较窄。由于不同厂家所提供的PLC 现场设备的通讯机制并不相同,计算机监控系统软件需要开发的设备通信驱动程序就越来越多。这种复杂的设备驱动程序的开发具有以下的特点:
首先,上位监控系统与PLC 设备间的数据交换,应用较普遍。
其次,这种数据通讯过程,缺乏有通用性的框架设计,开发周期长,难度大,难以通用。
再者,在有限带宽限制条件下的大数据量传输,普遍存在着信道利用率低,系统效率差,不稳定的情况,迫切需要大幅度**信道利用率的算法。而且在已有的数据交换标准中,对于有限带宽条件下的信道利用率也没有成熟的设计。
如上所述,开发PLC 设备的通用性数据通信接口具有广泛的应用前景和实现价值。本文主要针对上位监控系统与PLC 设备之间的数据通信进行分析,介绍了PLC 设备的驱动开发的方法,并提供PLC 通信的实例。
2、 PLC 驱动的使用
本文中以使用串口通讯的PLC 为例进行分析和说明,监控系统为北京昆仑通态公司生产的MCGS 监控软件。开发工具为VC++6.0。
MCGS 中PLC 已经将串口通讯的波特率设置等功能集成至串口父设备中,因此PLC 设备驱动是作为MCGS 监控软件设备管理窗口中的子设备提供的。它可以使用父设备的通讯功能,即可以与其他设备共享父设备的通讯功能。由于使用串口的PLC 设备较多,在这里我们以使用串口通讯方式的PLC 为例进行说明PLC 通用驱动的构架的开发。如使用自定义编程电缆方式或使用以太网方式连接,此PLC 驱动构架同样适用。
使用串口通讯的PLC 与上位机的通讯方式中,有RS232、RS485、RS422 多种方式。如果设备是采用RS232 方式通讯,那么在一个串口下面只能挂接一个设备。如果采用RS485 或者RS422 的方式通讯,那么可以使用多个设备构成一个网络,在这个网络中,为了识别各个不同的设备,给每一个设备加上一个标志,一般来说把这个标志称作设备地址。这个总线上的设备分为主设备和从设备两类。在工作时,从设备一直在监听通讯线路上的数据,并对这些数据进行分析,当收到对自己的请求时,会发送一个相应的应答帧。主设备在工作时会根据需要向从设备发送请求帧,请求一些数据或者是发送一条命令,在发完请求帧后主设备需等待从设备的回答,这个等待的过程有一个超时时间限制。如果过了一定的时间还没有收到回答,它会认为本次通讯失败,然后按照一定的逻辑判断是应该重发请求还是放弃。
通讯使用的通讯协议,分为ASCII 通讯和16 进制通讯两类。PLC 的通讯协议中大多数都是使用16 进制通讯。而且在串口通讯中,为了保证通讯的正确性、完整性,通常在通讯帧的尾部加上校验,常见的有和校验,异或校验,CRC 校验等等。
在通讯过程中,上位机的MCGS 监控软件调用PLC 驱动,根据具体协议,向PLC 设备发送寄存器的读写命令,并接收应答数据。
3 、主要流程
3.1 采集流程
为便于说明,此处以一个采集周期内仅需单次采集的简情况为例。在5.1 中的密集采集模式中,描述了对一周期内需多次采集的算法。
采集过程描述如下:首**行初始化,随后创建通道。进入数据采集周期,在每个数据采集周期中,首先形成读命令,随后校验发送数据帧,读写串口完成一次通讯,如果通讯成功,那么校验后将接收到的数据解码输出到通道,返回成功标识,如果通讯不成功或校验失败,返回失败标识。
3.2 解析函数流程
上图为解析数据帧的流程图。不同的设备具有不同的协议内容,使用定义好的模版解析函数只需要开发人员按照设备协议将帧分割为有效的数据部分,添入联合体FrameField 即可。该联合体可将协议数据小分割为位来进行操作。
如上图所示,个字节为帧头,后一个字节为帧尾,第二个字节为状态标示,第三至第六个字节为模拟量,第七个字节为单位,第八个字节按位分为四路输入和四路输出。
4 、接口设计
通常来说,一个厂家的同系列的PLC 产品,通讯协议一般是一样的。区别只是在于其中一些寄存器的大小不同。这样我们就考虑可以让这一个系列的设备使用同一个驱动。为了**通用性,同时一般情况下,用户也不需要使用所有的寄存器,所以把这种设备构件的通道设计成用户可以在组态时自己进行定义。所有的通道及其所对应的参数(即是寄存器地址)都由用户自己进行定义。驱动程序根据用户定义的信息进行通讯。而且PLC 当中可能有一些参数用户并不常用,如果组成通道,每一个采集周期都要进行通讯,效率比较低下,考虑到这种情况,我们提供了一些外部接口供监控系统调用,在这些接口中可以发送命令,支持所有的寄存器通道。
而对不同厂家的PLC 设备进行分析,也可以发现,可以将通讯过程和协议方式进行抽象,提取它们的共同点和变化点,封装和隐藏数据交换过程中的细节,达到通用的目的。通过封装格式,规范代码,统一接口,**驱动开发效率,降低驱动开发的难度。**代码的重用性,增强驱动的稳定性,减少设计中容易出现的错误。使开发人员把主要的精力放在对设备的熟悉和对协议的分析上,而不是过多地纠缠于编程实现的细枝末节上。
封装的数据和操作包括:
隐藏一次数据采集中的底层通讯过程(某些设备完成一次采集需要一次以上的发收过
程,如西门子S7200);封装针对采集点分散的动态采集算法;封装常用的命令操作;对与监控系统间的交互提供统一的接口;PLC 驱动封装了底层的通讯过程,只将接口方法暴露在外面,开发人员以统一的方式去调用这个方法,从而保证软件对客户的透明性,使开发人员从低层的开发中脱离出来,降低开发的难度。
对驱动的开发人员来说,需要关注的接口仅有以下部分:
定义设备本身的属性;如地址、实时采集的时间要求等;定义设备的读写操作属性;如通道数量等;通用设计仅提供跟设备协议相关的组包和解包接口,实现过程将由开发人员完成。
5、 关键问题分析
为提供信道利用率,**系统效率,在PLC 的通信框架设计中考虑了几个关键问题。
5.1 三种采集模式
经过对现有的数据交换的分析,将用户的一般需求拟概括为三种采集模式,即密集采集,按需采集,定时采集。
密集采集模式:在这种情况下,用户希望能尽量利用物理带宽,保证快的采集速度和更新。在这种模式下,理想状态是设备始终处于采集状态。采集目前所有激活通道中离需要采集的周期时间小的通道。保证所有的通道都能获得采集机会,但是相对与其他模式,在该模式下CPU 占用率会比较高。
按需采集模式:在通讯链路需要受控的情况下,比如用户采用GPRS 进行采集,按**计费,所以不能进行大量的通讯。这时候通过设置采集模式为按需采集,然后在需要时再调用接口函数启动单次采集。否则不进行数据采集。
定时采集模式:该模式是在CPU 的占用率和采集速度之间进行折衷的采集框式,保证在用户设置的通道刷新周期的时间内进行通道的采集,之后直到下一次通道的刷新周期到达再进行下一次采集。
在模块设计中,采集模式作为设备类的一个属性,由开发人员根据具体情况,选择合适的采集模式。不同采集模式的采集算法实现如下:
密集采集执行流程:设置一个采集周期如1000ms。每当开始一个新采集周期时,重新计算采集通道的优先级别。遍历所有的通道,找出目前优先级高的通道,进行采集。对通道进行分块(块中包含需要刷新的通道)。进入通讯循环(某些设备进行一次采集至少需要两次通讯所以需要通讯循环)。发送数据请求并等待回应;根据返回的信息解析出结果,并作相应处理;判断是否需要下一次采集,如果不需要跳出循环;更新通道和采集标志;继续发送线程消息启动下一次采集直到一次通讯循环结束;直到遍历完所有需采集的通道。
按需采集执行流程:循环对每个通道进行采集,保存采集成功的值,并进行后续处理。定时采集执行流程由定时器触发,采集流程与密集采集一样,但在判断没有满足采集要求的通道不进行采集。
5.2 采集点分散的动态采集算法
在现有的数据交换过程中,用户关心的数据往往只占全部信息的很小一部分,而且这些采集点分散在海量的数据中,如果不加判断的依次读取数据,有效信息与采集信息的比例很低,实时性差;如果仅采集有效信息,分配的采集粒度过小,又会造成系统效率低下,信道利用率差。针对这一问题,采取以下的解决方法:
(1)只采集用户关心的数据。如当有多个通道时,只传送当前用户只关心的通道的数据,而不关心其它的通道。保证采集尽量少的通道,为每个需要采集的通道提供更快的采集周期。从而减少通讯量。
(2)对于待采集的数据分配不同的优先级,对实时性要求高的部分数据优先采集。可以根据用户设置的数据刷新时间来改变其优先级。
(3)实现一个动态分块算法,在一个合理的粒度上对采集的信息分块传输,兼顾信道利用率与有效信息获取的实时性;实现的分块算法简述如下:在采集时判断,如果当前采集的寄存器类的激活通道可以组成一个数据请求包,则进行处理,**一次采集的通道数。根据开发人员定义的通道优先级,找出优先级高的通道地址附近的地址连续(或紧密)的通道,这些通道形成一个通道块。重复同样的过程,将剩下的通道继续分块,直到形成的块数大于某一规定的数值比如20 或将本寄存器的所有通道分配完成。
(4)根据通讯协议的特点,在打包数据请求时尽量保证包含更多的请求,从而减少请求的总次数。
6 、结论
根据本文的PLC 通用性数据接口开发人员已开发出多个厂家的PLC 驱动,并在不同项目中得到应用。在此PLC 通用数据接口基础上开发PLC 驱动,缩短了开发时间和难度。投入运行的系统通信稳定,采集速度快,通用性好,可靠性高。保证了项目的顺利实施。本文作者创新点:具有通用性的监控系统与PLC 通信接口设计,能够大大缩短开发时间和难度,并**通信稳定性、实时性,具有很高的实用价值和经济价值。