ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:17.97KB ,
资源ID:2794173      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2794173.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于组态软件的驱动开发.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于组态软件的驱动开发.docx

1、基于组态软件的驱动开发基于组态软件的驱动开发摘要:组态是指用户通过类似“搭积木”的简单方式来完成自己所需要的软件功能,而组态软件就称为“二次开发平台”。驱动程序扮演沟通的角色,把硬件的功能告诉电脑系统,并且也将系统的指令传达给硬件,让它开始工作,系统不同,硬件的驱动程序也不同。组态软件是联系客户和硬件的桥梁,本文基于易控组态软件驱动开发过程中的问题,分析并讨论了基于组态软件的驱动开发的解决办法。关键字:组态软件 驱动开发1 组态软件随着自动化水平的迅速提高,计算机在各领域的广泛应用,人们对自动化的要求越来越高,种类繁多的控制设备和过程监控装置在各领域的应用,使得传统的控制软件已无法满足用户的各

2、种需求。在开发传统的控制软件时,当被控对象一旦有变动,就必须修改其控制系统的源程序,导致其开发周期长;已开发成功的控制软件又由于每个控制项目的不同而使其重复使用率很低,导致它的价格非常昂贵;在修改控制软件的源程序时,倘若原来的编程人员因工作变动而离去时,则必须同其他人员或新手进行源程序的修改,因而更是相当困难。通用组态软件的出现为解决上述实际问题,提供了一种崭新的方法,因为它能够很好地解决传统控制软件存在的种种问题,使用户能根据自己的控制对象和控制目的的任意组态,完成最终的自动化控制工程。2 驱动程序驱动程序即添加到系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备

3、进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。操作系统不同,硬件的驱动程序也不同。3 基于组态软件的驱动开发组态软件提供了很好的开发平台,使控制软件的开发变得简单,而且组态软件中也提供了一些常用设备的驱动程序,但是由于各种设备厂商没有统一的规范,支持的通讯协议各不相同,使得很多设备的驱动程序需要根据组态软件的不同单独开发。下面以易控组态软件为例介绍下基于组态软件的驱动开发解决办法。易控组态软件是一个较为成熟的平台,可用于工业控制,道路监控管理等。该软件提供了便捷的图形化编程工具,可以很快的上手开发自己需要的控制软件界面及功能。同时也提供了

4、相对简单的驱动程序软件开发包。该软件包使用Microsoft Visual Studio 2008为设备驱动程序默认开发IDE,这使得有一定编程基础的人员易于上手,开发的驱动稳定性也更高。3.1 驱动开发的概述在开发驱动程序前,我们先来了解下设备驱动程序的作用。设备驱动程序是上位机和设备沟通的桥梁,通过设备采集的数据经过转换后通过上位机的数据库接口存入数据库中,上位机发送的指令通过转化传达给设备执行。这中间的过程都是由驱动程序来完成的。根据通讯协议的不同,设备的驱动程序也有很大的区别,因此我们需要根据设备厂商提供的通讯协议和自己的功能需求开发适合自己的驱动程序。易控组态软件提供了很多和硬件通讯

5、的通道(如以太网、串口通道等),这使得开发驱动程序的过程简化了很多。我们只需根据通讯协议的不同编写相应的驱动代码即可。3.2 基于易控组态软件的驱动开发过程易控组态软件的驱动开发过程中,上位机与设备间通讯是以变量的方式实现的,即可以把设备的某一功能看做一个或者一组变量,用这些变量来实现这一功能。开发平台为驱动开发预留了3个较为有用的接口,一个是设备数据采集接口,设备变量设置接口和读写打包接口。下面根据这3个接口具体说明下驱动开发的过程和一些简单问题的解决办法。在拿到设备厂商提供的通讯协议后,我们应当先分析哪些指令是我们需要的,哪些功能指令可以省略,这样可以有效地减少开发周期。首先是设备变量采集

6、接口。设备数据采集过程,默认采集方式为变量包采集方式。打包的必要性和方法在读写打包接口处详细介绍。采集程序从bool ReadPacket(SampleTagPacket packet)方法进入,通过下图的过程将数据采集到上位机。这里的通信参数,采集指令,数据校验,数据解析一般是通过设备厂商提供的,读写通道由组态软件提供。我们通过对厂商提供的通讯协议的分析(包括包格式分析,指令结构,指令及回应信息长度)确定出请求指令,通过读写通道将指令发送给设备,再将设备返回的信息采集上来,通过校验和分析得到我们想要的有效数据。一般上位机与设备通信都是采用发包等待回应的方式,判断返回的数据是否是我们需要的就要

