串口通信与AISG

"AISG "

Posted by Hangdong on November 26, 2017

前言

从我09年参加工作开始到现在,工作了8年有余。软件中间件在其中占了很大比例,包括了OS层的适配,外设接入的适配,工厂测试适配,装备测试适配等等。严格上来说是一个到处打杂的,软件中间件高大上的内存管理,任务调度,进程和线程管理等等理论学习偏多,商用软件实现偏少。所以有时候有人问起搞没搞过中间件,还是心有怯怯。


正文

串口通信

我工作中涉及的是RS485和Modem两种连接方式来连接外设,传输方式是异步串行,半双工传输。传输报文的协议是HDLC协议。 HDLC的帧格式如下:

控制系统侧需要实现各种帧的编码和解码,并适配多个第三方厂家的设备接入,继而给应用层提供统一的接口,屏蔽底层的差异。

这部分的差异主要体现在各个第三方厂家设备的firmware更新程序,设备支持的功能,关键的主要是几发和几收功能差异。

AISG

AISG的工作逐步涉及到了从应用到底层的软件分层和模块设计,并且进一步延续了前面的工作

485和串口即见前文所述。OS wrapper这一层提供了驱动层的封装接口, 文件系统和log的封装,实现的方式相对简单,都是双方在头文件中约定好API接口,然后实现。通过makefile把各个源文件编译成.so动态库的方式将各个组件链接成image文件。

RSL这一层主要基于AISG 1.0/2.0协议的协议栈实现,主要设计和设备的通信链路的建立,监控,释放,以及通信链路上的设备的控制。

RAL这一层主要是应用层的实现,包括了主线程的启动,初始化,获取配置,加载配置,启动包括协议栈在内的其他线程,通过观察者模式注册AISG消息的回调处理。

Cam这一层主要是基于注册/观察模式的实现,网络配置管理界面通过消息机制传递控制信息到这一层,Cam则通过更新database来通知注册的观察者有新的数据进入。