一种房车专用协议设计数据通信方法与流程

文档序号:32311925发布日期:2022-11-23 11:58阅读:37来源:国知局
一种房车专用协议设计数据通信方法与流程

1.本发明涉及通信领域,具体是一种房车专用协议设计数据通信方法。


背景技术:

2.房车,兼具“房”与“车”两大功能,但其属性还是车,是一种可移动、具有居家必备的基本设施的车种。
3.现有房车与逆变器、充电器交互通信设备类型不统一,数据段不稳定,需要对其进行改进。


技术实现要素:

4.本发明的目的在于提供一种房车专用协议设计数据通信方法,以解决上述背景技术中提出的问题。
5.为实现上述目的,本发明提供如下技术方案:
6.一种房车专用协议设计数据通信方法,包括以下步骤:
7.步骤1:上电读取设备默认或者已设置好的节点地址,发送地址声明请求;
8.步骤2:通信建立后,监听总线上设备是否存在数据,收到数据后进行帧id拆分解析;
9.步骤3:根据帧id拆分参数进行数据比对,不存在dgn的过滤;
10.步骤4:地址声明成功后,间隔发送诊断信息;
11.步骤5:状态机事件记录变化,上报逆变器和充电器信息;
12.步骤6:在解析帧id数据后进行指令应答。
13.作为本发明再进一步的方案:步骤1中:上电使能can硬件,读取设备默认或者已经设置好的节点地址,然后发送地址声明请求;等待总线上所有节点上报节点地址,如果节点地址不一样则可以使用当前节点地址;如果存在地址冲突并且本节点优先级低,则需要重新生成地址重新发送地址声明请求;反之,如果地址冲突但是本节点优先级高,则可以使用现有节点地址,无需仲裁。
14.作为本发明再进一步的方案:步骤2中:通信建立后,监听总线上设备是否存在数据,收到数据后进行帧id解析,根据协议说明将帧id拆分为优先级、数据组、节点地址,帧id使用独立拆分组合。
15.作为本发明再进一步的方案:步骤3中:根据拆分参数进行数据比对,不存在dgn的帧id过滤,不参与构建地址声明。
16.作为本发明再进一步的方案:步骤4中:地址声明成功后,每5秒发送一次诊断信息,诊断信息实现方式是根据状态机变化而重新触发。
17.作为本发明再进一步的方案:步骤5中:状态机事件记录变化上报逆变器状态、充电器状态和逆变器直流侧状态,状态机使用无符号字符类型作为全局状态,单次上电有效,重新上电使用默认值。
18.作为本发明再进一步的方案:步骤6中:在解析帧数据后立即进行指令应答,共4类指令区分,应答函数内部指令功能区分,且区别dgn。
19.与现有技术相比,本发明的有益效果是:本发明作为配合房车专用协议而设计的协议栈,主要是用于房车与逆变器、充电器交互通信,包含数据广播,故障提醒和配置下发,能够统一设备类型,实现多设备同时连接,自动进行地址分配。
附图说明
20.图1为一种房车专用协议设计数据通信方法的原理图。
21.图2为协议栈id的组成示意图。
22.图3为地址声明的示意图。
23.图4为地址声明请求的示意图。
24.图5为事件应答的示意图。
25.图6为诊断信息的示意图。
具体实施方式
26.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
27.请参阅图1,一种房车专用协议设计数据通信方法,包括以下步骤:
28.步骤1:上电读取设备默认或者已设置好的节点地址,发送地址声明请求;
29.步骤2:通信建立后,监听总线上设备是否存在数据,收到数据后进行帧id拆分解析;
30.步骤3:根据帧id拆分参数进行数据比对,不存在dgn的过滤;
31.步骤4:地址声明成功后,间隔发送诊断信息;
32.步骤5:状态机事件记录变化,上报逆变器和充电器信息;
33.步骤6:在解析帧id数据后进行指令应答。
34.在本实施例中:请参阅图1,步骤1中:上电使能can硬件,读取设备默认或者已经设置好的节点地址,然后发送地址声明请求;等待总线上所有节点上报节点地址,如果节点地址不一样则可以使用当前节点地址;如果存在地址冲突并且本节点优先级低,则需要重新生成地址重新发送地址声明请求;反之,如果地址冲突但是本节点优先级高,则可以使用现有节点地址,无需仲裁。
35.请参阅图3,地址声明软件实现可如下所示:
36.37.[0038][0039]
地址仲裁软件实现:
[0040][0041]
请参阅图4,地址声明及冲突实现;
[0042]
地址声明请求软件实现:
[0043]
senddata[0]=0x00;
[0044]
senddata[1]=238;
[0045]
senddata[2]=0x00;
[0046]
senddata[3]=0xff;
[0047]
senddata[4]=0xff;
[0048]
senddata[5]=0xff;
[0049]
senddata[6]=0xff;
[0050]
senddata[7]=0xff;
[0051]
txmsg.id=0x00000006《《26|(0x0000ea00|locaaddr)《《8|254;
[0052]
txmsg.type=can_type_data;
[0053]
txmsg.fmt=can_fmt_extid;
[0054]
txmsg.data=senddata;
[0055]
txmsg.len=8;
[0056]
地址冲突软件实现:
[0057]
tempaddr=locaaddr;
[0058]
//生成指定范围随机数要产生随机数r,其范围为m《=r《=n,可以使用如下公式:rand()%(n-m+1)+m
[0059]
create:
[0060]
//tempaddr=rand()%(143-128+1)+128;
[0061]
tempaddr=tempaddr-1;
[0062]
if(tempaddr==0)
[0063]
{
[0064]
return 143;
[0065]
}
[0066]
if(tempaddr!=locaaddr)
[0067]
{
[0068]
addr=tempaddr;
[0069]
}
[0070]
else
[0071]
{
[0072]
goto create;
[0073]
}
[0074]
return addr;
[0075]
完成发送地址声明请求,解决地址冲突。
[0076]
在本实施例中:请参阅图1,步骤2中:通信建立后,监听总线上设备是否存在数据,收到数据后进行帧id解析,根据协议说明将帧id拆分为优先级、数据组、节点地址,帧id使用独立拆分组合。
[0077]
协议帧id如图2所示,对应解析为:
[0078]
识别码data group number:rx_dgn=(dmsg.frameid》》8)&0x01ffff;
[0079]
优先级priority:priority=(dmsg.frameid&0x1c000000)》》26;
[0080]
节点地址source address:rx_nodeaddr=(u8)dmsg.frameid。
[0081]
在本实施例中:请参阅图1,步骤3中:根据拆分参数进行数据比对,不存在dgn的帧
id过滤,不参与构建地址声明。
[0082]
请参阅图5,根据dgn判断需要解析的帧类型是控制什么的指令,然后判断需要控制的节点地址是不是本节点,不是的话需要过滤,最后判断节点优先级和数据。
[0083]
rx_dgn(图5中dgn:e800h):接收到的data group number
[0084]
rx_nodeaddr(图3中source address):接收到的控制节点地址
[0085]
dmsg.data(图3中data):接收到的帧缓存数据
[0086]
priority(图3中priority):接收到的帧优先级
[0087]
个人实现方式sendeventack(rx_dgn,rx_nodeaddr,dmsg.data,priority)。
[0088]
在本实施例中:请参阅图1,步骤4中:地址声明成功后,每5秒发送一次诊断信息,诊断信息实现方式是根据状态机变化而重新触发。
[0089]
请参阅图6,软件实现为:
[0090]
if(errorcode==1){senddata[0]=0x50;}
[0091]
else if(errorcode==2){senddata[0]=0x51;}
[0092]
else if(errorcode==3){senddata[0]=0xc1;}
[0093]
else if(errorcode==4){senddata[0]=0x51;}
[0094]
else if(errorcode==5){senddata[0]=0x54;}
[0095]
else if(errorcode==6){senddata[0]=0x51;}
[0096]
else if(errorcode==7){senddata[0]=0x51;}
[0097]
else if(errorcode==10){senddata[0]=0x51;}
[0098]
else if(errorcode==11){senddata[0]=0xc4;}
[0099]
else if(errorcode==12){senddata[0]=0x51;}
[0100]
else if(errorcode==13){senddata[0]=0x51;}
[0101]
else if(errorcode==14){senddata[0]=0xc0;}
[0102]
else if(errorcode==15){senddata[0]=0xc0;}
[0103]
else if(errorcode==16){senddata[0]=0xc0;}
[0104]
else
[0105]
{
[0106]
if(m_powerstatus==0xf0)
[0107]
{
[0108]
senddata[0]=0x00;
[0109]
}
[0110]
else
[0111]
senddata[0]=0x05;
[0112]
}
[0113]
if(chg_num==0)
[0114]
{
[0115]
senddata[1]=locaaddr;
[0116]
}
[0117]
else
[0118]
{
[0119]
senddata[1]=locaaddr;
[0120]
}
[0121]
if(errorcode==5||errorcode==2||errorcode==7||errorcode==3){
[0122]
senddata[2]=0x01;
[0123]
}
[0124]
else if(errorcode==4)
[0125]
{
[0126]
senddata[2]=0x03;
[0127]
}
[0128]
senddata[3]=0x01;
[0129]
if(errorcode==2)
[0130]
{
[0131]
senddata[4]=0x00;
[0132]
}
[0133]
else if(errorcode==5)
[0134]
{
[0135]
senddata[4]=0x01;
[0136]
}
[0137]
else if(errorcode==7)
[0138]
{
[0139]
senddata[4]=0x20;
[0140]
}
[0141]
else if(errorcode==4)
[0142]
{
[0143]
senddata[4]=0x10;
[0144]
}
[0145]
senddata[5]=0x7f;
[0146]
senddata[6]=0xff;
[0147]
senddata[7]=0xff;
[0148]
txmsg.id=canfreamid(dm_rv,locaaddr,priority_6);
[0149]
txmsg.type=can_type_data;
[0150]
txmsg.fmt=can_fmt_extid;
[0151]
txmsg.data=senddata;
[0152]
txmsg.len=8.
[0153]
在本实施例中:请参阅图1,步骤5中:状态机事件记录变化上报逆变器状态、充电器状态和逆变器直流侧状态,状态机使用无符号字符类型作为全局状态,单次上电有效,重新上电使用默认值。
[0154]
状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状
态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。状态机一般由三部分组成:状态、事件、动作。其中,事件也称为转移条件。事件触发状态的转移及动作的执行。
[0155]
在本实施例中:请参阅图1,步骤6中:在解析帧数据后立即进行指令应答,共4类指令区分,应答函数内部指令功能区分,且区别dgn。
[0156]
4类指令区分应答函数内部作为详细的指令功能区分。
[0157]
本发明将房车与逆变器、充电器等交互通信,包含数据广播,故障提醒和配置下发,能够统一设备类型,实现多设备同时连接,自动进行地址分配。
[0158]
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
[0159]
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1