基于苏标Adas协议的主动安全平台搭建

2023-12-01 04:10

本文主要是介绍基于苏标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协议的主动安全平台搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/439735

相关文章

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv