Can通信模块详细设计说明书
CAN通信技术解析_PPT模板.pptx

随着科技的发展,CAN通信 将进一步提高传输速率,增 强系统的安全性和稳定性, 未来在更多领域得到应用。
谢谢大家
CAN通信的错误检测 与处理
CAN通信具有强大的错误检 测和处理能力,能够自动重 发错误帧,保证数据的完整 性和系统的稳定性。
03 CAN通信的主要特 点
CAN通信的主要特点
CAN通信的实时性
CAN通信具有出色的实时性 ,其传输速度快,延迟低, 可以满足实时控制系统的需 求。
CAN通信的容错性
CAN通信具有强大的容错能 力,即使在网络中出现错误 的数据帧,也能通过错误检 测机制进行自我修复。
在工业自动化领域,CAN通信被广泛应用于生产
适性。
线控制、设备监控等环节,提高了生产效率和设
备运行的稳定性。 3 CAN通信在医疗设备中的实践
在医疗设备中,CAN通信可以实现设备的远程监
控和数据共享,为医疗诊断和治疗提供了便利。
05 CAN通信的发展趋 势
CAN通信的发展趋势
CAN通信的技术进步
动机控制、刹车控制、空调控制等,实现各个系
统之工作原 理
CAN通信的工作原理
CAN通信的基本原理
CAN通信是一种串行双线制 通信协议,通过数据帧的形 式进行信息传递,具有高可 靠性、实时性和灵活性。
CAN通信的数据帧结 构
CAN通信的数据帧由起始位 、仲裁域、控制域、数据域 和校验域组成,各部分有其 特定的作用和格式,保证了 信息的准确传输。
CAN通信,全称Controller Area Network,是
CAN通信的特点
2
一种高效的车辆内部通信网络,主要应用于汽车
CAN通信具有实时性强、传输速度快、可靠性高
CAN总线详解

汽车CAN总线详解概述CAN(Controller Area Network)总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线,它起初用于实现汽车内ECU之间可靠的通信,后因其简单实用可靠等特点,而广泛应用于工业自动化、船舶、医疗等其它领域。
相比于其它网络类型,如局域网(LAN, Local Area Network)、广域网(WAN, Wide Area Network)和个人网(PAN, Personal Area Network)等,CAN 更加适合应用于现场控制领域,因此得名。
CAN总线是一种多主控(Multi-Master)的总线系统,它不同于USB或以太网等传统总线系统是在总线控制器的协调下,实现A节点到B节点大量数据的传输,CAN网络的消息是广播式的,亦即在同一时刻网络上所有节点侦测的数据是一致的,因此比较适合传输诸如控制、温度、转速等短消息。
CAN起初由BOSCH提出,后经ISO组织确认为国际标准,根据特性差异又分不同子标准。
CAN国际标准只涉及到 OSI(开放式通信系统参考模型)的物理层和数据链路层。
上层协议是在CAN标准基础上定义的应用层,市场上有不同的应用层标准。
发展历史1983年,BOSCH开始着手开发CAN总线;1986年,在SAE会议上,CAN总线正式发布;1987年,Intel和Philips推出第一款CAN控制器芯片;1991年,奔驰500E 是世界上第一款基于CAN总线系统的量产车型;1991年,Bosch发布CAN 2.0标准,分 CAN 2.0A (11位标识符)和 CAN 2.0B (29位标识符);1993年,ISO发布CAN总线标准(ISO 11898),随后该标准主要有三部分:ISO 11898-1:数据链路层协议ISO 11898-2:高速CAN总线物理层协议ISO 11898-3:低速CAN总线物理层协议注意:ISO 11898-2和ISO 11898-3物理层协议不属于BOSCH CAN 2.0标准。
can总线第二章can总线系统原理

