首页 / 专利库 / 软件 / 虚拟层 / 一种基于windows底层驱动技术的硬件模拟方法

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

阅读:827发布:2024-02-28

专利汇可以提供一种基于windows底层驱动技术的硬件模拟方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于windows底层驱动技术的 硬件 模拟方法,基于数据 接口 特征归类法,建立统一的虚拟硬件模型,生成硬件模型池,利用windows底层驱动技术,动态虚拟硬件工作机制,模拟硬件启动、关闭、参数调整等实际应用环境,通过连续发送随机或固定样本数,实现硬件工作环境的仿真输出。本发明解决 软件 开发过程中的硬件设备采购价格昂贵、现场开发调试不便等问题。,下面是一种基于windows底层驱动技术的硬件模拟方法专利的具体信息内容。

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

说明书全文

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

技术领域

[0001] 本发明涉及硬件模拟领域,尤其涉及一种基于windows底层驱动技术的硬件模拟方法。

背景技术

[0002] Windows底层驱动技术主要是基于windows操作系统提供的拓展,包括开发内核模式和用户模式驱动程序的模型,该模型提供 Win32 应用程序与内核模式驱动程序或其他操作系统组件之间的接口,支持创建面向对象、事件驱动的驱动程序,用户可以编写相关的代码,构建基于协议或基于串行总线的设备驱动程序,管理 I/O、即插即用、内存、进程和线程、安全等,支持设备的可靠性、可服务性和基于特性的功能性。
[0003] 目前,大部分数据采集软件开发调试的方法主要是通过采用生产现场的硬件设备进行数据采集,该方法存在着缺点,一是部分硬件设备价格昂贵,有损坏险;二是数据采集需要占用生产时间,影响生产作业;三是数据采集过程需要专业人员配合。

发明内容

[0004] 本发明的目的在于克服已有技术中的不足之处,提供一种基于Windows底层驱动技术的硬件模拟方法,适用于协议公开的硬件数据采集,模拟硬件的输入输出;不仅能够改变大部分通过采购硬件设备才能采集数据的现状,而且还能够在不影响生产作业的情况下完成模拟数据采集。
[0005] 本发明提供一为实现上述目的,本发明提供的技术方案是:一种基于windows底层驱动技术的硬件模拟方法,包括以下步骤:步骤1,收集硬件的相关特征信息,如功能参数、数据接口、通信协议等;
步骤2,基于数据接口特征归类法,建立通用的虚拟硬件模型;
步骤3,输入硬件相关特征信息,生成常用的硬件模型池;
步骤4,采用多接口并行仿真法,调用模型池中的硬件设备,仿真虚拟硬件的工作机制;
步骤5,生成标准的虚拟化硬件组件。
[0006] 进一步地,步骤2的具体步骤为:步骤A,按照硬件数据接口类型,建立以太网、串口、并口、USB等数据接口分类码;
步骤B,根据硬件接口分类码,建立统一的接口数据处理工作机制;
步骤C,组合硬件各类接口工作机制,建立硬件仿真内核;
步骤D,建立分类的硬件工作模型。
[0007] 进一步地,多接口并行仿真法是基于windows底层驱动技术,采用多接口并行的仿真方法,组合各类接口同时工作的状态,模拟不同硬件的工作机制,生成不同厂家、不同规格的硬件产品的组件式插件,这种插件即是虚拟的硬件,可供软件开发人员直接调用。
[0008] 上述技术方案中的一个技术方案具有如下优点或有益效果:基于windows底层驱动技术,适用于协议公开的硬件数据采集,模拟硬件的输入输出,采用多接口并行的仿真方法,组合各类接口同时工作的状态,模拟不同硬件的工作机制,生成不同厂家、不同规格的硬件产品的组件式插件,这种插件即是虚拟的硬件,可供软件开发人员直接调用,从而解决硬件设备采购价格昂贵、现场开发调试不便以及在不影响生产作业的情况下采集数据等问题。附图说明
[0009] 为了更清楚地说明本发明实施例现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0010] 图1为本发明虚拟原理图;图2为本发明虚拟流程示意图。

具体实施方式

