当前位置 首页 >经典赏析 >

基于MCGS的STC15单片机驱动构件开发

作者:jkyxc 浏览数:


打开文本图片集

摘   要:MCGS组态软件提供了一种脚本驱动开发工具,用户使用该工具可便捷开发满足项目需求的驱动构件。脚本驱动开发工具包含大量的标准函数,能充分满足用户需求。文章基于MCGS的STC15单片机驱动构件开发,根据水位监控系统的实际要求设计,首先确定通信协议,再配置设备属性、设备通道、编写设备命令与编辑调试,最后通过驱动构件的发布与应用,实现设备驱动构件的开发。

关键词:MCGS组态软件;STC15单片机;脚本驱动;通信

当今,随着计算机、网络及信息技术的高速发展,传统的信号灯、显示仪表、操控按钮等已不能满足现代工业发展的需要。触摸屏作为一种流行的人机交互界面,具有功能强大、稳定性好、美观易用等特点,在工业中应用非常广泛。北京昆仑通态自动化软件科技有限公司开发的触摸屏和监视与控制通用系统(Monitor and Control Generated System,MCGS)软件具有使用方便、稳定性高、成本低、速度快、功能强的特点,支持多种运行环境,抗干扰能力强[1]。

MCGS环境下的STC15单片机驱动构件的开发,以智能水位控制项目为背景,通过MCGS脚本驱动开发工具进行脚本程序的设计。

1    智能水位控制项目人机交互通信简介

智能水位控制系统上位机采用昆仑通态的TPC7062Ti嵌入式一体化触摸屏,下位机采用宏晶公司的増强型8051内核的STC15系列单片机。上位机与下位机通信如图1所示,STC15单片机通过RS232串口与触摸屏进行连接,下位机采集液位和水泵状态传送给上位机,上位机对接受的数据进行分析处理和监控,将控制指令发送给下位机,实现智能水位控制系统的人机交互。

2    MCGS脚本驱动开发

MCGS驱动构件开发有两种方式,一种是MCGS软件厂商提供采用Active DLL构件的方式来实现设备驱动程序,通过调用接口函数来实现用户的所需功能,使用标准的对象连接与嵌入(Object Linking and Embedding,OLE)接口,实现驱动程序在组态软件中挂接。另一种是提供配套的MCGS脚本驱动开发工具实现用户个性化开发[2]。厂商提供的标准设备驱动涉及较多的技术细节,需要花费大量时间学习接口技术和计算机技术,效率较低。MCCS脚本驱动开发使用其自带的脚本编程语言,开发步骤标准,包含大量的库函数,不仅能满足用户功能需求,并且具备一定的容错处理能力,使用脚本驱动工具进行驱动程序开发,可以节省时间,提高效率。本文采用第二种方式,使用向导建立工程,开发内容涉及配置设备属性、配置设备通道、编写设备命令和编辑设备脚本代码等。

2.1  制定通信协议

通信协议是指通信双方为了达到某种通信目标所必须遵守的规范和准则。通信规则:上位机定时通过串口发送命令给下位机,主要是将触摸屏中按钮的当前状态发送给下位机,下位机在接收到命令后立即将当前采集的水位、水泵等状态信息回送给上位机。

常用通信信号格式包括帧头、长度、当前页、操作类型、数据、帧尾及校验。根据具体的项目需求,信号帧的格式可以有所不同[3-5]。

通信过程中,双方规定通信协议,当下位機收到上位机的数据并通过校验后,将下位机采集的数据发送给主机,并执行上位机传来的命令。通信数据的格式:帧头、命令字、数据体字节、帧尾及校验累加和,如表1所示。

(1)帧头,是通信帧的开始标志,可判断本帧是否属于通信协议;本项目中,帧头占1 B。当帧头为0×69时,表示上位机发送数据给下位机;当帧头为0×68时,表示下位机发送数据到上位机。

(2)命令字,表示传输的数据是控制命令,占1 B;0×10表示命令,0×01表示数据。