can总线第二章can总线系统原理CAN总线是一种串行通信总线,广泛应用于汽车电子系统、工业自动化和航空航天等领域。
CAN总线的设计目标是提供高可靠性、实时性和可扩展性的通信解决方案。
本文将详细介绍CAN总线的系统原理。
CAN总线系统由以下几个主要组成部分构成:CAN控制器、CAN收发器、CAN总线和节点。
CAN控制器负责管理和控制通信过程,而CAN收发器则负责将控制器发送的数字信号转换为电压信号,并将接收到的电压信号转换为数字信号。
CAN总线是连接各个节点的物理介质,节点则是CAN 总线上的设备或系统。
CAN总线采用差分信号传输,即通过两条线分别传输正负两个信号。
这种差分传输方式可以减小干扰对信号的影响,提高通信的可靠性。
CAN 总线使用非归零码(NRZ)编码方式,即不使用0和1两种信号电平来表示数据,而是使用高低电平的变化表示数据位的变化。
CAN总线采用了CSMA/CD(载波监听多路访问/冲突检测)的工作方式。
在CAN总线上,每个节点都可以发送和接收数据。
当一个节点要发送数据时,它首先监听总线上是否有其他节点正在发送数据。
如果没有冲突,则该节点发送数据;如果发现冲突,则停止发送数据,并等待一个随机的时间后再次尝试发送。
CAN总线支持广播和点对点通信。
广播是指一个节点向所有其他节点发送相同的数据,而点对点通信是指一个节点向另一个节点发送特定的数据。
广播通信可以实现消息的快速传播,而点对点通信可以实现节点之间的私密通信。
CAN总线提供了多种帧类型,包括数据帧、远程帧和错误帧。
数据帧用于传输实际的数据,远程帧用于请求其他节点发送数据,而错误帧用于传输错误信息。
每个帧都包含标识符、控制位、数据和校验字段。
标识符用于唯一标识每个帧,控制位用于指示帧的类型,数据字段用于存储实际的数据,而校验字段用于检测数据传输过程中是否发生错误。
CAN总线具有很高的实时性和可靠性。
它支持多个节点同时发送和接收数据,并且可以在微秒级的时间内完成数据传输。
周立功CAN总线设计详解通讯

-4– 文档编号:20030810_1
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax:38730925
CAN-bus 介绍
概述
CAN-bus(Controller Area Network)即控制器局域网,是国际上应用最广泛的现场总线之一。 起先,CAN-bus 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息, 形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入 CAN 控制装置。
高层协议
CAN 高层协议························································································· 8 CANopen 协议 ························································································ 9 DeviceNET 协议 ···················································································· 10 ZLGCAN 系列产品介绍 ············································································ 12
我们立志成为国内第一流的 CAN-bus 开发、服务、应用的团队。关于 CAN-bus 的详细应用,请浏览技术支持 专业主页:
或进入 CAN-bus 技术讨论园地:
http:///club/bbs/bbsView.asp 我们的服务邮箱:
CANlink通信及自由指令使用说明书

CAN link通信及自由指令使用说明书汇川PLC的CANRX指令属于自由指令,用来读取PLC的CAN控制器接收到的数据。
该指令通过判断接收到的数据的ID(仲裁标识符)与指令ID是否相同以判断接收到的数据是不是有效,用于不支持CANlink协议的设备和PLC之间的通信。
CANRX指令通常情况下和CANTX指令配合使用,一般是用CANTX去读取或写入数据,用CANRX接收返回。
由于指令设计为异步指令,所以接收过程中有可能存在接收不到数据或接收到数据错位的问题,因此用户在使用过程中要对其使用情况进行设置,详细说明如下:模式1:设置PLC仅支持自由协议1.1:设定CANRX指令使用标志,设置M8283为1。
1.2:设置M8283之后表示对不支持CANlink协议的设备进行访问,不再支持FROM,TO指令。
1.3:采用CANRX指令对同一返回ID的同一设备的不同数据要分时段进行,否则会发生接收错位。
1.4:采用CANRX指令对同一返回ID的不同设备的不同数据要分时段来进行,否则会发生接收错位。
模式2:设置PLC支持自由指令和CANlink协议同时使用2.1:设定自由指令和CANlink协议同时使用标志,设置M8282为1。
(M8283必须设置为0)2.2:用户用自制设备与PLC进行数据交互时,必须不得使用CANlink协议使用过的标识符,及29位仲裁标识符的高4位(bit28,bit27,bit26,bit25)不得为(1000,1010,1011,1101),如果使用此标识符会导致不支持CANlink协议的设备发送的数据被PLC当做支持CANlink协议设备发送的数据错误接收。
2.3 采用CANRX指令对同一返回ID的同一设备的不同数据的接收要分时段进行,否则会发生接收错位。
2.4 采用CANRX指令对同一返回ID的不同设备的不同数据的接收要分时段来进行,否则会发生接收错位。
2.5 在此情况下发送的ID高29位非(1000,1010,1011,1101)的数据不再当CANlink的错误帧处理。
GCAN-305 嵌入式CanOpen(从站)转Uart 用户手册

