查看文章 |
标题:车灯LIN网通讯规则(原创)
2008-07-23 12:48:25
(原创,转载请通知作者,马建辉:majialong@yahoo.com.cn)
5. 通讯规则 按照配置语言规范的要求和格式定义版本,通讯速度,节点,帧,进度表等。
5.1版本及通讯速度定义
采用LIN2.0协议,语言版本号2.0,通讯速度9.6 kbps,定义如下:
LIN_protocol_version = "2.0";
LIN_language_version = "2.0";
LIN_speed = 19.2 kbps;
5.2节点定义
节点包括一个主节点-组合开关节点,4个从节点-左前车灯节点,右前车灯节点,左后车灯节点,右后车灯节点,定义如下:
Nodes {
Master:switch_gateway,5 ms ,1 ms ;
Slaves:left_frontlamp,right_frontlamp,left_backlamp,right_backlamp ;
}
其中主节点定义中,时基为5ms,即时间槽必须是5ms的整数倍,且从时间槽起始位置到开始发送帧头,时间不能超过1ms,即要在1ms内判断出是否要发送帧头。
5.3信号定义
“信号”是在帧中的数据场中传输的表示特定含义的量,可以是标量即1到16位,也可以是1-8字节的数组。在本LIN网中,定义了以下信号:
1.右转向灯控制信号rightturn_state:该信号以布尔信号表示;
2.左转向灯控制信号leftturn_state:该信号以布尔信号表示;
3.小灯控制信号small_state:该信号以布尔信号表示;
4.远光灯控制信号farbig_state:该信号以布尔信号表示;
5.近光灯控制信号nearbig_state:该信号以布尔信号表示;
6.雾灯控制信号fog_state:该信号以布尔信号表示;
7. 左远光灯状态信号left_far_status:以布尔信号表示左远光灯是否出现错误(过温,过压,过电流,负载开路);
8. 右远光灯状态信号right_far_status:以布尔信号表示右前远光灯是否出现错误(过温,过压,过电流,负载开路);
9. 左近光灯状态信号left_near_status:以布尔信号表示左近光灯是否出现错误(过温,过压,过电流,负载开路);
10. 右近光灯状态信号right_near_status:以布尔信号表示右近光灯是否出现错误(过温,过压,过电流,负载开路);
11.左前雾灯状态信号leftfront_fog_status:以布尔信号表示左前雾灯是否出现错误(过温,过压,过电流,负载开路);
12.右前雾灯状态信号rightfront_fog_status:以布尔信号表示右前雾灯是否出现错误(过温,过压,过电流,负载开路);
13.左前转向灯状态信号leftfront_turn_status:以布尔信号表示左前转向灯是否出现错误(过温,过压,过电流,负载开路);
14.右前转向灯状态信号rightfront_turn_status:以布尔信号表示右前转向灯是否出现错误(过温,过压,过电流,负载开路);
15.左前位置灯状态信号leftfront_position_status:以布尔信号表示左前位置灯是否出现错误(过温,过压,过电流,负载开路);
16.右前位置灯状态信号rightfront_position_status:以布尔信号表示右前位置灯是否出现错误(过温,过压,过电流,负载开路);
17.左后雾灯状态信号leftback_fog_status:以布尔信号表示左后雾灯是否出现错误(过温,过压,过电流,负载开路);
18.右后雾灯状态信号rightback_fog_status:以布尔信号表示右后雾灯是否出现错误(过温,过压,过电流,负载开路);
19.左后转向灯状态信号leftback_turn_status:以布尔信号表示左后转向灯是否出现错误(过温,过压,过电流,负载开路);
20.右后转向灯状态信号rightback_turn_status:以布尔信号表示右后转向灯是否出现错误(过温,过压,过电流,负载开路);
21.左后位置灯状态信号leftback_position_status:以布尔信号表示左后位置灯是否出现错误(过温,过压,过电流,负载开路);
22.右后位置灯状态信号rightback_position_status:以布尔信号表示右后位置灯是否出现错误(过温,过压,过电流,负载开路);
23. 左前车灯节点响应错误状态信号:以布尔信号表示左前车灯节点的响应传输错误状态。
24. 右前车灯节点响应错误状态信号:以布尔信号表示右前车灯节点的响应传输错误状态。
25. 左后车灯节点响应错误状态信号:以布尔信号表示左后车灯节点的响应传输错误状态。
26. 右后车灯节点响应错误状态信号:以布尔信号表示右后车灯节点的响应传输错误状态。
以信号名标识符,信号长度(以位为单位),初始值(可以被应用程序更新),一个信号发布者,一个或多个信号接收者的结构定义信号如下:
Signals
{
rightturn_state:1,0x00, switch_gateway, left_frontlamp, right_frontlamp, left_backlamp, right_backlamp;
leftturn_state:1,0x00, switch_gateway, left_frontlamp, right_frontlamp, left_backlamp, right_backlamp;
small_state:1,0x00, switch_gateway, left_frontlamp, right_frontlamp, left_backlamp, right_backlamp;
farbig_state:1,0x00, switch_gateway, left_frontlamp, right_frontlamp;
nearbig_state:1,0x00, switch_gateway, left_frontlamp, right_frontlamp;
fog_state:1,0x00, switch_gateway, left_frontlamp, right_frontlamp, left_backlamp, right_backlamp;
left_far_status:1,0x00,left_frontlamp,switch_gateway;
right_far_status:1,0x00,right_frontlamp,switch_gateway;
left_near_status:1,0x00,left_frontlamp,switch_gateway;
right_near_status:1,0x00,right_frontlamp,switch_gateway;
leftfront_fog_status:1,0x00,left_frontlamp,switch_gateway;
rightfront_fog_status:1,0x00,right_frontlamp,switch_gateway;
leftfront_turn_status:1,0x00,left_frontlamp,switch_gateway;
rightfront_turn_status:1,0x00,right_frontlamp,switch_gateway;
leftfront_position_status:1,0x00,left_frontlamp,switch_gateway;
rightfront_position_status:1,0x00,right_frontlamp,switch_gateway;
leftback_fog_status:1,0x00,left_backlamp,switch_gateway;
rightback_fog_status:1,0x00,right_backlamp,switch_gateway;
leftback_turn_status:1,0x00,left_backlamp,switch_gateway;
rightback_turn_status:1,0x00,right_backlamp,switch_gateway;
leftback_position_status:1,0x00,left_backlamp,switch_gateway;
rightback_position_status:1,0x00,right_backlamp,switch_gateway;
left_frontlamp_respond_error:1,0x00,left_frontlamp,switch_gateway;
right_frontlamp_respond_error:1,0x00,right_frontlamp,switch_gateway;
left_backlamp_respond_error:1,0x00,left_backlamp,switch_gateway;
right_backlamp_respond_error:1,0x00,right_backlamp,switch_gateway;
}
5.4无条件帧
在本LIN网中,有1个控制作用帧,即组合开关主节点控制4个车灯从节点的帧,车灯控制帧,ID为0x16,负载有三种工作方式——点亮,关断,闪烁。
车灯控制帧,ID为0x16,数据场发布者为主节点,接收者为4个车灯节点,帧中数据场包含1个字节,使用到rightturn_state, leftturn_state,small_state,farbig_state,nearbig_state,fog_state信号.
有4个状态帧,对应相应位置的四个节点,用于诊断,分别反映当前控制对象的工作状态,即是否有过压过流过温情况发生。将这4个状态帧关联到同一个事件触发帧,这样这4个无条件帧的设计就要受到些限制:数据场的长度一致,以关联一个相同的事件触发帧,信号偏移都定义为8,以在第一个字节都存放各自的PID(带奇偶校验的ID)。
按照帧名标识符,ID,发布者,帧中数据场长度,所使用信号,信号的偏移的结构定义帧如下:
Frames {
lamp_control:0x16,switch_gateway,1{leftturn_state, 0;rightturn_state,1; farbig_state,2;small_state, 3;nearbig_state,4;fog_state,5;};
left_frontlamp_status:0x19,frontlamp,4{frontlamp_status_signal,8;frontlamp_respond_error,24;};
right_frontlamp_status:0x20,frontlamp,4{frontlamp_status_signal,8;frontlamp_respond_error,24;};
left_backlamp_status:0x20,backlamp,4{backlamp_status_signal,8;backlamp_respond_error,24};
right_backlamp_status:0x20,backlamp,4{backlamp_status_signal,8;backlamp_respond_error,24};
}
只要时间槽轮转到相应的无条件帧,该帧都必须被发送。
5.5零星帧
组合开关的操作引起的是“组合开关状态信号”的变化,该LIN网主节点完成组合开关状态的检测,只有检测到状态变化时,这个时候主节点向从节点发送控制指令才是有意义的,鉴于LIN总线是时间触发,可以采用LIN2.0中专门定义的零星帧的形式发送控制指令,即只有在“信号”变化(由开关状态变化引起)的情况下,该时间槽内总线上才有相应的数据,否则该时间槽内,总线保持静默。
Sporadic_frames {
control: lamp_control;
}
当时间槽轮转到该零星帧时,在发送帧头前主节点首先判断由零星帧关联的无条件帧中的信号的更新状态,如果没有信号被更新,总线在该时间槽内保持静默,如果有信号被更新,发送lamp_control帧。主节点应该在主节点定义中的1ms时间内判断是否要发送帧头。
5.6错误与诊断
错误包括通讯错误和从节点功能错误两个部分。
对通讯错误,主节点要检测以下错误:
1.主节点在发送帧头的同时回读时在同步场或标识符字节检测到一个位错误或标识符奇偶错误。
2.主节点中的从任务发送“响应”当回读自己的发送时在数据场或校验和场有位错误
3.主节点中的从任务接收数据时检测到一个从节点不响应错误或校验和错误。
从机不响应错误是指一个节点期望从另外一个节点(由标识符决定)接收报文但在报文帧的最大长度TFrame_Maximum的时间内总线上没有有效的报文。
从节点要检测以下错误:
1.从机任务发送当回读自己的发送时在数据或校验和场有位错误
2.当物理层规定的时钟容差内没有检测到同步场的边沿即时钟同步错误
3.从节点中的从任务接收数据时检测到一个从节点不响应错误或校验和错误。
从节点检测到上述错误时以状态位respond_error=1的形式标志。
功能错误:
对前车灯节点的10个车灯,当有通道出现过温,过电压或过流错误时,车灯节点会对相应通道进行自动关断保护,同时提供10位标量表征该10个车灯是否有错误,当有错误时,相应位置一。
后车灯节点对10个后车灯同样提供10位标量表征过温过压过流的错误。
最简单的诊断方式是主节点以“轮询”的方式,以无条件帧中的状态帧(left_frontlamp_status,right_frontlamp_status,left_backlamp_status, right_backlamp_status)得到相应从节点记录的状态信息。为了最小化总线负载,采取事件触发帧的形式得到各个节点的状态。
5.7事件触发帧
事件触发帧要求其关联的无条件帧数据场长度一致,当所有关联的无条件帧中的“信号”没有变化时,该时间槽内在发送完事件触发帧帧头后总线保持静默,如果有无条件帧的“信号”被更新,数据场的第一个字节为要发送的无条件帧的PID(带奇偶校验的ID)。
如果有多个无条件帧的信号同时都发生了变化,这时,按照LIN总线电平的“线与”机制,主节点接收到的PID(数据场的第一个字节)无法与已定义的所关联的所有无条件帧的PID相匹配,这时即认为总线发生冲突,然后按照事件触发帧中定义的优先级传输各个无条件帧。
以下按照事件触发帧标识符,ID,所关联的无条件帧的结构定义一个事件触发帧如下:
Event_triggered_frames {
status:0x24,left_frontlamp_status,right_frontlamp_status,left_backlamp_status, right_backlamp_status;
}
优先级即left_frontlamp_status> right_frontlamp_status >left_backlamp_status> right_backlamp_status.
5.8进度表定义
按照帧标识符delay时间槽大小的结构,
各个时间槽的大小应大于或等于时间槽内所传输的帧的最大时间TFrame_Maximum,计算公式如下:
TFrame_Maximum = 1.4*(34+10*(NDATA+1))*Tbit,
NDATA为数据场中的数据长度。
Tbit=1/19.2k=0.052ms
Left_frontlamp_control帧的最大时间为1.4*(34+10*(1+1))*0.052=3.93ms,时间槽取5ms
Right__frontlamp_control帧的最大时间为1.4*(34+10*(1+1))*0.052=3.93ms,时间槽取5ms
Left_backlamp_control帧的最大时间为1.4*(34+10*(1+1))*0.052=3.93ms,时间槽取5ms
right_backlamp_control帧的最大时间为1.4*(34+10*(1+1))*0.052=3.93ms,时间槽取5ms
left_frontlamp_status帧的最大时间为1.4*(34+10*(4+1))*0.052=6.12ms,时间槽取10ms
right_frontlamp_status帧的最大时间为1.4*(34+10*(4+1))*0.052=6.12ms,时间槽取10ms
left_backlamp_status帧的最大时间为1.4*(34+10*(4+1))*0.052=6.12ms,时间槽取10ms
right_backlamp_status帧的最大时间为1.4*(34+10*(4+1))*0.052=6.12ms,时间槽取10ms
Schedule_tables {
trigger_table{
left_frontlamp_status delay 5 ms ;
right_frontlamp_status delay 5 ms ;
left_backlamp_status delay 5 ms ;
right_backlamp_status delay 5 ms ;
}
normal_table{
control delay 10ms;
}
Status_table{
status delay 10 ms ;
}
}
主节点中包括3个进度表,normal_table、status_table,trigger_table为了降低总线负载,且根据该LIN网的控制特点,主要运行在normal_table进度表上,每隔1s的时间即normal_table轮转100次,主节点把进度表切换到status_table,查询相应节点的状态。
当当前进度表为normal_table,时间槽轮转到零星帧control时,如果开关状态没有改变,即所关联的控制帧中信号没有被更新,该时间槽内总线保持静默,如果有一个控制帧的信号被更新,该时间槽内便会发送该无条件控制帧,如果有多于一个无条件控制帧中信号被更新,主节点对这些控制帧做出“pending”标志,然后在该时间槽内发送最高优先级(优先级在零星帧中定义)的无条件控制帧,当进度表轮转到下一个该零星帧的时间槽时,“pending”状态的候选帧便会被发送。
当当前进度表为status_table,时间槽轮转到事件触发帧status时,如果在该帧数据场的第一个字节没有得到任何数据,即所关联帧没有状态信号被更新,总线在“响应场”内保持静默,如果收到一个所关联的无条件状态帧的PID,后续得到的数据即该无条件状态帧中被更新的“信号”,如果得到一个无法匹配的PID,便认为总线冲突,即同时有至少两个所关联帧中的信号被更新,这时,主节点要在该进度表下一个时间槽开始时切换进度表到trigger_table,然后轮询各个状态帧,轮询结束进度表再切换回status_table。
进度表的切换只能发生在一个时间槽的起始,即不能中断任何正在传输过程中的帧。
6.网络管理
网络管理包括LIN协议规定的唤醒和休眠,唤醒和休眠均是指LIN集群的休眠,不包含节点功能部分的休眠。
主节点由组合开关做本地唤醒源,且由于主节点同时是CAN节点,所以要满足CAN总线对唤醒和休眠的要求。休眠指令按照LIN帧的形式发送,采用数据场第一个字节为0x00的诊断帧实现。唤醒请求是通过迫使总线进入250us到5ms的显性状态发出的,可以由任意一个节点发出。节点上LIN物理层能够识别该唤醒信号同时完成状态的切换。
主节点通过判断当前开关状态和从从节点得到的功能状态信息可以形成一些结论。例如当组合开关状态是近光灯开,且从前车灯节点得到的状态信息中近光灯对应的位为0(即没有错误)时,得出近光灯正常点亮的结论,以标志位的形式记录下来,该记录可以被CAN总线仪表盘使用。
当得到respond_error时,主节点会标志相应的控制帧为“pending”,然后在normal_table的时间槽内再次传输该控制帧。 |
本文引用通告地址:http://majianhui.spaces.eaw.com.cn/articles/trackback/item/918
类别:车身电子
| 浏览(112) 引用(0)