CN105159748A - 一种基于windows底层驱动技术的硬件模拟方法 - Google Patents

一种基于windows底层驱动技术的硬件模拟方法 Download PDF

Info

Publication number
CN105159748A
CN105159748A CN201510555917.2A CN201510555917A CN105159748A CN 105159748 A CN105159748 A CN 105159748A CN 201510555917 A CN201510555917 A CN 201510555917A CN 105159748 A CN105159748 A CN 105159748A
Authority
CN
China
Prior art keywords
hardware
simulation
interface
bottom layer
sets
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510555917.2A
Other languages
English (en)
Other versions
CN105159748B (zh
Inventor
彭国庆
周斌
黄红英
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
HUNAN POWERISE INFORMATION TECHNOLOGY Co Ltd
Original Assignee
HUNAN POWERISE INFORMATION TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by HUNAN POWERISE INFORMATION TECHNOLOGY Co Ltd filed Critical HUNAN POWERISE INFORMATION TECHNOLOGY Co Ltd
Priority to CN201510555917.2A priority Critical patent/CN105159748B/zh
Publication of CN105159748A publication Critical patent/CN105159748A/zh
Application granted granted Critical
Publication of CN105159748B publication Critical patent/CN105159748B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于windows底层驱动技术的硬件模拟方法,基于数据接口特征归类法,建立统一的虚拟硬件模型,生成硬件模型池,利用windows底层驱动技术,动态虚拟硬件工作机制,模拟硬件启动、关闭、参数调整等实际应用环境,通过连续发送随机或固定样本数,实现硬件工作环境的仿真输出。本发明解决软件开发过程中的硬件设备采购价格昂贵、现场开发调试不便等问题。

Description

一种基于windows底层驱动技术的硬件模拟方法
技术领域
本发明涉及硬件模拟领域,尤其涉及一种基于windows底层驱动技术的硬件模拟方法。
背景技术
Windows底层驱动技术主要是基于windows操作系统提供的拓展,包括开发内核模式和用户模式驱动程序的模型,该模型提供Win32应用程序与内核模式驱动程序或其他操作系统组件之间的接口,支持创建面向对象、事件驱动的驱动程序,用户可以编写相关的代码,构建基于协议或基于串行总线的设备驱动程序,管理I/O、即插即用、内存、进程和线程、安全等,支持设备的可靠性、可服务性和基于特性的功能性。
目前,大部分数据采集软件开发调试的方法主要是通过采用生产现场的硬件设备进行数据采集,该方法存在着缺点,一是部分硬件设备价格昂贵,有损坏风险;二是数据采集需要占用生产时间,影响生产作业;三是数据采集过程需要专业人员配合。
发明内容
本发明的目的在于克服已有技术中的不足之处,提供一种基于Windows底层驱动技术的硬件模拟方法,适用于协议公开的硬件数据采集,模拟硬件的输入输出;不仅能够改变大部分通过采购硬件设备才能采集数据的现状,而且还能够在不影响生产作业的情况下完成模拟数据采集。
本发明提供一为实现上述目的,本发明提供的技术方案是:一种基于windows底层驱动技术的硬件模拟方法,包括以下步骤:
步骤1,收集硬件的相关特征信息,如功能参数、数据接口、通信协议等;
步骤2,基于数据接口特征归类法,建立通用的虚拟硬件模型;
步骤3,输入硬件相关特征信息,生成常用的硬件模型池;
步骤4,采用多接口并行仿真法,调用模型池中的硬件设备,仿真虚拟硬件的工作机制;
步骤5,生成标准的虚拟化硬件组件。
进一步地,步骤2的具体步骤为:
步骤A,按照硬件数据接口类型,建立以太网、串口、并口、USB等数据接口分类码;
步骤B,根据硬件接口分类码,建立统一的接口数据处理工作机制;
步骤C,组合硬件各类接口工作机制,建立硬件仿真内核;
步骤D,建立分类的硬件工作模型。
进一步地,多接口并行仿真法是基于windows底层驱动技术,采用多接口并行的仿真方法,组合各类接口同时工作的状态,模拟不同硬件的工作机制,生成不同厂家、不同规格的硬件产品的组件式插件,这种插件即是虚拟的硬件,可供软件开发人员直接调用。
上述技术方案中的一个技术方案具有如下优点或有益效果:基于windows底层驱动技术,适用于协议公开的硬件数据采集,模拟硬件的输入输出,采用多接口并行的仿真方法,组合各类接口同时工作的状态,模拟不同硬件的工作机制,生成不同厂家、不同规格的硬件产品的组件式插件,这种插件即是虚拟的硬件,可供软件开发人员直接调用,从而解决硬件设备采购价格昂贵、现场开发调试不便以及在不影响生产作业的情况下采集数据等问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明虚拟原理图;
图2为本发明虚拟流程示意图。
具体实施方式
下面将结合附图对本发明进行描述。
一种基于Windows底层驱动技术的硬件模拟方法,适用于协议公开的硬件数据采集,模拟硬件的输入输出;不仅能够改变大部分通过采购硬件设备才能采集数据的现状,而且还能够在不影响生产作业的情况下完成模拟数据采集。如图1所示,通过建立虚拟硬件模型,模拟环境,利用底层驱动,仿真虚拟硬件的工作机制,开发环境。
如图2所示,一种基于windows底层驱动技术的硬件模拟方法,具体包括以下步骤:
步骤1,收集硬件的相关特征信息:如功能参数、数据接口、通信协议等;
步骤2,基于数据接口特征归类法,建立通用的虚拟硬件模型,具体步骤为:
步骤A,按照硬件数据接口类型,建立以太网、串口、并口、USB等数据接口分类码;
步骤B,根据硬件接口分类码,建立统一的接口数据处理工作机制;
步骤C,组合硬件各类接口工作机制,建立硬件仿真内核;
步骤D,建立分类的硬件工作模型。
步骤3,输入硬件相关特征信息,生成常用的硬件模型池;
步骤4,采用多接口并行仿真法,调用模型池中的硬件设备,仿真虚拟硬件的工作机制;
步骤5,生成标准的虚拟化硬件组件。
基于windows底层驱动技术,采用多接口并行的仿真方法,组合各类接口同时工作的状态,模拟不同硬件的工作机制,生成不同厂家、不同规格的硬件产品的组件式插件,这种插件即是虚拟的硬件,可供软件开发人员直接调用,从而解决硬件设备采购价格昂贵、现场开发调试不便以及在不影响生产作业的情况下采集数据等问题。
下面对硬件驱动原理进行说明。
一种基于windows底层驱动技术的硬件模拟方法就是利用Windows底层驱动技术,自主设计了一种数据接口特征归类方法,建立了统一的虚拟硬件模型,生成硬件模型池,动态虚拟硬件工作机制,模拟硬件启动、关闭、参数调整等实际应用环境,通过连续发送随机或固定样本数,实现硬件工作环境的仿真输出。
下面列出特色代码以供参考。
NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,
INPUNICODE_STRINGRegistryPath)
{
NTSTATUSstatus=CreateDevices(DriverObject,RegistryPath);
if(status==STATUS_SUCCESS)
{
::DriverObject=DriverObject;
DriverObject->MajorFunction[IRP_MJ_CREATE]=SERPOOLOpen;
DriverObject->MajorFunction[IRP_MJ_CLOSE]=SERPOOLClose;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=SERPOOLIoControl;
DriverObject->MajorFunction[IRP_MJ_READ]=SERPOOLRead;
DriverObject->MajorFunction[IRP_MJ_WRITE]=SERPOOLWrite;
DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS]=
SERPOOLFlush;
DriverObject->MajorFunction[IRP_MJ_CLEANUP]=
SERPOOLCleanup;
DriverObject->DriverUnload=SERPOOLUnload;
status=STATUS_SUCCESS;
listAttached=
new(NonPagedPool)CDBLinkedList<CAttachedDevice>;
}
return(status);
}
NTSTATUSCreateDevices(INPDRIVER_OBJECTDriverObject,
PUNICODE_STRINGRegistryPath)
{
NTSTATUSstatus;
CUString*usName;
CUString*usLinkName;
usName=new(PagedPool)CUString(L"\\Device\\SERPOOL");
if(!OK_ALLOCATED(usName))
returnSTATUS_NO_MEMORY;
status=IoCreateDevice(DriverObject,sizeof(CSERPOOLDevice*),
&usName->m_String,FILE_DEVICE_UNKNOWN,0,
FALSE,&deviceObject);
if(!NT_SUCCESS(status))
{
deleteusName;
returnstatus;
}
deviceObject->Flags|=DO_BUFFERED_IO;
deviceObject->DeviceExtension=new(NonPagedPool)CSERPOOLDevice;
usLinkName=new(PagedPool)CUString(L"\\??\\SERPOOL");
if(!OK_ALLOCATED(usLinkName))
{
IoDeleteDevice(deviceObject);
returnSTATUS_NO_MEMORY;
}
status=IoCreateSymbolicLink(&usLinkName->m_String,
&usName->m_String);
if(!NT_SUCCESS(status))
{
IoDeleteDevice(deviceObject);
returnstatus;
}
deleteusLinkName;
deleteusName;
returnstatus;
}
VOIDSERPOOLUnload(INPDRIVER_OBJECTDriverObject)
{
delete(deviceObject->DeviceExtension);
IoDeleteDevice(deviceObject);
CUString*usLinkName=new(PagedPool)CUString(L"\\??\\SERPOOL");
IoDeleteSymbolicLink(&usLinkName->m_String);
deleteusLinkName;
deletelistAttached;//thiswillkillallattacheddevices
return;
}
下面通过具体实施例对本发明做进一步说明。
(1)以模拟光谱仪SparkM10为例
SparkM10光谱仪是德国斯派克分析仪器公司生产的直读光谱仪,主要用于压铸、熔铸、钢铁或有色金属、汽车、机械制造等行业的炉前金属分析和材料检验,每台价格在150万元左右,价格昂贵,开发调试过程不适合直接在设备上面进行操作,因此模拟一台SparkM10光谱仪尤为重要。一种基于windows底层驱动技术的硬件模拟方法,可以完美地模拟出来,可以成功模拟串口输出,模拟斯派克专有的Spectro4.4DataCommunicationProtocol成功与上位机进行实时通讯,可随意调整分析、检测金属的元素值,实现模拟光谱仪的金属成分分析和材料的检验功能。
具体的操作步骤如下:
步骤1,收集光谱仪特征信息,采集光谱仪的Network(网络)和RS232(串口)接口类型。
步骤2,基于数据接口特征归类法,建立通用的虚拟硬件模型;
具体步骤为:步骤A,按照硬件数据Network(网络)和RS232接口类型,建立串口数据接口分类码,在虚拟硬件模型中定义了的接口分类码,特色代码如下:
///<summary>
///设备接口分类(决定使用哪个模拟硬件框架)
///</summary>
publicenumDEVICE_TYPE:byte
{
[Description("串口通讯类设备")]
Serial_Port_Communicate=0xD0,
[Description("USB通讯类设备")]
USB_Communicate=0xD1,
[Description("TCP服务通讯类设备")]
TCP_Server_Communicate=0xD2,
[Description("TCP客户端通讯类设备")]
TCP_Client_Communicate=0xD3,
[Description("并口通讯类设备")]
Parallel_Port_Communicate=0xD4,
[Description("串口服务器类通讯设备")]
Serial_Port_Server_Communicate=0xD5,
[Description("厂家自定义接口通讯类设备")]
Manufacturer_Custom_Communicate=0xDF,
[Description("硬件管理平台")]
Hardware_Manager_Platform=0xF0,
}
在实际进行光谱打样操作中,需要将同一批产品的1个以上的样本分别做样,然后再对同一批产品的不同的样品综合进行加权平均。一般情况下所有的光谱样品分析结果不能直接传输给多个信息接收点(因为是未进行二次处理的数据),所以在进行光谱仪模拟中,重点考虑点对点的RS232接口,一点对多点的Network接口除非特殊情况,一般不建议使用。
因此,选择上述接口的分类代码时,着重选择RS232接口分类代码进行该类硬件模拟。
步骤B,根据硬件RS232接口分类码,建立统一的RS232接口数据处理工作机制;
根据上述所选择的RS232接口分类代码,虚拟硬件模型将进行下列准备工作:
1、根据接口分类代码,加载对应的VirtualPort(win2kddksample)总线驱动程序:VPBusEnum.sys。
2、根据虚拟模拟硬件的事先配置,为光谱仪虚拟设备建立虚拟串口(COM2)。
3、光谱仪虚拟设备所有的分析结果通过内部总线驱动发送对应的虚拟串口(COM2)。
4、客户端通过虚拟串口(COM2)接收虚拟光谱设备的分析结果。
步骤C,组合硬件各类接口工作机制,建立硬件仿真内核;
1、安装VirtualPort(win2kddksample)总线驱动程序:VPBusEnum.sys。
2、根据虚拟模拟硬件的事先配置,建立光谱仪设备输出虚拟串口。在WINDOWS设备管理器->端口下所建立的COM2,客户端通过COM2进行数据采集。
3、部分特色代码如下:
NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,INPUNICODE_STRINGRegistryPath)
{
Status=IoCreateDevice(DriverObject,sizeof(SERIAL_DEVICE_EXTENSION),&uniNameString,FILE_DEVICE_SERIAL_PORT,0,TRUE,&deviceObject);
InitializeListHead(&extension->ReadQueue);
InitializeListHead(…);
…;
KeInitializeDpc(&extension->CompleteReadDpc,SerailCompleteRead,extension);
KeInitializeDpc(…);
SerialSetupExternalNaming(extension);
returnStatus;
}
NTSTATUSSerialRead(INPDEVICE_OBJECTDeviceObject,INPIRPIrp)
{
stack=IoGetCurrentIrpStackLocation(Irp);
ReadLen=stack->Parameters.Read.Length;
if(Extension->InCounter>0)
{KeAcquireSpinLock(&Extension->ReadBufferLock,&lIrql);
FirstRead=(ReadLen>Extension->InCounter)?Extension->InCounter:ReadLen;
RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,Extension->pInBuffer,FirstRead);
Extension->InCounter-=FirstRead;
ReadLen-=FirstRead;
KeReleaseSpinLock(&Extension->
ReadBufferLock,lIrql);//释放锁
}
if(0==ReadLen)
{
status=STATUS_SUCCESS;
Irp->IoStatus.Status=status;
Irp->IoStatus.Information=FirstRead;
IoCompleteRequest(Irp,0);
returnstatus;
}
IoMarkIrpPending(Irp);
InsertWaitList(Extension->ReadQueue,Irp);
status=TdiSendAsync(Extension->ComChannel,pAckPacket,PacketLen(pAckPacket),(PVOID)ReadAckComplete,Irp);
returnSTATUS_PENDING;
}
VoidCompleteReadIrp(INPSERIAL_DEVICE_EXTENSIONextension,INPIRPIrp,INPUCHARpInData,INULONGLength)
{
ReadLen=(ReadLen>Length)?Length:ReadLen;
if(ReadLen!=0)
{
RtlCopyMemory(pReadAsync->
pReadBuffer,pInData,ReadLen);
pReadAsync->pReadBuffer+=ReadLen;
pReadAsync->ReadAlready+=ReadLen;
extension->PerfStats.ReceivedCount+=
ReadLen;
}
else
{
pReadAsync->TotalNeedRead=
pReadAsync->ReadAlready;
}
if(pReadAsync->TotalNeedRead==pReadAsync->ReadAlready)
{
EndReadIrp(Irp);
}
}
步骤D,建立光谱仪硬件工作模型。
1、创建虚拟光谱仪虚拟接口(COM2)。
2、加载光谱仪特有的通讯协议处理插件(根据光谱仪通讯协议定制专用的数据传输处理插件)。
3、通过软件人机界面接口编辑光谱分析结果(或加载事先编辑好的分析结果),将数据传输到对应的COM2,可在虚拟人机界面看到相关的运行数据。
(2)以梅特勒-托利多车辆衡为例
梅特勒-托利多车辆衡已经广泛应用于高速公路、港口、仓储、工厂、货场,但设备体积庞大、价格较高。在开发调试过程中,直接调用该类设备比较困难,而且现场环境恶劣,因此,模拟这类车辆衡具有重要的应用价值。
一种基于windows底层驱动技术的硬件模拟方法,可实时模拟网络、串口二种输出方式,灵活配置模拟称重传感器的各类参数,实现不同车辆过磅业务的数据采集。
本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。以上所述仅是本发明的优选实施方式,应当指出,由于文字表达的有限性,而客观上存在无限的具体结构,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进、润饰或变化,也可以将上述技术特征以适当的方式进行组合;这些改进润饰、变化或组合,或未经改进将发明的构思和技术方案直接应用于其它场合的,均应视为本发明的保护范围。

