驱动器软件系统架构

本文由资深工控行业专家撰写,分享了驱动器软件系统架构的设计理论与实践经验,探讨了DSWSAR(DriverSoftWareSystemArchitecture)在提高开发效率、降低复杂性和增强可维护性方面的作用。文章深入解析了模块化设计、通信机制及运行实体概念,适用于追求高实时性系统开发的工程师。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

驱动器软件系统架构思考
本文作者从事工控行业很多年,开发过PLC,功能安全控制器,工业无线网络,光纤传感器等多款工业产品,现在正专注开发驱动器。每一款产品的设计架构和思路都有所不同。驱动器的软件系统是我见过的实时性要求最高的,查找很多地方都没有找到相关的软件设计理论和指导方法。本文以作者开发实践,总结和提炼一些在设计中的经验和方法,希望能对今后的工作,以及读者一些启发。
(目的:总结设计理论,提出方法论,指导软件活动)

DSWSAR (Driver SoftWare System Architecture)是驱动器软件系统架构,作为驱动器的软件架构,可以建立一个标准化平台,减少设计的复杂性,增加灵活性,提高开发效率,降低开发难度,具有较高的可维护性。
建立DSWSAR目标主要有:
1.建立独立于硬件的分层软件架构
2.为开发扩展应用提供方法论,包括制定无缝的软件架构堆叠流程,并规定如何将功能工艺应用整合到驱动器。
3.制定各种模块的接口规范,作为应用软件整合标准,以便在不同的硬件平台复用。

驱动器分层概述

模块设计理论
软件是由组件及其组件之间交互构成的。

(1)软件模块SWM(SoftWare Module)
应用层的软件由SWM(SoftWare Module)软件模块组成,模块中封装了部分或全部的驱动器的某部分独立的功能,包括对具体功能如何实现以及对应的描述,如IO模块,通信适配器模块,这些模块只是定义了软件的功能,但是与具体的硬件没有联系。
(2)模块通信端口MCP (Module COMMUNICATION PORTS)
端口的Ports用来和其他软件模块SWM通信,

端口用来和其他的模块通信,通信的内容为Data elements 与operations,其中data elements为Sender/Receive通信方式,operations用Client/Server通信方式。
例如: 功能软件和性能软件模块使用Sender/Receive通信,状态机模块和升级模块使用Client/Server提供查询当前状态port。
Sender/Receive Client/Server 示例
通信内容 数据 操作 modual0
{
data0;
get_data0();
set_data0();
}

modual1
{
data1;
get_data1();
set_data1();
modual1_deal()
{
modual0.openDoor();//操作,比如开门
}
}
将data0赋值data1为 数据操作,使用的是Sender/Receive,
modual1 使用Modual0提供的operation,使用的是client/server

模块A和模块B即可运行在同一运行实体(CPU),也可以运行在不同的实体,不用修改逻辑代码。
原子模块
位使用其他模块服务的为原子模块,原子模块可以发送和接收数据及其提供服务,但是在模块内部不调用其他模块服务。

组合模块
含有一个或多个原子模块的模块为组合模块。

运行实体
运行实体指的是程序模块运行的实体,比如CPU,FPGA或虚拟机等

运行函数
每个模块至少一个或多个可供OS周期或触发调度的函数。
1对1模块通信

特点:
1.module0和module都各自的操作空间,module的数据需要从其他module拷贝再操作

2.module1的接收区域只能通过通信写,其他方式不可以操作

1对n模块通信

sender/receive
Module1和Module0和Module2通信需要独立的通信通道PORT,或者PORT类型为消息队列,可以区分消息类型

同步通信
模块A调用调用模块B的服务,只有当服务执行完成后模块A才能继续执行。
异步通信
模块A调用调用模块B的服务,模块A只触发模块B的相关服务,不需要等待执行完成。

无应答通信
模块A sender消息给模块B,B接收到消息不会给模块A回应消息。
有应答通信
模块A sender消息给模块B,B接收到消息会给模块A回应消息。

无缓冲通信
模块sender与模块receive之间通信没有缓冲,如果receive没有来的急处理

有缓冲FIFO通信
1.FIFO
2.事件组,每个事件都有个标志

有优先级通信

同拍通信
每个task周期调用runnable,有很多情况下,每个module调用需要每一拍都合拍。
驱动器模块化框图

事件驱动-状态机编程
简单状态机
复杂状态机
操作系统
无OS
有OS
各OS比较分析

调试
数据可视化和可追踪调试
高实时性的系统对数据的时序特别重要,周期执行任务的数据比操作系统触发执行的数据对数据时序更加敏感,很多情况下只差一拍时序数据就会错误。调试使用在线仿真设置断点很难监测到错误。这时候需要使用”示波器”把每一拍的数据生成曲线并显示。

设计模式
轮询模式
server/client模式
发布与订阅模式
master/slave

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值