-
1 知识介绍
-
2 PPT
-
3 学习视频
-
4 讨论
-
5 超级工程
一、系统构成

通过系统拓扑图可以看到,需要一台PC机作为上位机,也就是可以直接发出操控命令的机器;一个网关,通过它将我们获取到的数据上传到云平台;三个CAN节点,一个CAN网关节点;分别需要两个温湿度传感器和一个火焰传感器;一个USB接口的CAN调试器,通过它可以看到终端节点数据。
二、系统数据通信协议分析
CAN数据帧又分为标准格式和扩展格式,它们的区别在于长度的不同而已,其他内容的格式基本相同。通过观察表中的帧ID可以发现,这里使用的是标准格式的数据帧。其中帧类型RTR为1位,数据为0时是数据帧,为1时是远程帧;标识符ID类型IDE也是一位,当数据为0时表示标准帧,为1时表示扩展帧;最后是数据长度和数据段,前者是数据的大小,后者是存放数据的位置。

网关节点需要通过 RS-485 网络将采集到的传感器数据上报至网关。其中表中的每个字段的说明如下:帧起始符:固定为 0xDD;地址域:为发送节点的地址,低位在前,高位在后;如地址为 0x1234,则 DstAddr0=0x34,DstAddr1=0x12;命令码域:0x01 代表上报 CAN 网络的数据,0x02 代表上报 RS-485 网络的数据;数据长度域:固定为 0x09;传感器类型:1 温湿度传感器,2 人体红外传感器,3 火焰传感器,4 可燃气体,5 空气质量传感器,6 光敏二极管,7 声音传感模块,8 红外传感模块,9 心率传感 器,10 其他;数据域:占 2 个字节,高 8 位和低 8 位。如:对应温湿度传感器,高 8 位为温度 值,低 8 位为湿度值。则温度 24℃对应 0x18,湿度 64%对应 0x40;校验码域:采用和校验方式,计算从“帧起始符”到“数据域”之间所有数据的累加和,并将该累加和与 0xFF 按位与而保留低 8 位,将此值作为 CS 的值。

三、系统工作流程分析
网络中的 CAN 终端节点每隔 1.5 秒钟上传一次数据至 CAN 网关节点。CAN 网关节点收到传感器数据后,通过 RS-485 网络将其上报至网关。同时,CAN 网关节 点每隔 1.5 秒也将自身采集的温湿度数据上报给网关。网关收到传感器数据后,将通过 TCP 协议上传至云平台。

四、完善工程代码
先是打开资源包里的CAN基础工程(路径:..\CAN总线通信应用\CAN_BASE\MDK-ARM\CAN_BASE.uvprojx);然后在如下函数中依次添加右图的代码:user_can.c的void CAN_User_Config(CAN_HandleTypeDef* hcan )函数。
上面的图是user_can.c的void can_start(void)函数;下面的图是user_can.c的void can_stop (void)。再是在user_can.c的uint8_t Can_Send_Msg_StdId(uint16_t My_StdId,uint8_t len,uint8_t Type_Sensor)添加下图的所有函数。接着在user_can.c的HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)同样添加下图函数。将该工程配置为网关节点工程,在main.c的int main(void)函数中添加如下代码 紧接着编译代码,在该工程目录(CAN_BASE\MDK-ARM\CAN_BASE)中找到CAN_BASE.hex;第五步在资源包: “..\CAN总线通信应用\”目录下新建文件夹 “网关节点固件”;第六步将CAN_BASE.hex剪切到“网关节点固件”文件夹中,重命名为CAN_GATEWAY.hex第七步将该工程配置为终端节点工程,在main.c的int main(void)函数中将上一步添加的代码删除,添加新的代码;第八步是编译代码,在该工程目录(CAN_BASE\MDK-ARM\CAN_BASE)中找到CAN_BASE.hex;最后一步是在资源包:“..\CAN总线通信应用\”目录下新建文件夹“终端节点固件”,将CAN_BASE.hex复制到“终端节点固件”文件夹中