[0011] 下面将结合附图对本发明进行描述。
[0012] 一种基于Windows底层驱动技术的硬件模拟方法,适用于协议公开的硬件数据采集,模拟硬件的输入输出;不仅能够改变大部分通过采购硬件设备才能采集数据的现状,而且还能够在不影响生产作业的情况下完成模拟数据采集。如图1所示,通过建立虚拟硬件模型,模拟环境,利用底层驱动,仿真虚拟硬件的工作机制,开发环境。
[0013] 如图2所示,一种基于windows底层驱动技术的硬件模拟方法,具体包括以下步骤:步骤1,收集硬件的相关特征信息:如功能参数、数据接口、通信协议等;
步骤2,基于数据接口特征归类法,建立通用的虚拟硬件模型,具体步骤为:
步骤A,按照硬件数据接口类型,建立以太网、串口、并口、USB等数据接口分类码;
步骤B,根据硬件接口分类码,建立统一的接口数据处理工作机制;
步骤C,组合硬件各类接口工作机制,建立硬件仿真内核;
步骤D,建立分类的硬件工作模型。
[0014] 步骤3,输入硬件相关特征信息,生成常用的硬件模型池;步骤4,采用多接口并行仿真法,调用模型池中的硬件设备,仿真虚拟硬件的工作机制;
步骤5,生成标准的虚拟化硬件组件。
[0015] 基于windows底层驱动技术,采用多接口并行的仿真方法,组合各类接口同时工作的状态,模拟不同硬件的工作机制,生成不同厂家、不同规格的硬件产品的组件式插件,这种插件即是虚拟的硬件,可供软件开发人员直接调用,从而解决硬件设备采购价格昂贵、现场开发调试不便以及在不影响生产作业的情况下采集数据等问题。
[0016] 下面对硬件驱动原理进行说明。
[0017] 一种基于windows底层驱动技术的硬件模拟方法就是利用Windows底层驱动技术,自主设计了一种数据接口特征归类方法,建立了统一的虚拟硬件模型,生成硬件模型池,动态虚拟硬件工作机制,模拟硬件启动、关闭、参数调整等实际应用环境,通过连续发送随机或固定样本数,实现硬件工作环境的仿真输出。
[0018] 下面列出特色代码以供参考。
[0019] NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
NTSTATUS status = 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;
}
return(status);
}
NTSTATUS CreateDevices(IN PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath)
{
NTSTATUS status;
CUString *usName;
CUString *usLinkName;
usName = new(PagedPool) CUString(L"\\Device\\SERPOOL");
if (!OK_ALLOCATED(usName))
return STATUS_NO_MEMORY;
status = IoCreateDevice(DriverObject,sizeof(CSERPOOLDevice *),
&usName->m_String,FILE_DEVICE_UNKNOWN,0,
FALSE,&deviceObject);
if (!NT_SUCCESS(status))
{
delete usName;
return status;
}
deviceObject->Flags |= DO_BUFFERED_IO;
deviceObject->DeviceExtension=new (NonPagedPool)CSERPOOLDevice;
usLinkName= new (PagedPool)CUString(L"\\??\\SERPOOL");
if (!OK_ALLOCATED(usLinkName))
{
IoDeleteDevice(deviceObject);
return STATUS_NO_MEMORY;
}
status = IoCreateSymbolicLink (&usLinkName->m_String,
&usName->m_String);
if (!NT_SUCCESS(status))
{
IoDeleteDevice(deviceObject);
return status;
}
delete usLinkName;
delete usName;
return status;
}
VOID SERPOOLUnload(IN PDRIVER_OBJECT DriverObject)
{
delete (deviceObject->DeviceExtension);
IoDeleteDevice(deviceObject);
CUString *usLinkName= new (PagedPool)CUString(L"\\??\\SERPOOL");
IoDeleteSymbolicLink(&usLinkName->m_String);
delete usLinkName;
delete listAttached; // this will kill all attached devices
return;
}
下面通过具体实施例对本发明做进一步说明。
[0020] (1)以模拟光谱仪Spark M10为例Spark M10光谱仪是德国斯派克分析仪器公司生产的直读光谱仪,主要用于压铸、熔铸、或有色金属、汽车、机械制造等行业的炉前金属分析和材料检验,每台价格在150万元左右,价格昂贵,开发调试过程不适合直接在设备上面进行操作,因此模拟一台Spark M10光谱仪尤为重要。一种基于windows底层驱动技术的硬件模拟方法,可以完美地模拟出来,可以成功模拟串口输出,模拟斯派克专有的Spectro 4.4 Data Communication Protocol成功与上位机进行实时通讯,可随意调整分析、检测金属的元素值,实现模拟光谱仪的金属成分分析和材料的检验功能。
[0021] 具体的操作步骤如下:步骤1,收集光谱仪特征信息,采集光谱仪的Network(网络)和RS232(串口)接口类型。
[0022] 步骤2,基于数据接口特征归类法,建立通用的虚拟硬件模型;具体步骤为:步骤A,按照硬件数据Network(网络)和RS232接口类型,建立串口数据接口分类码,在虚拟硬件模型中定义了的接口分类码,特色代码如下:
///
/// 设备接口分类(决定使用哪个模拟硬件框架
///