(3)数据,指所传输数据的内容,本项目中传输的数据较少,没有定义数据长度。

(4)帧尾,为该通信帧的结束标志,占1 B。当为 0×EE时,表示上位机发送结束;当为0×FE时,表示下位机发送结束。

(5)校验,采用累加求和校验,保证数据传输的正确率。

2.2  设计脚本驱动程序

MCGS脚本驱动程序设计主要步骤如下:首先,配置设备属性;其次,建立配置设备通道;再次,编写设备命令;从次,编写自定义子函数;最后,编辑设备脚本。

完成上述步骤后,对脚本程序进行检査调试,生成用于发布与使用的MDR文件。

2.2.1  配置设备属性

设备属性指的是脚本驱动与MCGS组态软件间的接口配置。配置设备属性指对设备驱动的变量进行设置,包括设备地址和通信时延。设备属性对所有设备脚本可见,只读不写,只能作为一个全局常量。这里设备属性采用默认配置。

2.2.2  配置设备通道

设备通道是脚本驱动跟实时数据对象之间的接口。配置设备通道指设置脚本驱动所需的内部变量,也就是脚本驱动和下位机通信涉及的数据变量。根据需求,配置设备通道如表2所示。

当脚本驱动添加到组态软件时,通过串口通道驱动程序,将设备通道与组态软件中的实时数据库连接,实现数据的传输。

2.2.3  通信帧配置

通信帧配置是通信数据格式的设置,包括通信帧的类型、发送帧格式、回收帧格式等。通信帧类型分字节数组(HEX格式)和ASCII字符码格式。发送帧和回收帧格式是指传输数据的帧头、地址、命令体、数据体、帧尾、校验、结束符号等。发送帧是上位机发给下位机的数据,回收帧是下位机回发给上位机的数据。根据通信协议,通信帧类型设置为“字节数组[HEX格式]”,发送帧和回收帧格式设置为:帧头、命令体、数据体、帧尾、校验;数据体长度发送帧的设置为2,回收帧的设置为4。

在通信帧结构确定后,进行命令信息设置,发送命令为:帧头“69”、命令字“10”、数据体000、数据体001、帧尾“EE”以及“校验累加和”;接受命令为:帧头“68”、命令字“01”、数据体000、数据体001、数据体002、数据体003、帧尾“FE”以及“校验累加和”。在命令信息设置中进行帧数据体设置时,数据值设置中数据长度设置为1数据单位,帧头、命令体、帧尾数据内容根据协议设定,其他设置为“00”;帧头、命令体、数据体、帧尾选中“是否参与校验”,校验方式设置为“求和校验”。

2.2.4  设备命令

设备命令是指用来对组态工程进行控制的函数,是脚本驱动唯一的动态控制方法,项目中应用的主要设备命令如表3所示。

通过调用“!DevWriteAndReadByteArr”函数,将触摸屏上的按键状态“KEY0”和“KEY1”两个设备通道的值发送给控制电路板,并接受“LEVEL_H”“LEVEL_L”“Pump_IN”和“Pump_OUT”4个设备通道的值,保存到对应的数组中,通过编写函数来设置触摸屏显示状态和控制板的运行。

2.2.5  编写函数

在通道和通信帧结构设定后,脚本驱动开发软件会生成一个脚本程序,需要在此脚本中根据项目的要求和目标适当增加一些参数和变量,脚本驱动的流程如图2所示。

首先,定义通信所需的通道索引变量、全局变量、中间变量,尤其是一些状态变量,执行一些设备初始化操作,如对端口赋初值等。

其次,编写发送和接收数据的方式。

!ArrayResize(SendByteArr,6) ‘设定发送数组的长度为5

!GetIntChannelValueByName(“KEY1”,AAA1)’将触摸屏上按键1的状态赋值给中间变量AAA1

!GetIntChannelValueByName(“KEY2”,AAA2)’将触摸屏上按键2的状态赋值给中间变量AAA2

