基于苏标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');
            #endregion
            fContent += "00000000";//预留字段
            return combineInsContent(fContent.Length / 2, fAssetID, fContent, "8103");
        }

整个1078的视频+苏标Adas的集成历时两个多月,其中视频流媒体这块最麻烦也是最耗时的地方。目前算是整体功能性的东西已经完成。

猜你喜欢

转载自blog.csdn.net/qq_17486399/article/details/102781738
今日推荐