public enum DEVICE_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接口除非特殊情况,一般不建议使用。
[0023] 因此,选择上述接口的分类代码时,着重选择RS232接口分类代码进行该类硬件模拟。
[0024] 步骤B,根据硬件RS232接口分类码,建立统一的RS232接口数据处理工作机制;根据上述所选择的RS232接口分类代码,虚拟硬件模型将进行下列准备工作:
1、根据接口分类代码,加载对应的Virtual Port( win2k ddk sample)总线驱动程序:
VPBusEnum.sys。
[0025] 2、根据虚拟模拟硬件的事先配置,为光谱仪虚拟设备建立虚拟串口(COM2)。
[0026] 3、光谱仪虚拟设备所有的分析结果通过内部总线驱动发送对应的虚拟串口(COM2)。
[0027] 4、客户端通过虚拟串口(COM2)接收虚拟光谱设备的分析结果。
[0028] 步骤C,组合硬件各类接口工作机制,建立硬件仿真内核;1、安装Virtual Port( win2k ddk sample)总线驱动程序:VPBusEnum.sys。
[0029] 2、根据虚拟模拟硬件的事先配置,建立光谱仪设备输出虚拟串口。在WINDOWS设备管理器->端口下所建立的COM2,客户端通过COM2进行数据采集。
[0030] 3、部分特色代码如下:NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
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);
return Status;
}
NTSTATUS SerialRead(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp){
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);
return status;
}
IoMarkIrpPending(Irp);
InsertWaitList(Extension->ReadQueue,Irp);
status = TdiSendAsync(Extension->ComChannel,pAckPacket,PacketLen(pAckPacket),(PVOID)ReadAckComplete,Irp);
return STATUS_PENDING;
}
Void CompleteReadIrp(IN PSERIAL_DEVICE_EXTENSION extension,IN PIRP Irp,IN PUCHAR pInData,IN ULONG Length )
{
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,建立光谱仪硬件工作模型。
[0031] 1、创建虚拟光谱仪虚拟接口(COM2)。
[0032] 2、加载光谱仪特有的通讯协议处理插件(根据光谱仪通讯协议定制专用的数据传输处理插件)。
[0033] 3、通过软件人机界面接口编辑光谱分析结果(或加载事先编辑好的分析结果),将数据传输到对应的COM2,可在虚拟人机界面看到相关的运行数据。
[0034] (2)以梅特勒-托利多车辆衡为例梅特勒-托利多车辆衡已经广泛应用于高速公路、港口、仓储、工厂、货场,但设备体积庞大、价格较高。在开发调试过程中,直接调用该类设备比较困难,而且现场环境恶劣,因此,模拟这类车辆衡具有重要的应用价值。
[0035] 一种基于windows底层驱动技术的硬件模拟方法,可实时模拟网络、串口二种输出方式,灵活配置模拟称重传感器的各类参数,实现不同车辆过磅业务的数据采集。
[0036] 本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。以上所述仅是本发明的优选实施方式,应当指出,由于文字表达的有限性,而客观上存在无限的具体结构,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进、润饰或变化,也可以将上述技术特征以适当的方式进行组合;这些改进润饰、变化或组合,或未经改进将发明的构思和技术方案直接应用于其它场合的,均应视为本发明的保护范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