Claims (3)

1.一种基于windows底层驱动技术的硬件模拟方法,其特征在于,包括以下步骤:
步骤1:收集硬件的相关特征信息;
步骤2:基于数据接口特征归类法,建立通用的虚拟硬件模型;
步骤3:输入硬件相关特征信息,生成常用的硬件模型池;
步骤4:采用多接口并行仿真法,调用模型池中的硬件设备,仿真虚拟硬件的工作机制;
步骤5:生成标准的虚拟化硬件组件。
2.根据权利要求1所述的基于windows底层驱动技术的硬件模拟方法,其特征在于,步骤2的具体步骤为:
步骤A:按照硬件数据接口类型,建立以太网、串口、并口、USB数据接口分类码;
步骤B:根据硬件接口分类码,建立统一的接口数据处理工作机制;
步骤C:组合硬件各类接口工作机制,建立硬件仿真内核;
步骤D:建立分类的硬件工作模型。
3.根据权利要求1所述的基于windows底层驱动技术的硬件模拟方法,其特征在于,多接口并行仿真法是基于windows底层驱动技术,采用多接口并行的仿真方法,组合各类接口同时工作的状态,模拟不同硬件的工作机制,生成不同厂家、不同规格的硬件产品的组件式插件。
CN201510555917.2A 2015-09-02 2015-09-02 一种基于windows底层驱动技术的硬件模拟方法 Active CN105159748B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510555917.2A CN105159748B (zh) 2015-09-02 2015-09-02 一种基于windows底层驱动技术的硬件模拟方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510555917.2A CN105159748B (zh) 2015-09-02 2015-09-02 一种基于windows底层驱动技术的硬件模拟方法