if AAA1=1 and AAA2=1 then ‘若两个变量都是1,则不合理,需要将变量重新赋值0

AAA1=0

AAA2=0

!SetSingleChannelValueByName(“KEY1”,AAA1)’重置按鍵1的状态

!SetSingleChannelValueByName(“KEY2”,AAA2)’重置按键2的状态

endif

SendByteArr[1] = &H69   ‘发送帧头,为十六进制69

SendByteArr[2] = &H10   ‘发送命令字,为十六进制10

SendByteArr[3] = AAA1   ‘按键1的状态待发送

SendByteArr[4] = AAA2   ‘按键2的状态待发送

SendByteArr[5] = &HEE   ‘发送帧尾,为十六进制EF

nReturn = !SvrByteArraySum(SendByteArr,1,5)’求和校验

SendByteArr[6] = nReturn ‘累加和待发送

"发送和接收数据按如下方式:

!ArrayResize(RecByteArr,8)"设定接受命令字节数组的长度为8

nReturn = !DevWriteAndReadByteArr(SendByteArr,6, RecByteArr, 8, 通讯延时) "往串口中发送6个字节,发送完毕后,再读取数据,如果已读到8个字节,或者通讯延时内尚未取读完毕,返回。

if nReturn <> 8 then

!SetSingleChannelValueByName("通讯状态", 2)

exit

endif

最后,编写自定义函数,用于接受数据的处理分析。

nIndex = 1

!ArrayResize(DataByteArr,8)"存放解析数据临时字节数组的长度为8

TEMP = !SvrByteArraySum(RecByteArr,1,7)"求接受数组的前7个数据的累加和

if TEMP = RecByteArr[8]  then   "校验

if RecByteArr[1]= &H68 and RecByteArr[2]= &H01 and RecByteArr[7]= &HFE  then

"判断帧头、命令字和帧尾是否正确

while nIndex < 9

DataByteArr[nIndex] = RecByteArr[nIndex]  "将接受数据数组的值保存至解析数据数组

nIndex = nIndex + 1

endwhile

endif

endif

!SetSingleChannelValueByName("LEVEL_H ",DataByteArr[3]) "接受到的有效数据写到对应的通道

!SetSingleChannelValueByName("LEVEL_L ",DataByteArr[4])

!SetSingleChannelValueByName(“Pump_IN “,DataByteArr[5])

!SetSingleChannelValueByName(“Pump_OUT “,DataByteArr[6])

if  DataByteArr[3]=0 and DataByteArr[4]=0 then ‘检测液位传感器的好坏

TEMP1 = 0 ‘液位传感器损坏

else

TEMP1 = 1 ‘液位传感器正常

endif

!SetSingleChannelValueByName(“CHGQ”,TEMP1)  ‘赋值给传感器检测通道

nChlIndex = nChlIndex + nIndex ‘设置通讯标志,解析都正确

!SetSingleChannelValueByName(“通讯状态”, 0) ‘通讯状态正常

在脚本编写完成后编辑调试设备脚本,若没有问题输出窗口会提示“设备编辑检查通过”,否则需要根据提示信息进行修改。

2.2.6  脚本驱动的发布与使用

发布脚本驱动是将与脚本驱动相关文件保存在指定的目录下,以确保可被MCCS组态软件调用。开发好的脚本驱动相关文件包括一个MDR主文件,若驱动具有帮助还会多一个帮助文件。发布开发好的脚本驱动有以下两种方法:

(1)将驱动相关文件拷贝到“MCGSE\Program\Drivers\用户定制设备”文件夹中。

(2)使用设备管理对话框的安装功能进行安装,不会拷贝脚本驱动的帮助文件。

发布完成后,首先,将脚本驱动装载到设备管理的设备工具箱中;其次,对串口父设备进行通信参数设置,如波特率、COM号等;最后,在父设备下挂接已经发布安装的脚本驱动子设备,并对设备通道及其相对应的数据对象进行连接。