7、通过数据校验这一步,数据校验一般分为,数据包格式校验,长度校验,校验码校验,返回指令码校验,为确保数据的正确性一般要通过多个校验。当获得了正确的回应数据后,我们要讲数据进行分解,设备一般返回的是一串2进制码,各个位上的2进制码表示的意义由通讯协议指出,我们需要将这串2进制码依据通信协议解析成有用的数据。具体程序(附录1)。接下来是设备变量设置接口,设置接口实际就是将需要的参数写入设备。它与采集接口有很多相似的地方。它们都需要获得通信参数,形成指令,通过读写通道发送给设备,从设备获得回应信息。不同的是写入指令一般回应的数据都是设置成功与否,不需要做数据解析,而读指令回应的数据还包括需要解析的数据

8、。因此写指令的流程如下程序从bool WriteTag(IoTag tag)方法进入:具体程序(附录2)。最后是数据打包接口。为什么要将数据打包呢?这要从上位机与设备的通信来分析。要想获得设备的信息,或者是设定设备的某些参数,上位机就需要与设备间进行通信。随着科技的发展,计算机的处理速度越来越快,但是一些硬件设备的处理回应能力远远低于计算机的处理能力,这样在通信过程中就需要计算机等待设备的响应,也就是我们所说的延时。而这些延时是驱动程序耗时最多的一部分。怎么减少这些延时是一个驱动程序提高效率的关键。因此我们将需要的多个数据的采集指令打成一个包发给设备处理,回应的信息包含了多个我们需要的数据,我

9、们再将这些数据分解成我们想要的,这就是打包。这么做可以极大的提升驱动程序的效率,减少上位机与设备的通信次数。具体程序(附录3)。通过以上的3个接口,我们就能将大部分驱动开发完成。整个驱动的开发过程并不复杂,我们要做的就是将设备厂商提供的通信协议翻译成适合组态软件平台的驱动程序。4 结语驱动程序的开发与一般的应用程序开发有很大的不同。应用程序主要是给用户使用的,而驱动程序则是与设备打交道的。这就需要驱动程序有着更高更有效地处理能力。另外,驱动程序的可用性相对较差,一个设备针对不同的系统,需要不同的驱动程序。组态软件的出现,有效缓解了这个问题。组态软件解决了与硬件的通信问题,我们只需根据组态软件预

10、留的接口针对不同设备开发不同的驱动程序即可,而且这种驱动对用的不再是不同的系统,而是同一个组态软件,这就大大提高了程序的可用性。用户只要使用同一组态软件驱动程序即可通用。但这也有不足的地方,虽然现在的组态软件大多集成了很多常用的设备,但是很多设备的驱动还需要我们自己开发,而且各种组态软件为驱动程序预留的接口也不统一,这使得开发还具有一定的局限性,针对同一组态软件的通用性还不能替代真正的通用性。但这涉及到个设备厂商的利益问题,很难出现统一的驱动标准。所以基于不同组态软件的驱动开发还是现在相对比较统一的解决办法。附录1:/ <summary>/ 读一个变量包的数据/ </summ

11、ary>/ <param name=“packet”>读包</param>/ <returns>读包成功与否</returns>public override bool ReadPacket(SampleTagPacket packet)/根据包发送请求指令int receiveCount = SendAndReceive(packet.RegType);if (receiveCount = 0) return false; /回填IOtag return ParseIO(packet, receiveCount);/ <summar

12、y>/ 发送请求指令接收应答数据到mReceiveBuffer/ 共通函数基本不用修改/ </summary>/ <param name=“RegType”></param>/ <returns></returns>private int SendAndReceive(string RegType)int sendCount = FillReadFrame(RegType);/拼请求字preturn 0;return receiveCount;附录2:/ <summary>/ 写变量/ </summary>

13、;/ <param name=“tag”>要写的IO变量</param>/ <returns>写变量成功与否</returns>public override bool WriteTag(IoTag tag)int sendCount = FillWriteFrame(tag); /形成写指令if (sendCount <= 0)return true;const int toReceiveCount = 3;int receiveCount = WriteAndRead(sendCount, toReceiveCount); /读写通道i

14、f (!ValidateSetReceivedData(receiveCount, toReceiveCount) /数据校验return false;return true;附录3:/ <summary>/ 能否把当前变量添加到包中/ </summary>/ <param name=“packet”>要读取的包</param>/ <param name=“tag”>IoTag</param>/ <returns>能否添加</returns>protected override bool CanAddToPacket(SampleTagPacket packet, IoTag tag)/记录周期数据if (tag.RegType.ToString().Substring(0, 3) = “Cur” && packet.RegType.Substring(0, 3) = “Cur”)return true;/同种寄存器if (packet.RegType = tag.RegType)return true;return false;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2