GCAN-305嵌入式CANopen(从站)转UART用户手册文档版本:V3.02 (2015/8/11)修订历史版本日期原因V1.00 2013/6/16 创建文档V2.01 2013/12/20 修正设备工作参数V3.01 2014/10/22 添加部分参数V3.02 2015/8/11 修正部分参数目录1. 功能简介31.1 功能概述31.2 性能特点31.3 静态参数41.4 典型应用52. 设备安装52.1 系统连接结构52.2 模块接口定义63. 设备使用73.1 GCAN-305配套评估板73.2 模块状态转换83.3 系统状态指示灯93.4 GCAN-305节点ID与CAN总线波特率94. GCAN-305中使用CANopen协议(DS301)114.1 GCAN-305预定义连接114.2 GCAN-305操作135. GCAN-305串口操作275.1 串口通信协议275.2 GCAN-305操作命令295.3 GCAN-305串口操作错误响应45附录A:CANopen协议简介46附录B:串口可操作对象字典列表53附录C:GCAN-305对象字典55销售与服务错误!未定义书签。
1. 功能简介1.1 功能概述GCAN-305是广成科技有限公司开发的嵌入式CANopen从站通信转换模块。
该模块内部已经集成了CANopen从站协议栈代码,不需要用户进行二次开发。
协议栈遵循CANopen协议描述文档DS301、DS302、DS303以及DS305标准。
在默认情况下,CANopen从站启用预定义连接,并支持参数存储。
GCAN-305模块提供一路CAN接口,通过该接口可以与CANopen网络进行连接。
另外GCAN-305提供两个UART接口——一个通信UART接口(通信波特率为1200~115200bps),一个调试UART接口(固定波特率为115200bps)。
GCAN-305模块适用于任何具有串口通信能力的系统,通过搭载该模块,用户现有的串口通信设备可以以最快的速度拥有CANopen通信能力,抢占市场先机。
(完整版)24V系统-CAN通讯协议说明书

24V系统-CAN通讯协议说明书(内部文件)2. 范围 (2)3. 网络拓扑 (3)3.1 模块地址表: (3)4. 报文格式 (4)4.1 状态信息报文 (4)4.1.1 开关量消息组1 (4)4.1.2 开关量消息组2 64.1.3 各种数值量消息 (7)4.1.4 故障消息 (8)4.1.5 仪表指示灯消息组 1 (10)4.1.6 仪表指示灯消息组 2 (11)4.2 控制类报文 (11)4.3 网络管理类报文 (14)4.3.1 系统休眠消息 (14)4.3.2 系统唤醒消息 (14)4.3.3 模块重启通知消息 (14)4.3.4 请求模块重启消息 (15)4.3.5 请求模块软件版本消息 (15)4.3.6 请求模块硬件版本消息 (16)4.3.7 模块网络心跳消息 (17)4.3.8 网络时钟消息 (17)4.4 其他报文 (18)4.4.1 应答消息 (18)5. 仪表相关报文 (18)1. 目的24V网关和车身控制系统(以下简称24系统)是基于CAN网连结而成的,CAN网络是整个系统的基础。
所以很有必要详细说明下该系统中的CAN 网络协议,这也是编写本文档的主旨。
本文档仅供内部开发人员使用,包括NCM 组和仪表组。
2. 范围本文编写的范围仅仅限于24V系统中采用的基于CAN的J1939应用协议的报文格式,不适用所有的网关和车身控制系统。
本文档并不是介绍CAN网络和J1939应用协议文档,而了解文档中设计的J1939协议关联的术语,请参看相关的技术文档。
3. 网络拓扑24V系统的详细介绍详见其他相关文档,如系统概要设计,详细设计等,在这里简单介绍一下系统的网络拓扑图,使读者有一个简单直白的了解,以便于更好的理解文档中涉及的CAN网络和J1939协议。
总所周知,CAN协议早在80年代就已经由德国的博世公司开发应用于汽车电子领域了,到了1991年,Philips Semiconductors公司制定发布了CAN技术规范2.0版本,分为A 和B两部分,2.0A部分给出了CAN报文的标准格式,2.0B部分为扩展部分。
傲拓科技 NJ400CMM401-0114自定义CAN模块使用说明书