3    单片机程序设计与统调

3.1  单片机程序设计

本项目采用宏晶公司的增强型8051内核的单片机IAP15F2K61S2作为下位机处理器,其速度比传统8051快7~12倍;片内有大容量2 048字节SRAM;不需外部晶振和复位电路,且可对外输出时钟和低电平复位信号;具有ISP/IAP功能;超高速双串口/UART,兩个完全独立的高速异步通信端口,可分时切换当5组串口使用;具有硬件看门狗和超强抗干扰功能。

通过串口和上位机进行数据交换,IAP15F2K61S2使用1个字节长度的SCON寄存器来控制通用异步发送接收寄存器URAT。为了顺利接收上位机接收来的信息,设置SCON寄存器使UART1工作在MODE1状态下,该模式下每一帧数据为10位,1个起始位,8个数据位,1个停止位,不采用校验位;启动定时器1工作在8位自动重载模式下,通过载入TH1和TL1的初始值来设置波特率,此处使波特率加倍SMOD=1,TH1=TL1=0×BD(晶振频率11.059 2 MHz)得到9 600的波特率。单片机串口操作程序流程如图3所示[6-8]。

3.2  联机调试

(1)配置脚本驱动中的串口参数。将单片机水位控制电路板通过串口线与计算机连接,在脚本驱动设计界面中根据设备管理器的端口设置串口号以及其他通信格式设置。

(2)进行调试。在脚本驱动设计界面中选择“调试”菜单中的“定时通道采集”命令进行调试,通过改变液位传感器的状态,观察“LEVEL_H”“LEVEL_L”“Pump_IN”和“Pump_OUT”当前值变化情况,检查修改驱动脚本程序、参数设置以及下位机程序[9-11]。

4    结语

本文设计的基于MCCS的STC15单片机驱动构件经过实际运行,实现了上位机和下位机的无缝对接,数据传输高效可靠、运行稳定、工作效率高。证明了利用昆仑通泰的脚本驱动开发工具,用户可以高效地开发设备驱动,配置简便、开发周期短、能够适应各种设备,该方法为开发适应实际项目需求的设备驱动程序提供了思路,可以广泛应用于工程中的脚本驱动。

[参考文献]

[1]许萌,李斌,姚骏.MCGS组态环境下的MSP430单片机驱动开发[J].自动化仪表,2017(12):50-53,58.

[2]包建华,张兴奎,胡福年.MCGS平台下51单片机驱动构件开发与应用[J].自动化仪表,2011(11):35-38.

[3]周杰,林沂杰.基于MCGS的51单片机驱动构件实现方法[J].微计算机应用,2009(11):76-80.

[4]百度文库.MCGS脚本驱动开发工具使用指导手册[EB/OL].(2019-10-10)[2019-11-20].http://wenku.baidu.c,2019.10.10.

[5]王晓光,郑萍,马巧娟,等.基于MCGS的51系列单片机通用驱动程序设计[J].仪表技术与传感器,2010(5):37-40.

[6]刘兴华.基于MCGS的煤矿监控系统独立设备驱动构件设计[J].煤炭技术,2013(1):122-123.

[7]潘峥嵘,张岩,郭凯,等.基于MCGS的C8051F020单片机驱动程序的设计与应用[J].微计算机应用,2009(2):48-52.

[8]孙秀云.远程液位监控系统的设计[J].德州学院学报,2008(6):108-110.

[9]徐宇宝,曹昌勇.基于CAN总线的粮库温度和湿度监控系统[J].机械工程与自动化,2008(4):135-136.

[10]桂江华,邵健,潘邈.一种高可靠串行通信协议[J].电子与封装,2016(2):40-43,48.

[11]张文明,华祖银.嵌入式组态控制技术[M].北京:中国铁道出版社,2019.

推荐访问:构件 单片机 驱动 开发 MCGS

相关文章:

Top