发表时间: 2022-03-08 18:32:12
作者: 北京科瑞兴业科技有限公司
浏览:
3.1 ID分配
CAN2.0B的标准帧中的11位标识符,高4位分配为功能码(Function Code)域,低7位分配为节点地址(Node-ID)域,如图3.1.1所示。
11 位标识符 | ||||||||||
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
功能码(Function Code) 节点地址(Node-ID)
图 3.1.1
节点地址(Node-ID)由系统集成商定义,节点地址(Node-ID)范围是1~127(0不允许被使用)
CAN2.0B的标准帧如图3.1.2 所示:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | FF | RTR | x | x | DLC (0-0x0A) | |||
字节2+字节 3 | 11 位标识符 (功能码 + 节点地址) | |||||||
字节 4 | 数据区数据(数据字节 1) | |||||||
…… | ||||||||
字节 11 | 数据区数据(数据字节8) |
图 3.1.2
FF :FF=0 为标准格式, FF=1 为扩展格式(协议中固定为0)
RTR:RTR=0 为数据帧。 RTR=1 为远程帧(协议中固定为0)
DLC为本帧有效数据字节个数,可填入0~8,0~8 表示本帧无后跟数据字节。约定长度数字超过8 后,0x09 表示有后续帧,0x0A 表示本帧为连续帧的最后一帧。
3.2 功能码(Function Code)定义
在同一功能码下,不同命令由数据字节1 的值进行定义并解析。
节点同步值可进行预设置,占用1 字节,可设定范围:0~255
心跳间隔时间值可进行预设置,占用1字节,可设定范围:1~255(单位100mS),当设置值为0 时,关闭心跳。
主动上传数据时间间隔参数值可进行预设置,占用1 字节,可设定范围:1~255(单位10mS), 当设置值为 0 时,关闭主动上传数据功能。
功能码定义表:
功能 | 功能码 (ID-bits 10-7) |
备注 |
保留 | 0000 | |
广播指令(主节点) | 0001 | 最高优先级 |
主节点发送从节点配置信息 | 0010 | |
主节点请求从节点配置信息 | 0011 | |
保留 | 0100 | |
| 0101 | |
| 0110 | |
| 0111 | |
| 1000 | |
| 1001 | |
主节点发送计数清零 | 1010 | |
保留 | 1011 | |
保留 | 1100 | |
保留 | 1101 | |
状态返回指令(从节点) | 1110 | |
保留 |
1111 |
1) 广播指令:0001
方式:主节点发送从节点接收
地址: 0000000B
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 1 | |||
字节2+字节 3 | 功能码(0001)+节点地址(XXXXXXX) | |||||||
字节 4 | 00/01/02 |
主节点发送帧
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | X | x | DLC(0~0x0A) | |||
字节2+字节 3 | 功能码(0001)+节点地址(XXXXXXX) | |||||||
字节 4 | 数据字节 1 | |||||||
…… | …… | |||||||
字节 11 | 数据字节 8 |
从节点发送帧
功能说明:
<1> 00 --- 节点收到此指令时,按分配的优先级发送全部数据一次;
<2> 01 --- 节点的同步信号计数器清零;
<3> 02 --- 节点收到此指令时, 节点的同步信号计数器增 1 并与设定值进行比较, 当计数数值
等于设定值时,发送全部数据一次。
2) 主节点发送从节点配置信息:0010
方式:主节点发送从节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 7 | |||
字节2+字节 3 | 功能码(0010)+节点地址(XXXXXXX) | |||||||
字节 4 | 要配置的节点地址 | |||||||
字节 5 | 波特率 0 | |||||||
字节 6 | 波特率 1 | |||||||
字节 7 | 波特率 2 | |||||||
字节 8 | 同步计数值 | |||||||
字节 9 | 心跳间隔时间参数 | |||||||
字节 10 | 主动上传时间参数 | |||||||
字节 11 | 模块其他参数( K-8510 模块是热电偶类型代码,K-8514E 模块 是高级参数,其他模块没有这个字节) |
主节点发送帧
功能说明: 从节点收到此指令时,将得到的数据保存。
注:波特率0、波特率1 、波特率2的数值在后面的附录A中给出,取值是低24 位。
心跳间隔时间参数值:0 --- 关闭心跳
1~FF --- 心跳间隔( 1~255)*100mS
主动上传时间参数值:0 --- 关闭主动上传
1~FF --- 主动上传间隔( 1~255)*10mS
3) 主节点请求从节点配置信息:0011
方式:主节点发送从节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 0 | |||
字节2+字节 3 | 功能码(0011)+节点地址(XXXXXXX) |
主节点发送帧
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 8 | |||
字节2+字节 3 | 功能码(0011)+节点地址(XXXXXXX) | |||||||
字节 4 | 节点地址 | |||||||
字节 5 | 波特率 0 | |||||||
字节 6 | 波特率 1 | |||||||
字节 7 | 波特率 2 | |||||||
字节 8 | 同步计数值 | |||||||
字节 9 | 心跳间隔时间参数值 | |||||||
字节 10 | 主动上传时间参数值 |
字节 11 | 模块型号(K-8510 模块是热电偶类型代码,K-8514E 是 0x6E) |
从节点发送帧
功能说明:从节点收到此指令时,发送配置信息一次。
心跳间隔时间参数值: 0 --- 关闭心跳
1~FF --- 心跳间隔( 1~255)*100mS
主动上传时间参数值: 0 --- 关闭主动上传
1~FF --- 主动上传间隔( 1~255)*10mS
字节11 说明:1 、K-8510 模块返回的是量程代码。具体定义见下面表格。
量程代码
代码 | 热电偶类型 | 测温范围 |
0x80 | Type J Thermocouple | 0℃~1200℃ |
0x81 | Type K Thermocouple | 0℃~1300℃ |
0x82 | Type T Thermocouple | 0℃~400℃ |
0x83 | Type E Thermocouple | 0℃~1000℃ |
0x84 | Type R Thermocouple | 0℃~1768℃ |
0x85 | Type S Thermocouple | 0℃~1768℃ |
0x86 | Type B Thermocouple | 400℃~1820℃ |
2 、其他模块返回的是模块型号。
4) 主节点请求单通道输入数据(指定): 0101
方式:主节点发送从节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 1 | |||
字节2+字节 3 | 功能码(0101)+节点地址(XXXXXXX) |
字节 4 | 通道号 |
主节点发送帧
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 3 | |||
字节2+字节 3 | 功能码(0101)+节点地址(XXXXXXX) | |||||||
字节 4 | 通道号 | |||||||
…… | 通道数据低位 | |||||||
字节 11 | 通道数据高位 |
功能说明: 从节点收到此指令时,发送单通道数据一次。
注: K-8510 模块实际数据=上传数据除以 10 ,K-8511 模块实际数据=上传数据除以 100。
5) 主节点请求通道输入数据(全部): 0110
方式:主节点发送从节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 0 | |||
字节2+字节 3 | 功能码(0110)+节点地址(XXXXXXX) |
主节点发送帧
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | DLC(0~0x0A) | |||
字节2+字节 3 | 功能码(0110)+节点地址(XXXXXXX) | |||||||
字节 4 | 数据字节 1 | |||||||
…… | …… | |||||||
字节 11 | 数据字节 8 |
从节点发送帧
功能说明:从节点收到此指令时,发送全部数据一次。
注意:DLC 为本帧有效数据字节个数, 可填入0~8,0~8 表示本帧无后跟数据字节。约定长度数字超过8 后,0x09 表示有后续帧,0x0A 表示本帧为连续帧的最后一帧。
K-8510 模块实际数据=上传数据除以10 ,K-8511模块实际数据=上传数据除以100。
6) 主节点发送单个通道输出数据:0111
方式:主节点发送从节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 3 | |||
字节2+字节 3 | 功能码(0111)+节点地址(XXXXXXX) | |||||||
字节 4 | 通道号 |
字节 5 | 通道数据低位 |
字节 6 | 通道数据高位 |
主节点发送帧
功能说明:从节点收到此指令时,将得到的数据值输出。
7) 主节点发送全部通道输出数据:1000
方式:主节点发送从节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | DLC(0~0x0A) | |||
字节2+字节 3 | 功能码(1000)+节点地址(XXXXXXX) | |||||||
字节 4 | 数据字节 1 | |||||||
…… | …… | |||||||
字节 11 | 数据字节 8 |
主节点发送帧
功能说明:从节点收到此指令时,将全部数据值输出。
注意: DLC 为本帧有效数据字节个数, 可填入 0~8,0~8 表示本帧无后跟数据字节。约定长度数字超过8 后,0x09 表示有后续帧,0x0A 表示本帧为连续帧的最后一帧。
8) 主节点请求通道输出数据(全部):1001
方式:主节点发送从节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 0 | |||
字节2+字节 3 | 功能码( 1001)+节点地址(XXXXXXX) |
主节点发送帧
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | DLC(0~0x0A) | |||
字节2+字节 3 | 功能码( 1001)+节点地址(XXXXXXX) | |||||||
字节 4 | 数据字节 1 | |||||||
…… | …… | |||||||
字节 11 | 数据字节 8 |
从节点发送帧
功能说明:从节点收到此指令时,发送全部数据值一次。
注意: DLC 为本帧有效数据字节个数, 可填入 0~8,0~8 表示本帧无后跟数据字节。约定长度数字超过8 后,0x09 表示有后续帧,0x0A 表示本帧为连续帧的最后一帧。
9) 主节点发送计数清零: 1010
方式:主节点发送从节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 1 | |||
字节2+字节 3 | 功能码(1010)+节点地址(XXXXXXX) | |||||||
字节 4 | 00/01/02/03/04/05/06/07/08 |
主节点发送帧
注:此条指令对K-8514 计数模块有效,K-8514C 模块字节4的数据00~07对应1到8通道清零,08为全部通道清零。K-8514E模块字节4的数据00~03对应1到4通道清零,没有4字节为全部通道清零。
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | DLC(0~0x0A) | |||
字节 2、3 | 功能码(1010)+节点地址(XXXXXXX) | |||||||
字节 4 | 数据字节 1 | |||||||
…… | …… | |||||||
字节 11 | 数据字节 8 |
从节点发送帧
功能说明:从节点收到此指令时,将计数器清零,并发送全部数据值一次。
注: K-8514E 没有返回帧。
10) 状态返回指令: 1110
方式:从节点发送主节点接收
地址:从节点地址
格式:
--- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节 1 | 0 | 0 | x | x | 4 | |||
字节 2、3 | 功能码(1110)+节点地址(XXXXXXX) | |||||||
字节 4 | 数据字节 1(节点工作状态参数 0) | |||||||
字节 5 | 数据字节 2(节点工作状态参数 1) | |||||||
字节 6 | 数据字节 3(节点工作状态参数 2) | |||||||
字节 7 | 数据字节 4(节点工作状态参数 3) |
从节点发送帧
功能说明:从节点按心跳设置时间发送节点的工作状态参数。
节点工作状态寄存器参数 0
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
BS | ES | TS | RS | TCS | TBS | DOS | RBS |
RBS --- 1:接收缓冲区状态——如果CANRDA和CANRDB 寄存器有效,CANRFS 和CANRID 内接收到的信息可用, 只要以后再无可用的接收信息, 该位通过 CANCMR 的释放接收缓冲区命令清除。
复位值0。
DOS --- 1:数据溢出状态——由于前面传输到CAN控制器的数据未被读出,而接收缓冲区没有及时释放,从而引起后面信息丢失。
0:自从上次的清除数据溢出命令被写入CANCMR(或自从复位后)后就无数据溢出发生。
复位值0。
TBS --- 1:发送缓冲区状态——无发送信息(3个Tx缓冲区中任何一个的信息)等待CAN 控制器处理,软件可以向CANTFI、CANTID、CANTDA和CANTDB寄存器写入数据。
0:至少有一条前面队列中的到CAN控制器的信息未被发送,因此,软件不应该向存放信息的那个(那些)Tx 缓冲区的CANTFI、CANTID 、CANTDA和CANTDB 寄存器写入数据。
复位值1。
TCS --- 1:发送结束状态——所有发送请求都被成功处理。
0:至少有一个请求发送未处理。
复位值1。
RS --- 1:接收状态:CAN 控制器正在接收数据。
复位值0。
TS --- 1:发送状态:CAN 控制器正在发送数据。
复位值0。
ES --- 1:错误状态:发送和接收错误计数器的计数值或其中一个的计数值已经达到出错警
告界限寄存器中设置的阈值。
复位值0。
BS --- 1:总线状态:由于发送错误计数器的计数值已达到其阈值 255 ,CAN 控制器目前被 禁止。
复位值0。
节点工作状态寄存器参数 1
Rx 错误计数器的当前值,复位值0。
节点工作状态寄存器参数 2
Tx 错误计数器的当前值,复位值0。
节点工作状态寄存器参数 3
在CAN 操作过程中,该值与Tx和Rx错误计数器的计数器相比较,如果其中一个计数值与该值相等,CANSR的错误状态(ES)位置位,复位值0x60。
3.3 K85系列模块各个模块用到的功能码表
功能码 | 模块型号 | ||||||||||
8510 | 8511 | 8512 | 8513 | 8514 | 8516 | 8518 | 8520 | 8521 | 8522 | 8523 | |
0001 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● |
0010 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● |
0011 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● |
0101 | ● | ● | ● | ● | ● | ||||||
0110 | ● | ● | ● | ● | ● | ● | ● | ● | |||
0111 | ● | ||||||||||
1000 | ● | ● | ● | ● | ● | ● | |||||
1001 | ● | ● | ● | ● | ● | ● | |||||
1010 | ● | ||||||||||
1110 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● |
用户在应用程序编程时,可以根据所使用的模块查阅相关指令帧,并参考我们提供的各模块编程示例进行。