最多人玩的棋牌游戏

WDM驱动程序虚拟仪表串口通讯

类别:最多人玩的棋牌游戏资讯 时间:2018-03-20 最多人玩的棋牌游戏:64 次

本文介绍通过WDM驱动程序,模拟仪表串口通讯,解决称重软件编程过 程中的通讯测试问题。通过虚拟串口驱动程序,模拟硬件发送数据,来达到替代仪表发送数 据的目的,方便称重软件测试。
称重软件编写的过程中,会涉及到各种仪 表的通讯。为了检验仪表和上位机通讯是否正常, 常用的方法有两种:一种是用各种仪表做实际测 试。市场上常见的仪表有上百种,很难都齐备。 第二种方法是计算机需要两个串口,从一个串口 模拟仪表数据,发向另一个串口,两个串口之间 通过交叉的RS232通讯线相连。
这两种方法都有不完美的地方:第一种方法, 需要购买各种仪表测试,通讯模式如图1所示。

第二种方法,如果遇到计算机上只有一个串 口,或没有串口时,就比较麻烦,需要通过USB 转换成串口。通讯模式如图2所示:

本文介绍的方法不同于以上两种,可以解决 上述的问题,缩短开发时间。就是采用WDM虚拟 驱动程序来代替真实的仪表串口,发送指定的重 量数据,到这个虚拟串口中,称重软件可以像读 取物理串口一样,从这个虚拟串口读取称重数据。
即使电脑上没有串口,也不影响称重软件的通讯 测试,模式如图3所示:

首先,介绍一下虚拟串口驱动程序。无论是 真实的串口驱动,还是虚拟串口驱动,只要遵循 一组事先由微软定义的接口,Windows就认为这是 一个串口设备。这里所指的接口就是应用程序发 的IO控制码和读写命令。只要在驱动中对这些 IRP编写相应的派遣函数,就能实现一个串口驱 动。在编与驱动前,需要从微软网站上下DDK, 即驱动开发包。以及安装VC++编译器,并在VC 中设置好工作路径。
关于IO控制码和相应的数据结构都定义在 ntddser.h文件中。主要的控制码有:
在驱动的入口函数中,需要编写IRP的处理 函数:
extern "C" NTSTATUS DriverEntry(IN PDRIV- ER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath)
{
pDriverObject- >DriverExtension- >AddDevice= COMWDMAddDevice;//添加设备函数
pDriverObject- >MajorFunction[IRP_MJ_PNP]= COMWDMPnp;//即插即用处理函数
pDriverObject- >MajorFunction [ IRP—MJ—DE VICE_CONTROL]=COMWDMDispatchControlp;//IO 控制码处理函数
pDriverObject- >MajorFunction [ IRP—MJ—CRE ATE]=COMWDMCreate;//创建打开串口设备函数 pDriverObject- >MajorFunction PRP—MJ—CLOSE] =COMWDMClose;// 关闭串 口设备
pDriverObject- >MajorFunction PRP—MJ—READ] =COMWDMRead;// 读串 口设备
pDriverObject- >MajorFunction PRP—MJ—WRITE] =COMWDMWrite;// 写串 口设备
pDriverObject- >DriverUnload=COMWDMUnload; //卸载串口设备
return STATUS—SUCCESS;
}
Windows驱动程序采用的是分层结构。驱动程序 安装后,会附加到设备堆栈中,成为其中的一个层。 应用程序用户模式的请求转化成IRP进入ringO 层内核模式,会被用户编写的驱动程序截获,驱 动程序再调用相应的派遣函数完成硬件操作。如在 Win32 中调用 ReadFile()时会产生 IRP—MJ—READ 消息,调用WriteFile时产生IRP—MJ—WRITE消息。 驱动程序根据上述IRP,调用相应的自定义函数 COMWDMRead, COMWDMWrite 读、写串口。本文 限于篇幅,不详细列出代码,有兴趣的读者可以在网 上或一些参考书中找到相应的源代码。笔者主要想说 明虚拟串口驱动在称重软件中的测试应用。驱动程序 工作过程如图4所示。

BOAST—Device串口驱动程序,主要功能是将 接收到的数据,转移到发送缓冲区中,IRP在本层 返回,不向下传递。模拟真实设备的读写过程。 重点是实现COMWDMRead,COMWDMRead这两派遣函数。因为不读写真实的串口设备,所以 计算机上即使没有串口,也没有关系。
程序编译后,名为Comsys,在控制面中,通 过添加硬件设备,安装这个驱动程序,然后在设 备管理器中,将会看到一个虚拟设备BOAST-De-vice, 串口号是 COM3,如图5所示。

打开BOASTSerialTool3.6串口调试工具,如图 6所示。

用 BoastSerialToolver3,6 串口调试工具,向 COM3 口发送数据。Comsys虚拟驱动程序将接收到的COM3输入缓冲区中的数据,返回到COM3 COM3端口,利用Win32的ReadFile函数,可读 的输出缓冲区中,此时在称重软件中,打开这个 出其中的数据如图7所示。

图6是在串口调试工具中,向COM3写入02 2b 37 32 36 34 35 36 30 31 45 03 (十六进制 数据,通讯参数9600,n,8,]l ,这是XK3190A9仪 表的串口通讯数据格式。然后在BOAST2009称重 软件中(图7 ,打开COM3 (通讯参数9600,n, 8,j)按A9仪表协议读出重量为726456。因为读 写的是虚拟串口设备,所以几个Win32应用程序同 时打开COM3 口,不会产生冲突。
笔者在称重软件开发的过程中,经常需要对各种仪表的通讯协议进行测试,以保证软件的兼 容性。笔者的笔记本电脑本身没有串口,一时之 间又找不到USB转串口线,所以想出这样一个变 通的方法,解决燃眉之急。有时可以辅助解决一 些问题。
 
 
 

中国领先的称重软件技术提供商

The Leading Provider of Geomatic Solutions in China

展开收起网站地图
网投棋牌网址捕鱼王游戏在线网投香港刘伯温平特一码澳门网上买球网址开户香港挂牌最多人玩的棋牌游戏最快更新网站手机版面对面棋牌游戏大厅下载一尾中平特公式规律澳门网上娱乐在线游戏网站