CAN通信程序的设计需要充分利用双CAN构建的环形通信网络,实现正常情况下的高效、快速的数据通信,以及实现故障情况下的及时、准确的故障性质确定和故障定位。CAN通信数据包的分帧情况见表11-7。......
2023-11-22
1.系统功能
CAN智能网络通信适配器主要是用来承担上位计算机和CAN智能测控节点等下位机之间的数据交互任务的。当现场有数据要送到监控PC时,智能网络通信适配器负责接收来自现场的数据信息,并立即转发给PC进行监视和处理;当PC有监控命令、输出信息或组态参数需要传送至下位机时,智能网络适配器也要实现转发功能,及时地将PC的数据发送至CAN网络,并由目标下位机接收,以控制相应下位机单元的动作。
2.硬件结构和工作过程
基于PCI总线的CAN智能网络通信适配器硬件结构如图4-41所示。适配器主要由CAN总线驱动器PCA82C250、CAN通信控制器SJA1000、INTEL80C88CPU、译码电路EPM7064和E2PROM以及与PC相连接的PCI控制器CY7C09449PV等构成。板内INTEL80C88内部的监控程序控制CAN总线的接收、发送及数据处理,并通过内含双口RAM的PCI控制器CY7C09449PV与PC进行通信,实现下位机智能测控节点与上位PC的数据交换。
PC一侧采用的PCI接口芯片是Cypress公司生产的半导体PCI-DP系列的PCI接口控制器CY7C09449,其主要特点上文已有叙述。本设计中通过对其内置的128kbit的双端口SRAM的访问实现PC与INTEL80C88的数据交互。
INTEL80C88CPU一侧负责实现与CAN总线网络的通信。CAN通信控制器选用Philips 公司生产的能支持CAN 2.0B协议并与82C200完全兼容的SJA1000,如把它视为存储器映射的寄存器,则易于与INTEL80C88CPU接口。SJA1000具有BasicCAN模式和PeliCAN两种模式。PeliCAN工作方式支持CAN 2.0B协议,并具有许多新特点。SJA1000具有完成高性能通信协议所要求的全部必要特性,可完成物理层和数据链路层的所有功能。
应用程序对CAN智能网络通信适配器操作时,首先对CAN智能网络通信适配器进行初始化,初始化工作包括对SJA1000工作方式的初始化,即对CAN总线工作方式的初始化。如对CAN通信波特率的初始化等。
图4-41 CAN智能网络通信适配器硬件结构图
为增强CAN总线的差动发送和接收能力,设计中采用了CAN总线收发接口电路82C250。82C250是CAN总线控制器和物理总线的接口。该芯片可以提供对CAN总线的差动发送和接收能力,最初为汽车的高速通信应用而设计,具有抗汽车环境的瞬间干扰、保护总线的能力,可以通过调整CAN总线上通信脉冲的斜率来降低射频干扰。在SJA1000与82C250之间接入光电耦合器可增强系统的抗干扰能力。
译码功能是由EPM7064S来实现的。EPM7064SLC44-10是ALTERA公司的MAX7000S系列芯片的一种。该芯片基于该公司的第二代MAX(Multiple Array Matrix)结构,采用先进的CMOS E2PROM技术,内含1250个逻辑门和64个宏单元,同时该芯片满足IEEE 1149 JTAG(Joint Test Action Group联合测试行动小组)技术规范,具有ISP(在系统可编程)的特性,通过对其逻辑和功能进行设计,可简化CAN智能网络通信适配器的设计,提高系统的可靠性,缩小板卡的尺寸,而且具有方便的重组功能,有利于该板卡的功能扩展。
INTEL80C88CPU通过对CY7C09449的内置双口RAM的访问实现与上位PC的通信。
上电复位后INTEL80C88CPU处在监控状态,下传数据时,上位机监控程序首先调用虚拟设备驱动程序(WDM)得到双口RAM映射空间的线性地址,然后将下传数据写入双口RAM,放入其指定的发送缓冲器。INTEL80C88CPU内监控程序把上位PC发送到双口RAM的数据通过SJA1000发送到CAN总线网络上,网络中的所有智能测控模块都会收到此信息。在此信息中包含了一个节点号,只有预设的智能测控模块的节点号与信息中所包含的节点号相同的测控模块才会接收并处理数据,判断是配置信息或者是监控命令信息,并作出相应的反应。
上传数据时,CAN总线网络上的智能测控模块将检测到的现场状态等信息通过SJA1000 发送到CAN总线上。网络适配器上的INTEL80C88CPU在运行监控程序的过程中,通过SJA1000接收来自CAN总线网络上的信息,在监控程序中将智能测控模块发来的数据信息存放到双口RAM中,上位机监控软件通过加载设备驱动程序(WDM)提供的双口RAM的线性地址,利用此线性地址查询双口RAM中开辟出的固定的数据接收缓冲区内的数据,然后进行存储、显示、打印报表等处理。
基于PCI总线的CAN智能网络通信适配器的外形如图4-42所示。
图4-42 CAN智能网络通信适配器的外形
3.CAN数据包格式
CAN通信数据传输采用短帧结构,每帧最多发送8个字节有效数据,在传输的数据量超过8个字节有效数据时,给用户编程带来了一定的困难。为此,定义了如图4-43所示的CAN的数据包格式,利用该格式,只需要将待传输的数据进行相应的解包和打包操作即可实现数据的单帧和多帧传输,有效地简化了数据通信。
图4-43 发送数据包和接收数据包格式
a)发送数据包格式 b)接收数据包格式
采用图4-43所示的CAN数据包格式,无论是单帧传输还是多帧传输,只要把数据填入相应的发送缓冲区即可,在接收方,则将数据解包并放至接收缓冲区。
与上述定义的数据包格式相对应,CAN的多帧数据传输帧结构如图4-44所示。
图4-44 CAN多帧数据传输帧结构图
在图4-44中,当发送的有效数据个数不超过4个时,一帧数据即可传输;当有效数据超过4个时,则需要多帧传输。此处的“地址变址”是指从发送缓冲区所取的存放于本帧的第一个有效数据的存储地址相对于缓冲区首地址的偏移量,如第一帧中“地址变址”为4,第二帧中的“地址变址”为10。“地址变址”的设置,使得对数据包的解包和打包实现起来较容易。
4.设备驱动程序WDM的开发
Windows操作系统(Windows98,Windows2000)为了保证系统的安全性、稳定性和可移植性,对底层操作采取了屏蔽的策略,对应用程序访问硬件资源进行了限制。上层的应用程序无权直接访问硬件资源,需要通过编制的设备驱动程序(WDM)实现对硬件资源、外围设备(如PCI设备)等的控制,如获取PCI资源配置情况、把分配的物理地址映射到线性地址以及对局部总线工作方式的控制等。
WDM(Win32 Driver Model)作为Windows的最新一代驱动程序模型,其运行平台是Windows 98/Me/NT/2000/XP等操作系统,运行在系统的内核态。
开发WDM的方式有两种:选用DDK开发和选用第三方软件工具开发。本系统开发选用NuMega公司提供的DriverWorks软件。以下详细介绍CAN智能网络适配器WDM的开发步骤。
(1)开发工具及其安装
开发之初需建立WDM驱动程序的开发环境。首先需安装Visual C++6.0、相应操作系统的DDK和NuMega公司的DriverStudio工具软件包,在DriverStudio的安装过程中,软件包提供了DriverWorks、Softice等工具,其中DriverWorks用于为用户开发WDM创建整体架构,用户必须选择该安装选项并安装;而Softice作为调试工具能有效地帮助开发者进行调试、查看WDM的工作过程等,建议在安装过程中安装该工具。由于DriverWorks所用的类库是对DDK库函数的封装,还必须在VC中编译Numega
3)单击Next之后,向导要求用户选择硬件总线类型,包括ISA、PCI、USB和1394等多种总线类型,用户选择自己的硬件所匹配的总线类型即可。此处选择PCI。选择PCI总线之后,将PCI控制器芯片提供的Vendor ID和Device ID填入空格内,其他不必改变即可。硬件总线类型选择如图4-47所示。
图4-47 硬件总线类型选择
4)在Driver Works所创建的WDM架构中,提供了一个基于C++的Driver Class(驱动类)和对应于该类的C++文件,如图4-48所示。此处要求用户输入该驱动类和文件的名称,默认的类名和文件名与项目名字相同。
图4-48 输入驱动类和文件的名称
5)选择驱动程序要处理的请求类型。选择所需的类型后,在架构中会添加相应的句柄以处理来自应用程序的请求。这些请求包括读请求、写请求、流请求、I/O消息请求(来自应用程序)和I/O消息请求(来自其他驱动程序)等。此处仅选取了Device Control,如图4-49所示。
图4-49 选择驱动程序要处理的请求类型
6)选择对I/O请求包(IRP)的处理方式。大多数硬件驱动程序在一段时间内只能处理一个I/O请求,对其余的I/O请求则按队列排序进行处理。这个功能是对较复杂的驱动程序配备的I/O队列管理功能,用户开发简单驱动程序时可以选择默认选项或“None”选项。此处选择“None”,如图4-50所示。
图4-50 选择对I/O请求包(IRP)的处理方式
7)设置设备启动时从注册表中装载的标识参数,如图4-51所示。当设备启动执行DriverEntry例程时,将从注册表中装载此处所设定的参数。此处选择默认即可。
图4-51 设置设备启动时从注册表中装载的标识参数
8)选择设备文件中的类名,通常取默认值,如图4-52所示。
(www.chuimin.cn)
图4-52 选择设备文件中的类名
图4-52中,还有四种选择:资源设置(Resource)、接口方式(Interface)、缓冲方式(Buffers)和电源管理(Power)。
在图4-53所示的资源设置中,我们设置了一个I/O端口资源。
图4-53 I/O端口资源设置
在用CreatFile()函数打开设备时,WDM只能用GUID标识,而NT可用符号名标识,如图4-54所示。
图4-54 接口方式
对另外两个设置界面“缓冲方式”和“电源管理”,对应用程序和WDM之间的数据传输的缓冲方式,可以选择Buffered或Direct,WDM支持电源管理,这两项按默认选项即可。
9)定义应用程序调用DeviceIoControl()函数对WDM驱动程序通信的控制命令。
如图4-55所示,这里定义了控制命令WDMTEST IOCTL PCI CON和WDMTEST IOCTL MEM。
图4-55 定义DeviceIoControl的控制命令
10)选择是否生成一个WIN32 Console应用程序,另外还可以进行Debug跟踪代码等一些调试方面的选择,如图4-56所示。
图4-56 应用程序生成和调试选择
之后单击“Finish”键即可生成用户定制的WDM架构。
(3)对架构的修改及补充
由DriverWorks生成特定的WDM框架后,用户还需要对其进行修改和补充才能完成在硬件和用户程序间通信的任务。
打开生成的VC工程文件Wdmtest.dsw,修改其中的WdmtestDevice.cpp和WdmtestDe-vice.h,其他文件则不用改变。
下面列出详细的修改内容。
在WdmtestDevice.cpp中修改如下:
其中,Config和Length是两个全局变量,在WdmtestDevice.h中需添加定义代码如下:
PHYSICAL ADDRESS config
ULONG Length;
当设备开始工作时,调用上述函数,操作系统自动分配相关资源,并且在设备停止或被移去时资源被释放。针对以上情况,PCI板卡资源配置的获取应该在该函数响应处获取,即在NTSTATUS KpnpDevice::OnStartDevice(KIrp I)的处理函数中获取。
驱动程序利用专用类Kresource Assignment来获取设备资源请求。该类将获得一个指定类型设备资源的内部数据结构的指针。当用户程序发出读取PCI资源的请求时,驱动程序把通过KresourceAssignment类获得的局部配置寄存器以及双口RAM的物理地址和存储单元长度传给用户程序。
在头文件中定义MemBase和MemLength两个全局变量,用作用户程序和驱动程序的接口。定义如下:
ULONG MemBase; //内存基地址
ULONG MemLength; //内存的长度
在WdmtestDevice.cpp中修改如下代码:
把获取的PCI资源的物理地址映射到用户空间。前面获得的MemBase是物理地址,在用户程序中,需要获得线性地址对双口RAM进行操作。实现物理地址到线性地址的映射可以采用类KmemoryToProcessMap。当驱动程序处理用户程序发出的映射要求时,调用Kmem-oryToProcessMap构造函数,并把线性地址的指针返回给用户程序。类的定义可以参看Driv-erWorks的帮助文档。在WdmtestDevice.cpp中修改如下:
其中mdr LinearAddress是全局变量代表线性地址首地址的指针,用作用户程序与驱动程序的接口,定义在Deviceioctl.h中,定义如下:
PVOID mdr LinearAddress;
用户程序利用获取的PVOID类型线性地址的指针,把它强制转换为所需类型PBYTE,就可以进行对双口RAM的读写操作。
对I/O的处理:局部总线的配置寄存器被映射到128B的内存空间和I/O空间,通过写相应内存空间或I/O空间可以改变局部总线的工作方式。
I/O空间在NTSTATUS WdmtestDevice::OnStartDevice(KIrp I)处理函数中进行了默认的初始化。
驱动程序在处理用户程序发出的I/O操作请求时,通过调用KioRange类的成员函数inb、outb、inw、outw、ind和outd即可对I/O空间进行读写。
如对I/O的写操作如下:
ULONG Address;
UCHAR Data;
m IoPortRange.Outb(Address,Data);
在上述WDM的编制过程中,未对I/O空间进行处理,因此无相应代码修改。
经过以上步骤后,编译后即可生成Wdmtest.sys驱动文件。
有关现场总线及其应用技术的文章
CAN通信程序的设计需要充分利用双CAN构建的环形通信网络,实现正常情况下的高效、快速的数据通信,以及实现故障情况下的及时、准确的故障性质确定和故障定位。CAN通信数据包的分帧情况见表11-7。......
2023-11-22
目前,世界其他国家包括国际组织还没有提出“智能制造装备”这个概念,但有相对应的产业归属范畴,其基本归属于2007版北美产业分类标准(NAICS)中的“导航、测量、医学和控制仪器制造(3345)”“金属加工机械制造(3335)”“电气设备及组成制造(335)”等,相当于欧盟2007版产业分类体系中的“测量、测试、导航仪器和设备制造(26.51)”“光学仪器及摄影器材制造(26.70)”“电气设备制造......
2023-06-23
提供强大的人机交互功能,使设计师对智能设计过程的干预,即与人工智能融合成为可能。智能设计的关键技术包括设计知识表示、设计概念的符号化演绎与传递、设计意图的模糊交互、设计理性知识检索和大数据时代的设计知识智能挖掘等。针对设计知识大数据容量大、产生速率高、知识类型异构、准确性低的特点,从高维、海量、异构、非结构化设计资源中挖掘、搜索对设计者完成设计有价值的信息。图1-4智能制造的关键环节......
2023-06-23
获得最佳效果没有统一模式,只有设计PCB的一般原则,必须在一般原则指导下精心设计。一台性能优良的电子设备,除了选用质量高的元器件外,PCB的组件布局和电路走向以及正确的结构设计也是决定电子设备可靠性的关键性因素。因此,要把正确设计PCB元器件布局结构和正确选取布线方法以及整体电子设备的制造工艺结构3个方面联合起来进行设计。在进行PCB设计时,必须遵守PCB设计的一般原则,并符合抗干扰的要求。......
2023-06-25
智能产品交互设计最早是在国外诞生,较晚传入国内,随着智能化产品的普及,交互设计才被人在国内熟知。在基于智能产品界面之上的交互设计,国外也是引领潮流,比如最近两三年的视觉界面逐渐由拟物化逐渐向扁平化过渡,到现在几乎是扁平化的界面主宰智能产品的界面领域,这都是由于国外的交互设计率先开始的设计改变。......
2023-06-15
使用Encounter进行后端物理实现的设计流程如图8.1所示。图8.1 EDI APR流程待布图规划完成后,工具会依据布图规划中的物理约束信息及SDC中的时序约束信息进行布局。如果数目较少,一般通过小范围的改动即可使之满足要求,这种改动称作ECO。DFM包含范围很广,而在APR流程中的DFM主要是进行诸如double via和spread wire width等优化,预防制造过程中由于加工的偏差使得芯片的功能失效。由于本章着重点在EDI的使用,关于此部分内容并不详细展开。......
2023-06-26
国内的智能产品交互设计起步较晚,由于智能化产品的迅速普及,尤其是智能手机苹果的出现,使得很多公司开始意识到只用原来的视觉设计理念并不能够留住用户,此时大家开始把目光投向了交互设计。但是仍然有很多人们并没有意识到交互设计对于智能产品的重要性,甚至有些公司是由工艺设计师代替完成交互的。......
2023-06-15
智能功能模块软元件的表示方法见表9-2。图9-6所示为当X0接通时从智能功能模块的缓冲存储器地址19中读出数据至数据寄存器D10中的程序。初始设定画面设定的信息在PLC启动时被写入智能功能模块,因此不再需要编写初始设定数据的顺序控制程序。......
2023-06-16
相关推荐