NJ400CMM401-0104 CANOpen主站模块使用说明书V1.00傲拓科技股份有限公司2023年01月目录第一章 NA400CMM401-0104硬件手册 (1)1.1 概述 (1)1.2 订货号 (1)1.3 特性 (1)1.4 模块外观 (2)1.5 指示与诊断 (2)1.6 技术规范 (3)第二章 NA400CMM401-0104使用说明 (4)2.1 主站配置软件安装 (4)2.2 主站配置软件使用 (5)2.2.1 安装EDS文件 (5)2.3 配置主站/从站网络 (9)2.3.1 手动配置 (9)2.3.2 在线扫描 (17)2.4 配置文件的下载 (18)2.5 使用案例 (19)2.5.1 配置CPU和CMM通讯的输入输出区: (19)2.5.2 CANOpen网络配置 (19)2.5.3 输入输出数据区读写 (21)第一章 NA400CMM401-0104硬件手册1.1概述NA400CMM401-0104CANOpen主站模块是运行于PLC系统中的通讯模块,该模块扮演的角色是让NA400PLC系统能够方便的接入到CANOpen网络,实现PLC 与CANOpen总线上其它从站设备的数据交换,即负责将PLC 的数据传送给总线上的从站设备,同时也负责将总线上其他从站设备返回的数据传回PLC,从而实现数据交换。
1.2订货号1.3特性NA400CMM401-0104 CANOpen主站模块具有以下特性:⚫独立完成通讯任务,既可以与NA400 CPU 数据交换,也可以与 DP从站数据交换;⚫与NA400CPU模块的数据交换单独使用一路内部网,与 I/O 模块的内部网分离减轻内部网通讯的负担;⚫符合CANopen标准协议DS301v4.02;⚫支持NMT Master 服务;⚫错误控制:支持Heartbeat /Node Guarding Protocol ;⚫通讯节点数:最大 127 个节点(包括主站,主站是0号节点);⚫支持PDO服务:◼RxPDO数据量最大400字节,TxPDO数据量最大400字节;◼每个从站最多可配置4个TxPDO和4个RxPDO ;◼PDO映射:每个PDO最大可以映射32个参数,但总共加起来不能超过8个字节;⚫支持SDO服务;⚫支持Emergency Protocol,并在组态软件窗口显示;⚫支持同步信号产生(SYNC producer,range 0-65535ms );⚫作为NACANopenBuilder配置软件,可以通过CANOpen主站模块直接对网络进行组态;⚫支持标准波特率:125kbps、250kbps、500kbps;⚫全面的LED指示功能;⚫ 掉电不丢失配置参数,上电后CPU 自动进行参数加载; ⚫ 支持热插拔。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Can.cpp模块设计说明1.总则:传送故障记录数据或运行记录数据时,不传送参数数据和实时数据。
传送参数数据和实时数据可同时传送。
在界面层:1.读故障记录数据BUTTON和运行记录数据BUTTON和记录实时数据BUTTON没有按下,参数没有操作时,才能按下读故障记录数据BUTTON或运行记录数据BUTTON。
否则弹出信息框。
2.按下故障记录数据BUTTON后,把运行记录数据BUTTON和记录实时数据BUTTON变灰,参数MENU和参数界面上的读和修改BUTTON变灰,故障记录数据读完后,上述按钮复原。
对按下运行记录数据BUTTON作同样处理。
3.按下记录实时数据BUTTON时,把故障记录数据BUTTON和运行记录数据BUTTON变灰。
按下停止记录实时数据BUTTON时, 把故障记录数据BUTTON和运行记录数据BUTTON复原。
4.对参数上载和修改时,把故障记录数据BUTTON和运行记录数据BUTTON变灰,完成操作后把故障记录数据BUTTON和运行记录数据BUTTON复原。
CAN和以太网类似,相应7种事件:关闭CAN、实时数据请求、读参数、写参数、发送心跳报文,读故障记录,读运行记录。
2功能模块类名为:Class Can类对象定义在Can.cpp中,是一个全局对象。
Class Lan g_Can;该模块的功能为:1. 通过USB转CAN与下位机进仃头时数据请求和参数的上传下载读运行记录;,读故障记录,2. 通过PCI插卡与下位机进仃头时数据请求和参数的上传下载运行记录;,读故障记录,读3. 出错处理。
3流程逻辑CAN部分由线程CanThread(宽成5个事件。
OpenCan ( DWORD DevType , DWORD DevIndex , DWORD Reserved )函数通过调用API 函数VCI_OpenDevice (DWORD DevType , DWORD DevIndex , DWORD Reserved )打开CAN;CloseCan ( DWORD DevType , DWORD DevIndex )函数通过调用API 函数VCI_CloseDevice(DWORD DevType , DWORD DevIndex)关闭CAN ;StartCanThread ()函数用于开启Can线程;SuspendedCanThread ()函数用于关闭线程;CanThread ()为Can线程函数,用于执行五种事件:关闭Can、发送实时数据请求、读参数、写参数和发送心跳报文。
SendCanPacket(int iEvent, int Index = 0 , int SubIndex = 0 , *Data = NULL)为CAN 发送报文函数,iEvent为事件值,Index、SubIndex、Data用于参数的读写事件。
根据不同的事件,发送相应的报文。
RecvCanPacket()JudgeOvertime();以上函数形参封装在以下的数据结构中:typedef struct _CAN_DEVICE_PARM_{DWORD dwDevType; 〃设备类型号DWORD dwDevIndex; 〃设备索引号DWORD dwReserved; 〃保留DWORD dwCANIndex; //Can 第几路DWORD dwChecCode;// 验收码DWORD dwMask; // 屏蔽码DWORD m_dwMode; // 模式int iTimer0; // 定时器int iTimer1; // 定时器int iFilterType;// 滤波方式}CAN_DEVICE_PARM;typedef struct _VCI_CAN_OBJ{UINT uiID;UINT uiTimeStamp;BYTE byTimeFlag;BYTE bySendType;BYTE byRemoteFlag;// 是否是远程帧BYTE byExternFlag;// 是否是扩展帧BYTE byDataNbytes;BYTE byDataBuf[8];BYTE byReserved[3];}VCI_CAN_OBJ,*PVCI_CAN_OBJ ;成员uiID :报文ID ;uiTimeStamp :接收到信息帧的时间标识,从CAN控制器初始化开始计时;byTimeFlag :是否使用时间标识,为1时uiTimeStamp有效,byTimeFlag和uiTimeStamp只在此帧为接收帧时有意义;bySendType:发送帧类型,0为正常发送,1为单次发送,2为自发自收,3为单次自发自收只在此帧为发送帧时有意义;byRemoteFlag:是否为远程帧;byExternFlag :是否为扩展帧;byDataNbytes :数据长度(<=8),即Data的长度;byDataBuf:报文的数据;byReserved:系统保留。
typedef struct _VCI_INIT_CONFIG{DWORD dwAccCode;DWORD dwAccMask;DWORD dwReserved;UCHAR ucFilter;UCHAR ucTiming0;UCHAR ucTiming1;UCHAR ucMode;}VCI_INIT_CONFIG ,*PVCI_INIT_CONFIG;成员:dwAccCode :验收码;dwAccMask :屏蔽码;dwReserved:系统保留;ucFilter:滤波方式,1为单波方式,0为双波方式;ucTiming0 :定时器0;ucTimingl :定时器1;ucMode :模式。
0为正常模式,1为只听模式在Datalayer.cpp中添加成员变量:BYTE m_byCANRealTimeBuffer[];BYTE m_byCANParmBuffer[];添加成员函数:int GetDataFromCANPacket();对CAN接收到的数据进行解析分类,将数据存于他对应的地方。
CAN从界面层到通讯层的整体流程图:OpenCAN ()函数流程图:SendCanPacket()流程图:SendCanPacket。
判断iEventCANThread()流程图:通过返回值 判断是否超 时重发请求关闭CANN 发送实时数 据请求报文接收实时数 据报文While 判断是否瓷生其 他事件并且是否为一*..- 组数据的最后一帧'发送故障记 录请求报文接收实时数 据报文通过返回值 判断是否超时重发请求RecvCanPacket ()流程图:1)如收到的是心跳报文;则丢掉2)如收到的是’中止SDO请求报文’(最后4个字节是16进制中止代码之一■——0601 0000,其功能描述是对象不支持访问勺则上位机通知参数设定界面,参数设定界面弹出对话框告知参数INDEX或SUBINDEX出错。
上位机停止上传/下载系统参数。
4实时数据和参数通信过程(供参考)4.1数据结构:在InternalDef.h 中增加#define LIMIT_CAN_RECV_ONE_PACKET_TIMEOUT_MS 200#define PACKET_TIMEOUT 2在PdasConfig中增加Int m_iCanRecvOnePacketTimeoutMs ;在PdasCong.cpp 中m_iCanRecvOnePacketTimeoutMs= LIMIT_CAN_RECV_ONE_PACKET_TIM EOUT_MS在DataLayer.h中增加int m_iCanRealTimeDataNbytes ; //UDP 收到的数据长度BYTE m_byCanRealTimeData[500];在Can.h中增加BYTE m_byRealTimeData[12][8]Int m_iIndexOfRealTimeData;BOOL m_bFirstRealTimeBlock4.2程序伪代码:1.初始化m_byRealTimeData[][]为全0,且m_byRealTimeData[0][0]=0xff ;m_bFirstRealTimeBlock=TRUE2.在应该发送的时刻调用SendNmi (0x01)函数该函数组织报文(00,02,01,02,00,00,00,00,00,00然后调用VCI_Trasmit()3.BOOL bShouldSave=FALSE;While(TRUE){If (ShouldSendParmPacket(...)){ 〃有上载参数报文或修改参数报文要发送OrganizeParmPacket(...) 〃组织发送VCI_Transmit(...)}iNbytes=VCI_Receive(...),超时时间用变量g_PdasConfig.CanRecvOnePacketTimeoutMs;iState=ProcessPossibleTimeOut(...) 〃返回PACKET_TIMEOUT 或DEVICE_FAULTIf(iState==PACKET_TIMEOUT)Continue;Else if(iState==DEVICE_FAULT){g_DataLayer.iDeviceState[DEVICE_CAN]=DEVICE_FAULTBreak;}iPacketType=JudgeReceivedPacketType(...)If (iPacketType==REAL_TIME_DATA||==LAST_REAL_TIME_DATA) 〃收到实时数据报文根据ID , DL, Byte 放入相应m_byRealTimeData[?][] Else if(iPacketType==UPLOAD_PARM )ProcessUpLoadParm(....)〃参数报文处理Else if(iPacketType==MODITY_PARM )ProcessModityParm(...) //参数报文处理If(iPacketType==LAST_REAL_TIME_DATA)//(0x484,0x08,0x0B) 收到{If ( m_iReadRecordStage==BEGN break〃退出循环,去读故障记录数据If(m_bFirstRealTimeBlock==TRUE){If (12个报文全收到){m_bFirstRealTimeBlock=FALSEbShouldSave=TRUE}}Else{bShouldSave=TRUE}}If (bShouldSave){bShouldSave=FALSE;g_DataLayer.PutRealTimeData(m_byRealTimeData ,iErrorCode ,DEVICE_CAN );0x2000 0x3000 (0x3000-1) (0x4000-1)} }//end of While()5传送故障记录数据或运行记录数据过程(供参考) 5.1数据结构: InternalDef.h 中增加 #defineNON_RECORD 0#define FAULT_RECORD 1 #defineNORMAL_RECORD2#define BEGIN_RECORD 1 ... #define COMPLETE_RECORDxx#define FIRST_INDEX_OF_FAULT_RECORD #define FIRST_INDEX_OF_NORMAL_RECORD #define LAST_INDEX_OF_FAULT_RECORD #defineLAST_INDEX_OF_NORMAL_RECORD〃现由周提供PdasConfig.h 中增加 Int m_iFirstIndexOfFaultRecord Intm_iFirstIndexOfNormalRecord Int m_iLastIndexOfFaultRecord Int m_iLastIndexOfNormalRecordPdasConfig.cpp 中增加对它们赋初值Can 类中增加Intm_iRecvRecordTypeInt m_iRecvRecordStageBYTE m_byRecordData[12][8]Int m_iIndexOfRecordData;Int m_iSubIndexOfRecordDataInt m_iBlockSizeOfRecordDataDalaLayer中增加RecvFaultRecord (..)RecvNormalRecord(...)5.2伪代码1.对故障记录数据,界面调用g_DataLayer.RecvFaultRecord().g_DataLayer.RecvFaultRecord()勺工作:-设置变量Can.m_iRecvRecordStage = BEGIN还是设置事件m_EventRecvRecord ???M论-设置Can.m_iRecvRecordType=FAULT_RECORD 对故障记录数据,界面调用g_DataLayer.RecvNormalRecord().g_DataLayer.RecvNormalRecord()勺工作:-设置变量Can.m_iRecvRecordStage = BEGIN_RECORD还是设置事件m_EventRecvRecord ???M论-设置Can.m_iRecvRecordType=NORMAL_RECOED初始化m_byRecordData[12][8]为0 和m_byReacordData[0][0] 为0xFF。