本文讨论了可编程控制器驱动程序的设计和开发方法。详细介绍了PLC底层驱动功能的设计与实现;并讨论了提高渠道利用率的几个关键问题。实验表明,它可以降低开发成本,大大提高计算机监控系统与可编程控制器之间数据通信的效率和通道利用率。
1.介绍
随着计算机科学技术、工业控制等新技术的快速发展,计算机监控系统与现场PLC设备之间的数据交换得到了广泛应用。这种数据交换往往具有以下特点:数据量大、采集点分散、带宽窄。由于不同厂家提供的PLC现场设备的通信机制不尽相同,越来越多的设备通信驱动程序需要通过计算机监控系统软件来开发。这种复杂设备驱动程序的开发具有以下特点:
首先,上层监控系统与PLC设备之间的数据交换被广泛使用。
其次,这种数据通信过程缺乏通用的框架设计,开发周期长、难度大,难以通用。
此外,在带宽有限的大量数据传输中,信道利用率低,系统效率差且不稳定,迫切需要大幅提高信道利用率的算法。而且,在现有的数据交换标准中,对于有限带宽条件下的信道利用没有成熟的设计。
如上所述,开发PLC设备通用数据通信接口具有广阔的应用前景和实现价值。本文主要分析了上位监控系统与PLC设备之间的数据通信,介绍了PLC设备驱动程序开发的方法,并提供了一个PLC通信的实例。
2.可编程控制器驱动程序的使用
本文以采用串行通信的可编程控制器为例进行分析和说明。监控系统为北京昆仑同泰公司生产的MCGS监控软件。开发工具是VC++6.0。
在MCGS,PLC已经将串行通信的波特率设置等功能集成到串行父设备中,因此在MCGS监控软件设备管理窗口中,PLC设备驱动程序作为子设备提供。它可以使用父设备的通信功能,即它可以与其他设备共享父设备的通信功能。由于使用串口的PLC设备很多,这里我们以使用串口通信的PLC为例来说明PLC通用驱动程序架构的开发。如果使用用户定义的编程电缆或以太网连接,该可编程逻辑控制器驱动框架也适用。
PLC与上位机之间采用串行通信,通信方式有RS232、RS485和RS422三种。如果设备通过RS232通信,在一个串行端口下只能连接一个设备。如果使用RS485或RS422进行通信,可以使用多个设备组成一个网络。在这个网络中,为了识别不同的设备,每个设备都添加了一个符号,通常称为设备地址。该总线上的设备分为主设备和从设备。在工作中,从设备一直在监控和分析通信线路上的数据,当它收到自己的请求时,会发送相应的响应帧。当主设备工作时,它会向从设备发送请求帧,请求一些数据或根据需要发送命令。发送请求帧后,主设备需要等待从设备的应答,这个等待过程有超时限制。如果你过了一定时间还没有收到回复,它会认为这次沟通失败了,然后按照一定的逻辑判断是重发请求还是放弃。
用于通信的通信协议分为ASCII通信和十六进制通信。PLC的通信协议大多采用十六进制通信。而且在串行通信中,为了保证通信的正确性和完整性,通常会在通信帧的末尾增加一个校验,包括和校验、异或校验、CRC校验等。
在通信过程中,上位机的MCGS监控软件调用PLC驱动程序,根据特定的协议向PLC设备发送寄存器的读写命令,并接收响应数据。
3.主要过程
3.1收集过程
为了便于解释,这里是一个采集周期只需要一次采集的最简单情况。在5.1的集采模式中,描述了一个周期多次集采内需的算法。
采集过程描述如下:首先初始化,然后创建通道。进入数据收集周期。在每个数据收集周期中,首先形成读命令,然后验证发送的数据帧。读写串行端口完成一次通信。如果通信成功,接收的数据被解码并在验证后输出到信道,并返回成功标记。如果通信不成功或验证失败,将返回失败标记。
3.2分析功能流程
上图是解析数据帧的流程图。不同的设备有不同的协议内容。要使用已定义的模板解析函数,开发人员只需根据设备协议将框架划分为有效的数据部分,并将其添加到联合体FrameField中。联合体可以最低限度地将协议数据分成位进行操作。
如上图所示,第一个字节为帧头,最后一个字节为帧尾,第二个字节为状态指示符,第三至第六个字节为模拟量,第七个字节为单位,第八个字节按位分为四路输入和四路输出。
4.接口设计
一般来说,一个厂家同系列PLC产品的通信协议一般都是一样的。唯一的区别是一些寄存器的大小不同。这样,我们认为这一系列设备可以使用相同的驱动程序。为了提高通用性,同时,一般情况下,用户不需要使用所有寄存器,所以设计了这个设备组件的通道,以便用户在配置时自行定义。的所有通道及其相应的参数(即寄存器地址)由用户自己定义。驱动程序根据用户定义的信息进行通信。而且PLC中可能有一些参数是用户不常用的。如果形成渠道,每个采集周期都需要沟通,效率相对较低。考虑到这种情况,我们提供了一些外部接口供监控系统调用,在这些接口中可以发送命令并支持所有寄存器通道。
通过分析不同厂家的PLC设备,我们还可以发现,我们可以抽象出通信过程和协议模式,提取它们的共同点和变化点,并在数据交换过程中封装和隐藏细节,从而达到通用的目的。通过封装格式、标准化代码和统一接口,提高了驱动开发的效率,降低了驱动开发的难度。提高代码的可重用性,增强驱动的稳定性,减少设计中容易出现的错误。让开发人员专注于设备的熟悉度和协议的分析,而不是过分纠结于编程实现的细节。
封装的数据和操作包括:
隐藏数据采集中的底层通信过程(一些设备需要发送和接收多次才能完成数据采集
程,如西门子s 7200);封装针对分散采集点的动态采集算法;封装常见的命令操作;提供与监控系统交互的统一接口;PLC驱动封装底层通信过程,只暴露接口方法,开发人员统一调用此方法,保证软件对客户的透明性,使开发人员与底层开发分离,降低开发难度。
对于驱动程序开发人员来说,需要注意的接口只有以下几个部分:
定义设备本身的属性;如地址、实时采集的时间要求等。定义设备的读写操作属性;比如频道的数量;总体设计只提供了与设备协议相关的打包和解包的接口,实现过程将由开发者完成。
5.关键问题分析
为了提高信道利用率和系统效率,在PLC通信框架的设计中考虑了几个关键问题。
5.1三种采集模式
在分析现有数据交换后,将用户的一般需求归纳为三种采集模式,即集约采集、按需采集和定时采集。
密集采集模式:这种情况下,用户希望充分利用物理带宽,保证最快的采集速度和更新。在这种模式下,理想状态是设备始终处于采集状态。目前,收集所有活动通道中周期时间最短的通道。保证所有通道都能获得采集机会,但相比其他模式,这种模式下的CPU利用率会更高。
按需采集模式:在通信链路需要控制的情况下,比如用户使用GPRS按照流量进行采集和收费,无法进行大量的通信。此时将采集模式设置为按需采集,需要时再调用接口函数开始单次采集。否则,不执行数据收集。
定时采集模式:该模式是一种折衷CPU占用率和采集速度的采集帧,保证在用户设置的通道刷新周期内可以进行通道的采集,然后进行下一次采集,直到下一个通道刷新周期到来。
在模块设计中,采集方式是设备类的一个属性,开发者根据具体情况选择合适的采集方式。不同采集模式的采集算法实现如下:
密集采集执行流程:设置采集周期,如1000毫秒。每当新的采集周期开始时,采集通道的优先级被重新计算。遍历所有渠道,找出目前优先级最高的渠道,收集。阻塞通道(这些块包含最需要刷新的通道)。进入通信周期(有些设备一次采集至少需要两次通信,因此需要通信周期)。发送数据请求并等待响应;根据返回的信息分析结果并做出相应的处理;判断是否需要下一次收购,如果不需要跳出周期;更新频道和采集标志;继续发送线程消息以开始下一次收集,直到通信周期结束;直到所有要收集的通道都被遍历。
按需采集执行流程:循环采集各通道,保存采集成功的数值,并进行后续处理。定时采集执行过程由定时器触发,采集过程与密集采集相同,但不满足采集要求的通道不进行采集。
5.2具有分散采集点的动态采集算法
在现有的数据交换过程中,用户关心的数据往往只占总信息的一小部分,这些采集点分散在海量的数据中。如果不加判断地依次读取数据,有效信息与采集信息的比例很低,实时性差。如果只收集有效信息,分配的收集粒度过小,会导致系统效率低,信道利用率差。为了解决这个问题,采用了以下解决方案:
(1)只收集用户关心的数据。如果有多个频道,只传输当前用户只关心的频道的数据,其他频道不关心。确保尽可能少的通道,并为每个需要收集的通道提供更快的收集周期。从而减少了流量。
(2)对待采集的数据赋予不同的优先级,对一些实时性要求较高的数据给予优先级。优先级可以根据用户设置的数据刷新时间进行更改。
(3)考虑信道利用率和有效信息获取的实时性,实现动态分块算法,以合理的粒度对收集的信息进行分块和传输;分块算法的实现简述如下:采集时,判断当前采集的寄存器类的活动通道如果能形成数据请求包,则进行处理,增加一次采集的通道数。根据开发者定义的通道优先级,在优先级最高的通道地址附近找出地址连续(或接近)的通道,这些通道组成一个通道块。重复相同的过程,并继续阻塞剩余的通道,直到形成的块数大于指定值(如20)或分配了该寄存器中的所有通道。(初学者可以结合PLC视频教程来新学习。)
(4)根据通信协议的特点,在打包数据请求时,尽量保证包含更多的请求,从而减少请求总数。
6.结论
根据本文中PLC的通用数据接口,开发人员开发了多家厂商的PLC驱动程序,并在不同的项目中得到应用。基于该PLC通用数据接口开发PLC驱动程序,缩短了开发时间和难度。该系统投入运行后,通信稳定,采集速度快,通用性好,可靠性高。确保项目顺利实施。作者的创新点:监控系统与PLC通信接口的通用化设计,可以大大缩短开发时间和难度,提高通信稳定性和实时性,具有较高的实用价值和经济价值。
审核编辑:符乾江
评论
查看更多