本文主要是介绍基于苏标Adas协议的主动安全平台搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前说过基于1078的视频监控平台,下面我们聊聊基于苏标Adas协议的主动安全平台。
苏标协议是对部标808协议的一种拓展,如果我们需要搭建苏标Adas主动安全平台,必须要先了解部标808的协议。了解过苏标协议的肯定明白,苏标是有个附件服务器的概念,其实这个附件服务器就是一个808的网关,然后根据苏标协议进行解析得到对应的报警图片,报警视频以及其他报警信息。
这个就是1078视频监控的实现效果截图(这块的知识点用到搭建1078部标流媒体服务器),测试环境并非是实际运行车辆,是自己在卡座上架的一台服务器。不用在意视频内容细节。
苏标Adas附件服务器就相对简单些。
当我们的808通讯网关接收到带有附件的报警或者事件信息后,需要向终端下发消息ID为:0x9208的附件上传指令,这个时候我们根据协议格式将附件服务器的IP与端后组包后发给设备,设备接收到0x9208的指令后就会同附件服务器建立tcp通讯,然后开始向附件服务器发送报警附件(图片,视频,bin文件等等)。
附件服务器就是一个需要加入苏标协议定义的消息ID的808网关。下面我将整个通讯流程用一个简单的图片描述出来:
虽然流程很粗糙,通讯机制大概就是这个意思。
界面效果展示:
除此之外还有最操蛋的报警配置(消息ID:0x8103),高级驾驶辅助系统报警参数都有几十个,这个指令组包的时候还是需要认真对待的,稍有不慎就可能漏掉些信息。
下面是我组包的部分代码,之前有对808其他指令组包,所以很多方法都是通用的:
/// <summary>/// 主动安全Adas配置指令组装/// </summary>/// <param name="fAssetID"></param>/// <param name="adas"></param>/// <returns></returns>public string getAdasAlarmConfig(string fAssetID, MT_Combine_AdasAlarmADAS adas){string fContent = string.Empty;fContent += "010000F364";fContent += "38";fContent += Convert.ToString(adas.FAlarmSpeed, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FAlarmVoice, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FProactive, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FAPTime, 16).ToString().PadLeft(4, '0');fContent += Convert.ToString(adas.FAPDistance, 16).ToString().PadLeft(4, '0');fContent += Convert.ToString(adas.FSAPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FSAPTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FPResolution, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FVResolution, 16).ToString().PadLeft(2, '0');fContent += string.Format("{0:X}", Convert.ToInt32(adas.FAlarmID, 2)).PadLeft(8, '0');fContent += string.Format("{0:X}", Convert.ToInt32(adas.FEventID, 2)).PadLeft(8, '0');fContent += "00";//预留字段#region 障碍物报警配置fContent += Convert.ToString(adas.FOADistance, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FOACSpeed, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FOAVTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FOAPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FOAPTime, 16).ToString().PadLeft(2, '0');#endregion#region 频繁变道报警配置fContent += Convert.ToString(adas.FFLCTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFLCCount, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFLCSpeed, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFLCVTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFLCPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFLCPTime, 16).ToString().PadLeft(2, '0');#endregion#region 车道偏离报警配置fContent += Convert.ToString(adas.FLDSpeed, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FLDVTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FLDPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FLDPTime, 16).ToString().PadLeft(2, '0');#endregion#region 前向碰撞报警配置fContent += Convert.ToString(adas.FFCTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFCSpeed, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFCVTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFCPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFCPTime, 16).ToString().PadLeft(2, '0');#endregion#region 前向碰撞报警配置fContent += Convert.ToString(adas.FFCTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFCSpeed, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFCVTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFCPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FFCPTime, 16).ToString().PadLeft(2, '0');#endregion#region 行人碰撞报警配置fContent += Convert.ToString(adas.FPCTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FPCSpeed, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FPCVTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FPCPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FPCPTime, 16).ToString().PadLeft(2, '0');#endregion#region 车距监控报警配置fContent += Convert.ToString(adas.FVDMDistance, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FVDMSpeed, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FVDMVTime, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FVDMPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FVDMPTime, 16).ToString().PadLeft(2, '0');#endregion#region 道路标志识别配置fContent += Convert.ToString(adas.FRSPNumber, 16).ToString().PadLeft(2, '0');fContent += Convert.ToString(adas.FRSPTime, 16).ToString().PadLeft(2, '0');#endregionfContent += "00000000";//预留字段return combineInsContent(fContent.Length / 2, fAssetID, fContent, "8103");}
整个1078的视频+苏标Adas的集成历时两个多月,其中视频流媒体这块最麻烦也是最耗时的地方。目前算是整体功能性的东西已经完成。
这篇关于基于苏标Adas协议的主动安全平台搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!