6ES7241-1AA22-0XA0原装代理
可编程控制器(PLC,Programmable LogicController)经过几十年的发展,现在已经成为了最重要、最可靠、应用场合最广泛的工业控制微型计算机。然而,人们在使用过程中也逐渐发现了传统PLC的缺点:兼容性差,由于生产厂家众多,各种机型互不兼容,没有统一的标准,难以构造统一的硬件结构;封闭、扩展能力差:产品能力的功能实现依赖硬件;对使用者的要求高:现行的PLC 产品,其编程方式要求使用者对PLC的硬件结构、电器原理、编程指令都要有相当的了解;可维护性差:PLC 出现故障时需要专业人员用专业工具进行检测和维修;成本较高,传统PLC 被几家厂商所,性价比增长缓慢。这些问题都制约着传统PLC 的发展。近年来,工控领域的不少研究人员一直在寻求着解决这些问题的途径。随着计算机软硬件技术的发展及PLC 国际标准IEC61131-3的制定,在计算机上以软件的方式来实现PLC 成为了发展的热点,这也就是软PLC(Soft PLC)。
软PLC介绍
软PLC,也叫软逻辑,是一种基于PC 机开放结构的控制装置。软PLC 综合了计算机和PLC 的开关量控制、模拟量控制、数学运算、数值处理、通信网络等功能,通过一个多任务的控制内核,提供了强大的指令集、快速而准确的扫描周期、可靠的操作和可连接的各种I/O 系统及网络的开放结构。软PLC 提供了硬PLC 的各种功能,同时具备了PC 的各种优点。
基于PC 平台的软PLC 由于无需专门的编程器,因而可以充分利用PC 机的软硬件资源,直接采用梯形图或指令语言编程,并具有良好的人机界面,在数控系统中正逐渐取代硬件PLC,PLC 编程系统也正在逐步转向占据软件市场的PC 机。软PLC 技术发展的一个重要条件就IEC61131-3 标准的制定。
20 世纪90 年代,IEC(国际电工委员会)颁布了IEC61131 国际标准,它的内容涵盖了PLC 整个生命周期的各个部分。IEC61131-3 是PLC 的语言标准,它定义了5 种PLC 编程语言的规范,其中结构化文本(ST)和指令表(IL)为文本语言,而顺序功能图(SFC)、梯形图(LD)、功能模块(FBD)为图形语言。同时,标准还允许在同一个程序中混合使用多种语言。IEC61131-3 标准由IEC 的SC65BW7工作组制定,它包括来自不同的PLC 制造商、软件公司和用户代表,实现了统一的编程标准。相对传统PLC,软PLC 解决了兼容性差、通用性差等问题,具有了多方面的优势:
(1) 硬件体系结构不再是封闭的,用户可以自己选择合适的硬件来组成满足要求的PLC。
(2) PC 机厂家的竞争激烈使得基于PC 机的软PLC 性价比得以提高。
(3) 软PLC 不仅可以实现连接到私有的PLC 网络中,而且可以通过PC 连接到计算机网络上。
(4) 由于软PLC 是基于IEC61131-3 标准的,因此在掌握标准后就可以容易的进行开发了。
由于软PLC 具有兼容性、通用性、性价比高、易于与网络连接、编程方便等优点。因而,目前世界各国都在进行软PLC 的研究。国际上,已经有了一些比较成熟和影响比较大的产品:如德国KW -sofeware 公司的MULTIPROG wt32、倍福TwinCAT控制软件TwinCAT PLC、法国CJ International公司的ISaGRAF 软件包、PCSoft International 公司的WinPLC、美国Wizdom Control Inbbtion 公司的Paradym-31 等等。而国内有关部门和工控方面的公司也正在着手研究开发具有自主版权的中文软PLC产品。
软PLC设计平台
硬件工作平台
软PLC 的期待硬件工作平台为工控机等PC 工业微机平台和嵌入式PC 平台。本设计因需要应用于嵌入式的数控系统中,所以采用了嵌入式PC 平台。嵌入式PC 是将PC 机的主要硬件集中在一张大小的主板上,将操作系统和应用软件存储在Flash芯片中。嵌入式PC 与标准PC 全兼容,采用与标准PC 相同的硬件结构和软件结构。因而,嵌入式PC在理论上能完成与普通PC 系统的工作。因而,我们可以在普通PC上做好设计和开发,再将软件移植到嵌入式PC 上。
嵌入式PC 包括单板计算机(SBC)、PC/104 计算机和饼干机,本设计采用的是嵌入式PC104 计算机。嵌入式PC/104 组件尺寸小,标准化,模块化程度高,采用层叠式结构,通过在CPU 板的基础上堆叠扩展板构成一个完整的计算机系统。PC104 的扩展板齐全,包括了网卡、数字I/O 卡、A/D 卡等。在PC104 上构造的系统即嵌入式软PLC 可扩展性好,标准化和模块化程度高。
现今PC104 的硬件水平可以达到P2 或者P3 一级,CPU 速度足够快,内存可到128M,程序存储空间可以选用CF 卡作为硬存储空间,可以达到128M,且可通过PC104 接口扩展其硬件I/O 能力,可增加软PLC 的I/O 口,丰富的硬件资源完全可以满足运行软PLC 的需要。这也使得设计时完全可以在普通PC 上,在LINUX 内核下对软PLC 的各个模块进行调试,调试成功再移植到PC104 组件上运行。
软件平台
目前,大多数软PLC 分别以bbbbbbs, DOS 和Linux 系统为操作平台。早期的基于PC 的软PLC 采用的较多的是DOS 系统,这类软件由于运行DOS 环境下,可以轻松实现其实时控制的要求,但由于DOS 环境是单任务处理方式,使得PC 的潜力得不到充分发挥,系统的功能和灵活性也受到限制。而bbbbbbs 具有操作界面良好、程序开发相对容易、多任务等优点,但bbbbbbs 操作系统并不是一个理想的实时操作系统,且bbbbbbs 操作系统是收费的,这将大大增加开发应用的成本。因而,本设计配合数控系统的需要选用的是Linux 系统为操作平台,基于Linux 内核模块的Rtlinux 是一个免费的、开放源代码的实时操作系统。
软PLC模块设计
本设计的软PLC 基于嵌入式PC104 计算机,建立在Linux 操作系统之上,软件的设计采用了模块化设计。每个模块都专职一项功能,每个模块都是一个进程。软PLC 全局变量是所有模块的公共数据,由配置文件设定。各个模块通过全局变量进行通信,各个模块的私有数据不包含在配置文件内。全局变量在每个模块都有副本,各个模块通过副本的数据对本模块进行运算,当循环一次运算后,就更新到全局变量,这样就实现了各个模块之间的通信。每个模块对全局变量的读写权限不一样的,只有对全局变量具有写权限的模块才可以更新全局变量里的数据。每个模块作为一个进程,进程之间的通信采用的是共享内存进行通信。
(1) 主程序(main program),启动软PLC,将首先运行主程序,主程序将读取配置文件上的内容,并运行配置文件上所设定的模块。
(2) 配置文件(configurefile),在软PLC 中具有核心的地位,它由几部分组成:
①软PLC 配置,在这部分设置了内核和各个模块的相关参数,
主要包括:模块列表,列出了要运行的模块;变量列表,列出了软PLC 中的全局变量,并定义了具有对应全局变量有写权限的模块。
② 公共配置,这部分设置了各个模块之间的共同属性。
③ 同步配置,这部分是要配制各个模块之间的性。为了保证数据的传输,必须让模块之间。
④ 实时性配置,软PLC 可以运行在3 种模式:正常模式、软实时模式和硬实时模式,设计时可以根据具体情况选择其中的一种模式。
对于每个具体的设计来说,需要对配置文件中的几个部分进行配置。
(3) 人机界面模块(HMI),用户和软PLC 之间的互动模块。通过友好的人机界面,用户可以控制软PLC 的调用和开关,同时可以查看软PLC 各个状态点的状态。在Linux 下,可以使用GTK 或者TCL/TK 进行设计。本设计由于整个数控系统的需要,采用了TCL/TK 进行设计。因为软PLC 的其他部分是用c语言进行设计,因而在用tcl/tk设计的人机界面模块和软PLC 之间,需要设计一个TCL/TK 的扩展模块作为两种语言之间的接口,这样在界面上就可以用TCL 语言调用C 语言编写的软PLC 函数。现阶段本设计主要完成了常用的PLC 图形语言梯形图和两种文本语言IL 语言和ST 语言的设计,因而人机界面可以分为两种,梯形图的编辑运行界面和文本编程的监控界面。
① 梯形图界面,在梯形图界面上,用户可自由拖动如开关、计时器等各种器件进行自主编程,从而实现在线编程。在界面上右侧是状态栏,可以对各种状态点的控制和状态显示,如将状态点B1 状态置1,则需单击B1 前的小方框。界面的上方是菜单栏。用户可通过菜单的选择进行编辑、保存、打开等功能,编辑完毕,按下Run 键,TCL/TK 的底层程序将会检测状态点状态,并根据元件种类进行逻辑运算,这些直接使用TCL/TK 编程就可以实现。而Exit 键则是退出软PLC,当按下该键时,将会设置全局变量Quit = 1 并传递给关闭模块Plcshutdown。关闭模块将关闭所有在运行的软PLC模块,并共享内存上的信号量。
② 文本编程监控界面。文本语言相对不够图形语言直观,设计监控界面,可以从监控界面上调用所需要的文本程序,同时对各个状态点的状态进行显示和控制。
(4) 文本编辑模块,用户PLC文本程序的编辑模块,使用文本编辑器即可实现。用户使用符合61131-3 标准的编程语言编写控制应用程序。编辑好的模块将会被软PLC 的编译器所编译,生成可执行代码。
(5) 逻辑模块,软PLC 的核心模块,它包括IEC61131-3编译器和数据处理模块。IEC61131-3编译器将编译用户编辑好的文本应用程序,首先将PLC 的代码编译成C 语言,然后再调用GCC 将程序和软PLC的链接库编译成目标文件,同时显示编译结果的正确性,将编译的错误信息及警告信息反馈给用户。
文本编辑模块与编译模块在软PLC 运行时,不会作为调用模块。软PLC只调用最后生成的可执行模块。数据处理模块执行对各种浮点型数据的操作,功能包括PID控制、按一定的比例缩放数据大小等。
(6) 通信模块(Communication module),主要负责软件的网络通信协议等的实现,借助与操作系统的结合构建网络服务器,实现强大的网络服务功能,实现Modbus 等总线协议的总线控制功能。
(7) I/O 模块,软PLC与物理IO连接的模块。通过IO 模块,软PLC 的状态点与硬件的IO 点一一对应,软PLC 可以通过IO 模块直接读写PC104 上IO扩展板的IO 点,实现对I O 点的读取和控制。
( 8 ) 关闭模块(Plcshutdown),由于本设计采用了多模块化设计和共享内存通信机制。因而软PLC退出,需要关闭所有正在运行的模块和共享内存上的信号量。关闭模块提供了Quit的全局变量, 当Quit=1,将运行关闭模块中的程序关闭所有的软PLC 模块和共享内存的信号量。
以上是根据需要设计的一些模块,根据用户需要还可以增加一些模块,如记录模块,数据库连接模块等,这些模块将会记录软PLC 的工作记录和保存软PLC 的数据记录。这些有待进一步的开发和设计。设计好各个模块,软PLC 的工作流程可如图3 所示。
本设计是在Linux 下进行设计,除HMI 模块是使用TCL/TK 设计外,其他均是使用C 语言进行编写,在Linux 下使用GCC 进行编译。由于篇幅所限,此处不展示代码。
实例
下面以一个简单的对3并口通道循环控制为例,说明软PLC 的工作流程。
(1)梯形图编程。从软PLC 主界面进入后,启动梯形图编程,调用梯形图编程的主程序。梯形图编程共需要调用梯形图界面模块、关闭模块、IO 模块,这些均在配置文件中设置好,不需用户进行设置。配置文件主要部分定义如下:
需运行的模块: 主要状态点定义:Ladder为拥有写的权利模块,主程序启动后,将读取对应的配置文件,运行所需模块。
这是一个比较简单的程序,因而只需要使用3个计时器和几个复位、置位输出就可以实现功能。编辑好梯形图程序后,按下Run 键,程序即可运行,并实现对IO 板上对应端口的控制。
(2)文本IL 语言编程。开始与梯形图编程相同,从软PLC 主界面进入后,启动IL 语言编程,调用主程序。文本编程共需要调用监控界面模块、逻辑目标程序模块、关闭模块、IO 模块。逻辑目标模块为用户编辑好的IL 程序,并通过编译器生成的可执行逻辑程序,用户可在PC 机上编辑和编译好逻辑程序,再移植到PC104 上进行调用。
水下电弧有着广泛的用途,其中应用之一是水下制取“电弧气”。制造电弧气的一个关键要素就是保持电弧电压的稳定,使电弧能在水下稳定放电。大电流(1000 A,DC)、大功率(50 kW)水下电弧放电本身是一个复杂的过程,电弧长度短,具有非线性、变参数、不易稳定等特点。试验表明采用PFC-PID串级控制策略的水下电弧控制系统的动态品质明显优于采用传统PID控制的系统,具有较强的鲁棒性和抗干扰能力。
大多数PID控制都是基于单片机进行,但单片机控制的DDC系统软硬件设计较为复杂,特别是涉及到逻辑控制方面更不是其长处,而PLC在这方面却是公认的最佳选择。随着PLC功能的扩充,许多PLC控制器中都集成了PID控制功能,因此在逻辑控制与PID控制混合的应用场所中采用PLC控制是较为合理的。经过认真的市场调研和技术准备,笔者使用了目前比较先进的PLC技术开发控制系统,对现场各种生产过程信号进行采集.监测、计量。从实际应用的效果来看,该系统具有性价比高、可维护性强、性能稳定等优点。2 系统的工作原理
在水下电弧控制系统中,电弧放电在反应器中完成,气体由此产生。电极控制装置连续地将碳棒电极送入反应器中并维持电极电弧的稳定,从而保持电弧电压和电流的恒定,使得产气成分稳定且产气效率提高。1.控制器,2.伺服放大器,3.220 W交流伺服电动机,4.进退限位开关,5.碳棒检测开关,6.前进限位开关,7.阴极碳棒,8.阳极碳棒,9.下棒控制电磁阀,10.反应堆,T.反应罐温度,P.反应罐压力,U.电弧电压,I.电弧电流。
碳棒的进退是通过伺服电机经传动作用来实现控制的。控制器通过不断检测T、P、U、I值的大小及各开关量的状态来控制电机的转速,通过动丝杆传动作用推动碳棒前进,当碳棒前进速度同碳棒燃烧速度一致时,可认为弧长基本不变,从而实现整个电弧的电压电流恒定控制。
由于阴极碳棒相对阳极碳棒燃烧速度较慢,在工艺设计时,将阴极碳棒与推进导杆连为一体,由伺服电机控制该碳棒的进退,其换棒工序需人工手动完成;阳极碳棒则与推进导轩相分离,导杆只可往前推进碳棒,而不能控制其后退,通过位置检测开关检测碳棒是否推进到位,以决定是否进人自动换棒工序。在进行换棒时,电机控制阴极导杆快速后退,同时另一电机控制阳极碳棒自动跟进,以免断弧。3 S7-200系列PLC的特点
S7-200为西门子公司生产的SIMATIC系列小型PLC,无论是独立运行,还是相连成网络,皆能实现复杂控制功能,适用于各行各业、各种场合中的检测、监测及控制的自动化。此次选用的CPU226有如下特点:24输入、16输出共40个数字量I/O点,可连接7个扩展模块,最大扩展至248路数字量I/O点或35路模拟量I/O点;13 KB程序和数据存储空间;6个独立的30 kHz高速计数器,2路独立的20 kHz高速脉冲输出,具有比例、积分、微分(PID)控制器;2个RS485通信-编程口,具有PPI通信协议、MPI通信协议和自由方式通信能力;I/O端子排可很容易地整体拆卸。自由通信是S7-200系列PLC的一大特色。它使S7-200系列PLC可以与任何通信协议公开的设备、控制器进行通信,即可以由用户自己定义通信协议(如ASCⅡ协议)。波特率最高为38.4 kbit/s(可调整)。因此可以通信的范围大大增加,控制系统配置也更加灵活、方便。4 控制系统方案设计
如图2所示,本控制系统的现场控制部分选用了S7-200 Micro PLC CPU226 DC/DC/DC型和SIMATIC TP 270型触摸式面板作为基层控制部分。PLC与触摸屏间的通讯通过RS-485串行总线完成。PLC控制器本机系统通过其扩展模块主要完成5方面功能:DI(开关量输入)、DO(开关量输出)、AI(模拟量输入)、AO(模拟量输出)、通讯。其中DI口用于检测开关状态(如液位开关、接近开关、光电开关等);DO口用于高速脉冲的发送、变频器的开停控制、各电机的开停控制、电磁阀的控制等。AI用于模拟量的采样,现场模拟量主要包括反映罐温度、压力、电弧的电压电流等,从现场传送到AI模块的信号为4 mA~20 mA电流信号。AO则根据现场采集到的信号调节模拟量输出大小来控制变频器频率的高低,进而通过变频器来实现对循环泵和气体压缩泵的速度控制。伺服电机的控制则通过告诉脉冲输出控制来完成。在控制柜内部预留出用于其它功能模块的扩展空间,如额外的压力检测、气体浓度检测,还有Medem上网模块,以后系统升级可将现场得到的各种数据通过Modem发送到Internet。5 系统软件设计
5.1 PLC程序设计说明
CPU226是西门子S7-200系列中的高档PLC,本机自带24个数字输入口、16个数字输出口及两个RS-422/485串行通讯口,最多可扩展7个应用模块。这里通过扩展EM231模拟输入模块来采集电压信号,输入模拟信号可选择O V~10 V、±5 V、0 mA~20 mA等多种信号输入方式。最终PLC根据输入电压信号的大小控制脉冲发送周期的大小,从而达到控制伺服电机速度的目的。本系统中控制程序主要完成以下几个任务:
1)系统参数的初始化;
2)各种检测开关的读取;
3)电压、电流、工作压力、温度等的读取;
4)电机、变频器、电磁阀等的控制。
为了完成上述各种功能,程序分为七大模块,分别为:
1)初始化程序:完成系统各种参数的初始化,如在控制面板上对参数作了修改,则下次运行时会自动用新参数完成初始
化;
2)模拟量的读取:开机工作便开始完成电压、电流、工作压力、温度等的监测与读取,实时传递数据到面板显示;
3)主控程序:完成各子程序使能模块的调用及切换,各种限制及保护功能等;
4)手动控制程序:实现各种控制状态的手动操作;
5)自动控制程序:完成自动换棒、自动、自动引弧、各种电机等的控制;
6)控制算法程序:完成对产气压力和工作电弧的恒定控制;
7)PWM/PTO脉冲控制:根据检测到的电弧电压及碳棒状态自动调节脉冲频率或脉冲个数、两个脉冲口的配合与切换、PWM/PTO工作方式的配合与切换等。
5.2 程序控制流程
整个程序的控制难点在于对电弧的控制,因此,本文仅给出电弧控制的流程,电弧控制难的主要原因在于电弧燃烧时其间距较小,容易受到外界干扰,引起控制器的震荡。在换棒过程中,最出现断弧现象,针对电弧燃烧时阴极和阳极燃烧速度不同设计了以下控制程序(阳极燃烧速度远远大于阴极)。在换棒时,右电机(控制阳极碳棒)控制滚轴丝杆全速后退,左电机(控制阴极碳棒)则进入PID调节程序自动跟进,当检测到碳棒到位,右电机先控制滚轴丝杆快速前进以弥补虚位,然后将PID控制切换到右电机上,左电机缓慢后退。
6 结束语
基于PLC的水下电弧控制系统软硬件设计较为简单,但逻辑控制功能强大,由于许多PLC控制器中都扩充了PID控制功能,因此在逻辑控制与PID控制混合的应用场合采用PLC控制是较为合理的。从系统实际运行的效果来看,该系统性价比高、可维护性强、性能稳定。
RFID的全称是Radio Frequency Identification,即射频识别,它利用无线电射频实现可编程控制器(PLC)或微机(PC)与标识间的, 从而实现非接触式目标识别与跟踪。
一个典型的RFID射频识别系统包括四部分:标识、天线、控制器和主机(PLC或PC),
标识一般固定在跟踪识别对象上,如托盘、货架、小车、集装箱,在标识中可以存储一定字节的数据,用于记录识别对象的重要信息。当标识随识别对象移动时,标识就成为一个移动的数据载体。以RFID在计算机组装线上的应用为例,标识中可以记录机箱的类型(立式还是卧式)、所需配件及型号(主板、硬盘、CD-ROM等)、需要完成的工序等。又如在邮包的自动分拣和跟踪应用中,可以在标识中存储邮包的始发地、目的地、路由等信息。
天线的作用是通过无线电磁波从标识中读数据或写数据到标识中。天线形状大小各异,大的可以做成货仓出口的门或通道,小的可以小到1mm。
控制器用于控制天线与PLC或PC间的数据通信,有的控制器还带有数字量输入输出,可以直接用于控制。控制器与天线合称读写器。
PLC或PC根据读写器捕捉到的标识中的数据完成相应的过程控制,或进行数据分析、显示和存储。
本文即以具有代表性的美国EMS(Escort Memory Systems)公司的13.56MHz无源RFID射频识别读写器LRP830为例,介绍了PLC及PC与RFID读写器进行串行通讯,从而获取标识数据,用于控制或数据处理的具体实现方法。
2 RFID射频识别读写器的命令集及串行通讯协议
以LRP830读写器为例,LRP830是EMS 13.56MHz无源系列射频读写器中的一种,它的标识和天线可以在水下或高温腐蚀环境中正常工作,可以一次读写99个标识,最大读写距离63.5cm。它带有两个串口,一个DeviceNet接口,4个DI隔离输入,4个DI隔离输出,保护等级IP66,NEMA4封装,非常适合于在工业自动化中应用。
LRP830读写器上的串口是合在一起的,通过专用电缆可以分接出COM1和COM2两个串口,两个串口作用不同,COM1用作通讯口,从PLC或PC接收命令并返回响应数据, 可以配置为RS232、RS422或DeviceNet接口。COM2用于配置系统参数(如读写模式、波特率等)或下载系统升级程序。
LRP830可以与所有EMS的FastTrackTM系列无源标识结合使用,每个标识中可以存储48个字节的数据,另外还有8个字节用于存储只读的唯一的序列号(出厂前由厂方设定)。
每种命令可以有三种通讯协议:ABxS 、ABxF 、ABx ASCII。表2 是ABxS通讯协议持续读单标识命令的一个例子,其它命令与此类似。
3 RFID读写器与PLC串行通讯
以EMS RFID读写器LRP830 与GE Fanuc VersaMax PLC的串行通讯为例。VersaMax PLC的RS232串口与LRP830的COM1接线对应
以下是具体实现时要注意的技术细节:
1) LRP830与VersaMax PLC的串口相连时,信号线要错线,即VersaMax RS232口的TXD/RXD要接LRP830 的COM1的RXD/TXD,LRP830与PC连接时则是直通的。
2) PLC使用串行I/O通讯协议与RFID读写器通讯。串口初始化、设置缓冲区、缓冲区、写串口、读串口状态等操作都是先通过一组BLKMOV WORD指令给COMMREQ的数据块赋值,然后执行COMMREQ指令完成的。例如,以下语句通过RFID读写器写10个FF(46H)到标识中,从第一个字节写起。
3) 要注意PLC写标识数据只需要执行写串口命令就可以了,而PLC读标识数据的过程则包含两步:一是PLC执行写串口命令, 即写读标识命令到RFID读写器;二是PLC执行读串口命令,捕捉RFID读写器返回的数据。这是由于RFID读写器在接到读标识命令后,会返回读命令的响应信息到串口缓冲区,其中包含了读到的标识数据。
4) 使用ABxS协议时,要注意命令字的MSB和LSB的顺序问题。RFID读写器与PLC通讯时,要将读写器指令的MSB和LSB颠倒一下,即LSB在前,MSB在后。例如图3中,第二个BLKMOV WORD指令的第三个输入IN3应为16#4AA,而非16#AA04。
5) 利用读写器指示灯的变化辅助PLC程序调试。LRP830读写器的面板上有两排LED指示灯,其中,当“ANT”亮时,表示天线在执行读写操作;“COM1”亮时,表示串口1执行了写命令,“RF”亮时,表示有标识被读写且仍在读写范围内。
4 RFID读写器与PC串行通讯
仍以EMS RFID读写器LRP830为例。与PC机相连时,LRP830的COM1/COM2与PC机的9针串口COM1/COM2的连接对应。
在PC机上开发串口通讯程序,可以使用现有的通讯控件(如VB的Mscomm),也可以使用高级编程语言结合bbbbbbs API实现。本文用Delphi 6在bbbbbbs2000环境中,应用多线程技术实现了PC与RFID读写器间的串行通信。使用Delphi的优点是,Delphi对许多bbbbbbs底层API函数作了封装,简化了程序代码。使用多线程的优点是,程序编写比较灵活,而且串口线程不影响主线程其它任务的执行。
RFID
在具体实现上述思路时,要注意以下技术细节:
1) 根据RFID读写器通讯协议的特点,读写器每执行一个主机发来的指令,无论是读标识还是写标识,都会返回一定字节的响应数据,用以确认命令已执行或返回标识中存储的数据。因此,主机读或写标识数据都需要先写(串口命令)后读(返回的串口数据)。
2) 为了使程序体现模块化的设计思想,易于调试和维护,可以把各种RFID命令预先存入命令数组中,而把主机对RFID串口的命令和捕捉RFID读写器命令响应编制成单独的子程序,在调用它之前,先调用命令字赋值子程序。
3) 对主线程的说明:在主线程中用CreateFile函数建立串口事件,设置缓冲区和通信参数,创建串口线程。用WriteFile写串口函数完成通过RFID读写器写数据到标识中。部分程序如下:
……
hcom := CreateFile(pchar(Whichcom), GENERIC_WRITE or GENERIC_READ,
0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); //产生串口事件
setupcomm(hcom,TOTALBYTES,TOTALBYTES); //设置缓冲区
getcommstate(hcom,lpdcb);
lpdcb.BaudRate:=BAUDRATE; //波特率
lpdcb.StopBits := STOPBIT; //停止位
lpdcb.ByteSize := BYTESIZE; //每字节有几位
lpdcb.Parity :=PARITY; //奇偶校验
setcommstate(hcom,lpdcb); //设置串口
Mycomm := Tcomm2.Create(False); //创建串口线程
WriteFile(hcom, WriteBuffer,sizeof(WriteBuffer),lpBytesSent, 0);//写标识命令
……
4) 对串口线程的说明:
程序中用到的方法主要有Synchronize和Terminate。Synchronize是Delphi提供的一种安全调用线程的方法,它把线程的调用权交给了主线程,从而避免了线程间的冲突,这是一种最简单的线程间同步的方法,可以省去用其它语言编程时需要调用的多个bbbbbbs API 函数,例如createEvent(创建同步事件),Waitforsinglebbbbbb(等待同步事件置位),resetevent(同步事件复位),PostMessage(向主线程发送消息)等。用Delphi编写多线程通讯程序的优点是显而易见的。例如以下语句即可实现串口线程:
……
While (not Terminated) do //如果终止属性不为真
Begin
dwEvtM
ask:=0;
Wait := WaitCommEvent(hcom,dwevtmask,lpol); //等待串口事件
if Wait Then
begin
Synchronize(DataProcessing); //同步串口事件
end;
end;
上述程序一旦检测到串口事件,就调用DataProcessing方法读串口数据,并写入数组,供程序其它部分调用,另外还要何时退出线程,程序如下:
procedure Tmainbbbb.DataProcessing
begin
bbbbb := bbbbbCOMMERROR(hcom,lperrors,@comms); //串口错误
if bbbbb Then
Begin //处理接收数据
ReadFile(hcom,ReadBuffer,Comms.cbInQue,LPReadNumber,0);
ReceBytes[I+ArrayOffset] := ReadBuffer[I];
//读串口缓冲区数据并写入数组
gameover := (ReceBytes[I+ArrayOffset-1]=Byte($FF))
and (ReceBytes[I+ArrayOffset]=Byte($FF)); //终止条件
if gameover then terminate; //退出线程
……
End;
End;
其中,Terminate将线程的Terminated属性设置为True。线程一旦检测到Terminated属性为True,就会结束线程,去执行Onterminate事件,在Onterminate事件中对采集到的RFID标识数据进行处理。由于RFID读写器的ABxS协议的命令响应的最后两个字节都是FF,所以可以将收到连续的两个FF作为终止线程的条件之一。
程序应用举例:
以持续读标识中所有48字节数据命令为例,在程序中用WriteBuffer数组保存该命令,对WriteBuffer数组的各个元素赋值如下:
WriteBuffer[0] := Byte($AA); WriteBuffer[1] := Byte($0D); //连续读标识命令字头
WriteBuffer[2] := Byte($00); WriteBuffer[3] := Byte($00); //从第一个字节开始读
WriteBuffer[4] := Byte($00); WriteBuffer[5] := Byte($30); //读48个字节数据
WriteBuffer[6] := Byte($00); WriteBuffer[7] := Byte($02); //延时2秒
WriteBuffer[8] := Byte($ff); WriteBuffer[9] := Byte($ff); //连续读标识命令字
执行持续读标识命令后,程序以WriteBuffer数组写串口,RFID读写器执行此命令,并返回响应数据。
窗口中可以看到,前4个字节AA OD FF FF就是LRP830读写器对持续读命令的确认信息,然后是数据报文头AA OD和标识中48个字节的数据(每字节数据前加00),最后是数据报文尾FF FF。
5 结束语
本文介绍了可编程控制器及微机与RFID射频识别读写器进行串行通讯,从而获取标识中的数据的具体实现方法:PLC通过串行I/O通讯协议与RFID读写器实现串行通讯,PC通过bbbbbbs多线程技术与RFID读写器实现串行通讯。本文所述方法具有通用性,对于其它厂家的PLC和RFID系统也有一定的参考价值。RFID射频识别技术在我国工业自动化等领域的应用才刚刚开始,前景非常广阔。本文对于促进该技术的推广应用具有一定的积极意义。
浔之漫智控技术(上海)有限公司经销/CO-TRUST科思创西门子PLC;S7-200S7-300 S7-400 S7-1200 触摸屏,变频器,6FC,6SNS120 V10 V60 V80伺服数控备件:原装进口电机,电线,电缆,希望能跟您有更多的合作机会。我公司经营西门子全新原装PLC;S7-200S7-300 S7-400 S7-1200 触摸屏,变频器,6FC,6SNS120 V10 V60 V80伺服数控备件:原装进口电机(1LA7、1LG4、1LA9、1LE1),国产电机(1LG0,1LE0)大型电机(1LA8,1LA4,1PQ8)伺服电机(1PH,1PM,1FT,1FK,1FS)西门子保内全新原装产品‘质保一年。一年内因产品质量问题免费更换新产品;不收取任何费。欢迎致电咨询。


