1基于周立功PCI-9820I板卡的组态王CAN通讯协议V2.22011-03-151.协议编制目的本协议是基于PCI-9820I通讯卡而编写的CAN通讯协议。2.报文类型:2.1服务数据报文SDO(ServiceDataObject)SDO报文通过索引和子索引来传输数据,可批量下载和上传数据。SDO报文发送方式采用一对一或主从应答方式来传输数据。2.2过程数据报文PDO(ProcessDataObject)PDO报文用来传输实时数据,数据从一个创建者传到一个或多个接收者。PDO报文发送方式包括定时触发、事件触发和请求应答触发。3.CAN帧格式3.1帧结构一个CAN帧包含13个字节,内容如下:帧信息节点号类型索引备用数据数据数据数据数据数据数据数据◆帧信息:长度1字节,用于标识该CAN帧的一些信息,如类型、长度等。Bit7Bit0FF1RTR1/0保留0保留0D31D20D10D00FF:标准帧和扩展帧的标识,1为扩展帧,0为标准帧。本驱动固定为扩展帧。RTR:远程帧和数据帧的标识,1为远程帧(用于请求数据),0为数据帧(用于数据传输)。保留:值为0,不可写入1。D3~D0:标识该CAN帧的数据长度。◆帧ID:长度4字节,标准帧有效位是11位,扩展帧有效位是29位。内容如下:节点号(低字节)类型索引备用(高字节)ID28-ID21ID20-ID13ID12-ID5ID4-ID0(高5位)2注意:1.本协议采用扩展帧格式。2.本协议中帧ID采用高端对齐的方式,如果驱动程序接收的帧ID是低端对齐的话,需将帧ID左移三位后,再进行处理。例如:计算机收到的扩展帧的帧ID(低端对齐)为0x2468ACE;实际处理时需将此帧ID左移三位(高端对齐)变成0x12345670。即表示节点号为12H,类型为34H,索引为56H,备用为70H。1-127(1-7f)|3.2帧ID描述3.2.1节点号节点号指下位机站点号,范围1-127。3.2.2帧类型帧类型描述了CAN帧的类别,定义如下:帧名称帧类型帧索引数据长度说明开关量PDO帧11-2551-8索引0为无效帧模拟量PDO帧21-2551-8索引0为无效帧特殊PDO帧81-2554(固定)索引0为无效帧SDO帧1288(固定)心跳帧2500(固定)1(固定)远程请求帧2510-2550(固定)◆开关量PDO帧:用来传输开关量数据,一个开关量PDO帧可以传输最多64个数字I/O值。◆模拟量PDO帧:用来传输模拟量数据,一个模拟量PDO帧可以传输最多4个16位的AD值。◆特殊PDO帧:用来传输单个开关量或模拟量数据,数据长度固定为4。◆SDO帧:可批量下载和上传数据,多用于设置或读取模块的参数。◆心跳帧:用来表示模块的运行状态,数据索引值为0,数据长度为1。每隔一段3时间自动发送一次。◆远程请求帧:请求对方的数据,当数据索引值为0时,请求所有节点的数据。3.2.3帧索引帧索引描述了发送或接收帧的序号。3.3特殊PDO帧:特殊PDO帧只能发送单个开关量或单个模拟量,数据长度固定为4个字节。格式如下:帧名称帧索引数据1数据2数据3数据4特殊PDO帧帧索引子索引数据类型数据高位数据地位◆帧索引:见3.2.3◆子索引:子索引和帧索引合并起来表示数据的位置。开关量数据的子索引范围为:0-63对应1-64个输入点。模拟量数据的子索引范围为:0-3对应1-4个输入点。◆数据类型:1=开关量数据;2=模拟量数据。◆数据高位/数据低位:对于开关量数据,只要数据低位的值为非零,即表示1,否则为0。3.4SDO帧SDO帧是主要用来批量下载/上传数据,访问设备(计算机)称作客户端(clint),被访问设备(模块)称作服务端(server)。SDO帧的数据长度固定为8个字节(尽管不是所有的数据字节都一定有意义)。一个客户端的请求一定有来自服务端的应答。定义如下:Client-Server/Server-Client帧名称帧索引数据1数据2数据3数据4数据5-8SDO帧目的地址命令字索引高位索引低位备用数据◆目的地址:范围1-127,客户端(clint)的节点号固定为0x7f。◆命令字:SDO帧共实现了以下协议:4●启动下载●启动上传●块下载●块上传●下载结束●上传结束●传送终止这些协议的SDO命令字的语法和细节如下:(“-”表示不相关,应为0)Bit76543210启动下载Client-0001--AV启动下载应答-Server0001----启动上传Client-0010--AV启动上传应答-Server0010----块下载Client-0011----块上传-Server0100----下载结束Client-0101--A-下载结束应答-Server0101----上传结束-Server0110----传送终止Client-1111----5-Server●A:是否应答,0=客户端不需要应答;1=客户端需要应答。●V:是否校验,0=数据不需要校验;1=数据需要校验。◆索引:是指下载/上传数据帧的序号(从0开始)。下面给出几个例子:●客户端发送“启动下载”命令,并指明需应答和数据需校验。服务端回发“启动下载应答”命令。启动下载帧/启动下载应答帧的Byte4为错误代码。Client-Server:启动下载Byte01234567130000000Server-Client:启动下载应答Byte01234567130000000●客户端发送“下载结束”命令,并指明需应答。服务端回发“下载结束应答”命令。下载结束帧/下载结束应答帧的Byte4为错误代码,Byte5为校验数据。数据校验=所有上传/或下载数据的异或。Client-Server:下载结束Byte01234567520000000Server-Client:下载结束应答Byte01234567520000000●客户端/服务端发送“传送终止”命令。传送终止帧的Byte4为错误代码。6Client-Server/Server-Client:传送终止Byte01234567F00000000●8进制终止代码表:错误代码代码功能描述00无错误01校验错误02SDO帧超时03无效的块大小04数据不能保存05无应答73.4.1计算机下载数据至模块流程83.4.2计算机从模块上传数据流程