Publications (2)

Publication Number Publication Date
CN105159748A true CN105159748A (zh) 2015-12-16
CN105159748B CN105159748B (zh) 2018-06-19

Family

ID=54800612

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510555917.2A Active CN105159748B (zh) 2015-09-02 2015-09-02 一种基于windows底层驱动技术的硬件模拟方法

Country Status (1)

Country Link
CN (1) CN105159748B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103873711A (zh) * 2014-03-14 2014-06-18 厦门亿联网络技术股份有限公司 基于voip话机的虚拟usb声卡创建方法
CN103970582A (zh) * 2013-01-28 2014-08-06 联想(北京)有限公司 Usb设备模拟方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103970582A (zh) * 2013-01-28 2014-08-06 联想(北京)有限公司 Usb设备模拟方法
CN103873711A (zh) * 2014-03-14 2014-06-18 厦门亿联网络技术股份有限公司 基于voip话机的虚拟usb声卡创建方法

Also Published As

Publication number Publication date
CN105159748B (zh) 2018-06-19

Similar Documents

Publication Publication Date Title
Jaxa-Rozen et al. Pynetlogo: Linking netlogo with python
DE112011103411B4 (de) Einheitenemulation in einer virtualisierten Datenverarbeitungsumgebung
Vince et al. IoT Implementation in Remote Measuring Laboratory VMLab Analyses.
CN103995777A (zh) 嵌入式软件黑盒自动化测试系统及测试方法
US20170277614A1 (en) Intelligent test robot system
Werner et al. Software-in-the-loop simulation of embedded control applications based on virtual platforms
CN107283423A (zh) 智能型测试机器人系统
CN105159748A (zh) 一种基于windows底层驱动技术的硬件模拟方法
Pike 81⁄ 2, the Plan 9 Window System
Elangovan et al. Monitoring of Workplace Safety Using IoT
CN104569650B (zh) 一种基于信号的仪器驱动实现方法
Jia et al. OPSDN: an enhanced SDN simulation framework for OPNET Modeler
Silva et al. A Linux microkernel based architecture for OPENCV in the Raspberry Pi device
CN100373387C (zh) 一种芯片仿真平台中的数据处理方法及系统
Soundararajan et al. Design patterns for real-time distributed control system benchmarking
CN103544863A (zh) 轨道交通综合监控培训仿真系统数据交互模块及工作方法
Huang et al. A www-based virtual instrument software for electric power measurement with java enhancement
KR102644952B1 (ko) 도면 적합성 체크 및 표준도면 분류 시스템
CN116011164A (zh) 一种智能物联终端仿真平台的实现方法
Cseh et al. Integrating EDICAM into the MARTe framework
Song et al. A novel distributed architecture for building Web-enabled remote robotic laboratories
WO2023115397A1 (zh) 生成自动化脚本的方法和装置
Wei Research on Automatic Test Technology of Embedded System Based on Cloud Platform
Yang et al. An Edge Computing System for Fast Image Recognition Based on Convolutional Neural Network and Petri Net Model
Tang et al. Real-Time Motion Control of a Spark Robot Using the Robot Operating System and MATLAB

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant