(东北石油大学秦皇岛分校,河北秦皇岛066004)
基金项目:河北省高等教育学会2017年度高等教育科学研究课题“测控设备的仿真设计及其在教学中的应用(GJXH2017-176)”
摘要:本文分析了测控实验课中开关控制器与计算机之间的通信协议,编写了该控制器的仿真程序,用虚拟串口技术建立了仿真实验环境,用串口调试助手对仿真器测试成功,并用编程语言编写了测试程序,成功实现了计算机与仿真器的通信过程。该仿真器可用于工业测控课程实验教学。
关键词:通信协议;开关控制;仿真;教学
引言
在工业测控教学实验中,需采购置大量的、昂贵的工业测控仪器和实验台,硬件设备维护工作量也非常大[1]。工业测控的学习目标是在熟悉测控仪器的使用功能后,主要是在计算机上对测控仪器发送控制命令并从其获得数据、然后进行软件处理,即主要技术是数据通信和计算机处理。测控仪器通常是一些工业智能仪器。但这些仪器都是在工业控制系统中使用的,其功能强、可靠性高,用于工业环境,使得其价格昂贵。为了降低测控教学实验成本,本文设计了一个开关量控制器的仿真器,并利用现有的计算机软件工具和编程软件可构成虚拟的开关控制系统。只需要在计算机上安装一个模块仿真器,即可编写、运行及调试计算机程序,设计开关控制系统,这些都是在软件环境中实现。充分利用学校的计算机资源,减少了测控仪器的维护工作量,同时也可为学生提供了形象直观的实验过程。
本文分析了教学中用到的开关控制器与计算机通信的协议,用软件仿真实现了开关控制器的通信协议,并用通用软件编写了测试程序成功实现了对该仿真器的通信测试。
1开关控制器
测控实验教学中用于的开关控制器具有8个LED、8个开关和1个RS-485通信接口等部件。通过RS-485接口与计算机进行通信,其通信协议采用4个字节构成的字符串。计算机采用查询应答方式与开关控制器构成主从式通信。计算机端软件可以是组态软件或任何高级编程语言。通信时由计算机主动发出查询请求命令,开关控制器处于被查询的应答状态,当收到正确的计算机命令后,对其进行处理,并返回应答的信息。
计算机与开关控制器通信有2种命令,#AABB(data)和#AA6,可以实现查询开关状态和控制LED状态。
1.1#AA(cr)
计算机读取地址为AA的控制器开关状态的命令,其中#为读入命令的起始符,AA为控制器地址(16进制形式,00到FF),(cr)为结束符。
模块应答数据为:!(LED状态)(开关状态)00(cr)。其中应答数据的起始符为!,LED状态和开关状态均为2位16进制数,00无意义,(cr)为结束符。控制器只对和自己地址一致的正确命令作出应答。例如:计算机发送命令#02(cr),控制器返回应答数据!112200(cr),其中LED状态的16进制数为11(二进制为00010001),第0个和第4个LED亮,其它灭。开关的16进制数为22(二进制为00100010),即开关1和5为闭合,其它断开。
1.2#AABB(Data)(cr)
计算机设置地址为AA的开关控制器上LED亮灭命令,其中#为读输出命令的起始符,AA为模块地址,BB分2种情况:BB为00时,data为8个LED状态;BB非0时,BB的第1位必须为1,而第2位为LED号0到7,data为00或01表示设置的LED的状态值,为0或1。(cr)为结束符。
控制器应答数据为:>(cr)。其中应答数据的起始符为>,(cr)为结束符。
例如:计算机发送设置8个LED状态命令#020005(cr),控制器正确设置后返回>(cr)。设置命令#020005(cr)将地址为02的控制器LED0和LED2设置为亮。
又如:计算机发送设置单个LED状态命令#021201(cr),控制器正确设置后返回>(cr)。设置命令#021201(cr),仅将地址为02的开关控制器的LED2设置为亮。
2仿真器软件设计
本文采用VisualBasic编程软件实现开关控制仿真器。为了简化开关控制器仿真程序(简称仿真器)的设计,设计时将仿真器的地址设定为03,这样读开关状态命令为#03(cr),可以读取8个LED和8个开关的状态,设置LED的命令为#03BB(data)(cr):可写同时8个或只写某1个LED的状态。因此设计仿真程序时,要对这2条命令识别和应答。
为了在VB中实现串行通信[2],仿真器设计中采用了微软的MSCOMM控件,其属性设置为:CommPort=3,即仿真器连接在串口3上;Rthreshold=1,即事件接收方式;InputMode=0,因为仿真器收到命令是带回车符结束的字符串,因此接收方式属性为0即采用默认的文本格式接收;Settings=”9600,n,8,1”,即通信波特率为9600,无校验,8位数据位,1个停止位。
开关控制仿真器界面如图1所示,8个开关的状态用长方形选择框表示,可实现有按下和弹起状态,按下状态表示开关闭合,弹起表示开关断开;再点击一次开关则呈弹起状态;8个LED的状态用方形按钮表示,可用表面红灰颜色变化表示灯的亮灭。
图1程序窗体
开关控制仿真器处于被查询状态,采用事件触发方式接收计算机发来的字符串命令。在接收事件中对收到的字符串进行分析,分类应答。首先查看地址是否和自己的一致,一致的话继续再判断是读开关的状态还是设置LED状态的命令,进行相应的处理。其过程见图2。
3仿真器测试
仿真器测试过程和测控实验课教学时相同,需要在一台WINDONS操作系统的计算机上建立软件实验环境,非常简单方便。软件环境搭建需要三个软件,一个是前面设计的仿真器;一个是测控软件课所用的编程软件,可以是VB、VC或VC#等编程软件;第三个是ELTIMA公司的VirtualSerialPortsDriver,即虚拟串口软件,它就像一条串口线一样,将编程软件和仿真器连接起来。
软件环境建立过程是先运行虚拟串口软件,它将虚拟的COM3和COM4端口连接起来,这样该计算机中就有了可以通信且正确连接的COM3和COM4串口;再启动仿真器,它使用COM3端口;最后运行测控程序,它使用COM4可以和仿真器通信了。
先用串口调试助手测试仿真器,设置通信参数同仿真器,打开串口4,发送1.1和1.2中的命令实例,测试仿真器的8个LED状态和8个开关的状态,效果和实际开关控制器相同。
测试成功后就可以学习测控课的监控程序设计了。
下面用VB语言编写一个简单的监测软件。其中MSCOMM控件的属性设置为:CommPort=4,采用串口4;Rthreshold=1,采用事件触发过程接收仿真器的应答数据;Settings=”9600,n,8,1”,通信参数设置与仿真器相同。测试软件界面设计如图3所示,8个开关通过发送命令检测并用标签显示ON/OFF状态;用按钮8个可分别控制8个LED亮灭,也可以通过发送按钮控制单个或8个LED亮灭。定时器用于读取开关状态,当仿真器上开关状态发生变化时,测试程序更新开关的ON/OFF状态。发送LED控制命令后,能看到仿真器上LED灯的亮灭变化。
图3监测软件运行结果
上述测试表明,开关控制仿真器可满足测控实验学习测试软件中关于通信协议为字符串类型的串行通信技术的学习要求。
4结束语
本文根据开关控制器的通信协议,编程仿真实现了符合其功能的仿真器。该仿真器用于测控软件设计的实验教学中,大大提高了学习效率,节约了大量的、昂贵的工业测控硬件设备,同时去除了硬件设备的维护工作量。该仿真器已用于作者学校电类专业的测控课程教学中,仿真器运行稳定,效果良好,使用简单方便。本文提出的开关控制器通信协议的实现方法,也可用于其它通信协议为字符串类型的串行通信技术中,对于设计其它仿真器具有借鉴作用。用仿真器教学的方法在测控课程学习方面具有一定的推广价值。
参考文献
[1]刘心红,郭福田,孙振兴.Proteus仿真技术在单片机教学中的应用[J].北京:实验技术与管理:2007,24(3),96-87
[2]曾丽丽,刘心红,赵忖,张昕编著.VB通信编程技术[M].北京:中国石化出版社.2014.106-128.
作者简介:刘心红(1966-),女,黑龙江大庆市人,工学学士,副教授,教师。现从事计算机软件应用方面的教学与研究工作。