张波(化名)是福建省厦门市一家很有名的工控仪表生产厂家的技术人员,该厂家是昆仑通态MCGS组态软件的老客户,每年都使用200套以上的MCGS组态软件,张波的主要工作是为该厂家的各种仪表编写MCGS组态软件的设备驱动程序。
昆仑通态在2002年推出了nTouch系列嵌入式一体化工控机和MCGS嵌入式组态软件。厦门这一厂家在对昆仑通态这两款产品进行试用和论证后,决定采用nTouch和MCGS应用到其工程项目中。于是派张波到北京出差,学习如何使用Embeded VC开发MCGS嵌入式组态软件的设备驱动程序。
张波是昆仑通态的老朋友,大家都比较熟悉。在昆仑通态学习的空闲时间里四处走动,他发现昆仑通态测试部门的员工正在认真地测试一个软件,询问之后得知,这是昆仑通态准备在近期推出的MCGS组态软件新功能的一部分,名叫MCGS脚本驱动开发程序,觉得非常好奇,于是找到该项目的负责人侯尚秋,与侯尚秋有了如下一段对话。
张波(以下简称张):什么是脚本驱动?
侯尚秋(以下简称侯):
脚本驱动是我们推出的一种使用MCGS脚本编写设备驱动程序的技术。
使用脚本驱动,您不需要使用复杂的VC、DELPHI、VB等开发语言,不需要理解动态连接库、COM接口等复杂的技术。您只需要使用我们提供的开发工具,做一些简单的设置,编写一些简单的脚本,就可以完成一个设备驱动程序。
张:为什么需要脚本驱动?
侯:在组态软件的应用中,需要与各种智能设备通讯。一般组态软件都是通过VC、DELPHI或者VB等高级语言编写动态库程序,通过组态软件提供的接口,实现采集设备数据并和组态软件通讯。
这种方式目前在组态软件中应用广泛。但存在其不足之处。尤其是对于一些简单的设备,或者用户自己开发的设备。
这种设备的通讯协议本身非常简单,但客户不得不委托组态软件的开发商开发设备驱动程序,而组态软件厂商的开发人员往往没有实际的设备,只能根据用户提供的协议完成代码编程。实际用户在现场使用,如果出现问题,又需要返回厂商修改,有时不得不反复数次才能解决问题。给用户造成了人力、物力、时间上的浪费。
如果用户希望自己开发设备驱动程序,则必须使用组态软件厂商提供的开发框架和接口进行开发。理解框架和接口本身就是一件费时费力的事情,同时还需要了解具体的串口、网络、端口等方面的知识。
脚本驱动屏蔽了大量的技术细节。用户需要关心的事情只有一件,就是分析设备的通讯协议,解析从设备读取的数据。这样,用户可以自己完成设备驱动的编写、调试和现场应用,就可以在最短的时间内,开发出满足需要的设备驱动程序。
张:脚本驱动难不难呀?
侯:不难,简单是脚本驱动程序最大的特点。
脚本驱动程序是专为简化驱动开发过程设计的,只要会使用MCGS软件,在4、5个小时的时间内,就可以全面掌握脚本驱动程序开发过程。熟练之后,甚至只需要30分钟就可以完成一个象泓格7017模块的驱动。
张:哪些设备可以用脚本编写驱动?
侯:理论上,所有串口设备、MODEM设备、以太网通讯设备和板卡设备都可以使用脚本驱动程序开发驱动。最适合使用脚本驱动的有:单片机,传感器,智能模块,智能仪表,常见PCI板卡等。
我们对我们所编写的全部设备驱动程序的代码作了统计分析,分析后发现,70%以上的设备驱动程序,其代码量在200行以内。这些设备的特点是协议比较简单,通道较少,对协议的解析和命令合成过程不是很复杂。脚本驱动针对这些设备,提供了必要的数据收发,协议解析,通道赋值等方面的功能。开发这些类型的驱动程序,脚本驱动使用方便、调试简单、工作量小。
张:通讯协议复杂的设备怎么办?
侯:对于通讯协议复杂的设备,如PLC和一些国外的仪表等,理论上也可以使用脚本驱动开发,但是并不是最合适的。这类设备代码量大,调试复杂,一般应由组态厂商的设备驱动人员为用户完成。
脚本驱动程序推出的目标,并不是代替目前的设备驱动开发方式,而是提供给用户一种新的选择。
张:对于MCGS的用户,是不是都要学习使用脚本驱动?
侯:对于MCGS的用户,包括组态用户和最终用户,都不会发觉MCGS在设备处理方面有任何变化,脚本驱动编写的设备驱动程序,与一般的设备驱动程序的使用方式是没有任何区别的。
脚本驱动程序的使用对象,一是我公司内部的驱动开发人员,二是我公司的技术支持人员和销售人员,三是需要自己编写驱动的客户。我们在公司内部的要求是:所有技术支持人员和销售人员都要掌握脚本驱动编写的方法,其目标是加快客户服务的速度。
张:不知其速度和性能如何?
侯:这是一个每个使用脚本驱动程序的人员都会问的一个问题,特别是在嵌入式系统的应用中,速度更是一个非常关键的问题。
我们在内部做了实验,MCGS的脚本语言比VC代码平均慢10倍。但对通讯程序而言,速度的瓶颈是在对串口、以太网等的读写上。我们已将对串口读写、以太网等的读写操作进行了精心的封装,这一部分代码全部是使用C语言编写的,脚本驱动程序只需要调用该部分的函数接口,即可完成一次完整的通讯过程。经过大量的极限测试,我们得出结论,其速度和性能完全能满足现场设备的需要。
张:你刚才讲到精心的封装,能不能具体介绍一下这方面的内容?
侯:这方面的内容,涉及到比较多的计算机知识,我只大概地描述一下,我只针对串口通讯来进行说明。
对于串口通讯,最底层的操作是通过INP和OUP对端口3F8或2F8进行操作,目前编程人员一般不直接采用这种方式了。VC编程人员是通过ReadFile和WriteFile两个API接口函数进行串口操作的;DELPHI一般使用SPCOMM等构件进行串口操作;VB则一般使用MSCOMM控件进行串口操作。
VB和DELPHI对串口操作即进行了封装,将大量的串口操作细节封装在控件或构件的内部,用户只需要调用该控件的属性和方法,即可完成通讯参数的设置和通讯了。
脚本驱动中,对串口操作的封装更加强大,我们分析了历年来我们为客户编写的大量设备驱动程序,归纳出几种典型的串口通讯模式,并将这些串口通讯模式进行封装。现在,用户只要调用一个接口函数,就可以完成数据发送、等待、接收等全过程。
张:我听不太懂,我对VB比较熟悉,我能很快熟悉脚本驱动吗?
侯:如果您打开MCGS提供的脚本驱动开发工具,你一定会发现:这个工具多么象VB的编译器呀,包括界面风格、语法等,还有与VB类似的单步跟踪和调试手段呢。
张:脚本驱动只能运行在MCGS嵌入版本吗?
侯:不,脚本驱动可以运行在MCGS的三个版本中,即在嵌入版本、通用版本和网络版本都可以应用。
而且,脚本驱动还有一个特点,即:一次编写,无需编译。您在MCGS嵌入版本中编写的脚本驱动,可以直接在通用版本或网络版本上使用。
张:脚本驱动的稳定性如何?
侯:主程序可以控制脚本驱动的所有异常访问并加以判断处理。使用脚本驱动,绝不会出现象C语言编写的驱动程序那样,动不动就出现非法指针访问的情况,也不会出现VB那样对内存的非法操作情况。
张:能不能给我演示一下?
侯:好的。
张:这对我们这些系统制造商或其它系统集成商来说,真是一件天大的好事,它什么时间发布?
侯:目前脚本驱动正在紧张的测试中,预计嵌入版本的脚本驱动程序在一个月之后正式发布,通用版本和网络版本的脚本驱动程序在三个月之后正式发布。
张:看来我不需要学习EMBEDED VC和VB了,能不能给我拿一套试用版本,我先试试?
侯:可以呀。能为您和那些支持我们昆仑通态事业发展的朋友效劳,是我们的荣幸。
我的EMAIL:mcgslcb@263.net。如果您在试用过程中对我们的产品有任何意见或者建议,也请与我们联系。