本帖最后由 幸福至上 于 2018-3-15 23:51 编辑
最近在做一个机器控制项目,需要实现以下目标功能:1、控制机器进行设定的动作,并可靠准确可靠地执行;
2、实现和远程服务器的数据交互;
3、通过GUI开放用户界面,以实现机器的操作;
机器的硬件架构:由基于Linux的嵌入式中控平台和其它遍布于机器上的各功能控制模块组成,它们之间通过总线进行通信交互。
这应该是工业和汽车领域比较通用的硬件架构方式.
硬件架构
再来说说嵌入式中控部分的软件设计,要实现以上3个目标功能,我分析应用程序应至少有三大功能模块:
1、机器控制模块:通过总线通信,控制机器上的各个功能模块,以实现既定的机器控制动作;
2、网络通信模块:通过网络通信实现和服务器的数据交互,并根据交互数据,控制机器进行相应的动作;
3、用户交互模块:通过在屏幕上显示用户图形界面,实现对机器的控制;
可以看出,2,3两个功能模块也要对机器进行控制,那就需要和机器控制模块进行交互。
那么这个程序设计就有两种方式:
一、将所有功能模块做在一个工程里,以单进程方式运行,每个不同的功能模块以线程方式运行。模块之间交互通过线程通信实现。
这种方式觉得有几个问题:
1)、每个功能模块根据细分也会有多个子功能模块,也会均分别以线程方式运行,那么这样所有模块的所有线程就会有一个
共享数据结构,但实际上三大功能模块的内部子模块,是不需要去访问这个共享数据结构的,从程序的模块化设计来说,应该要尽量低耦合,所以
这里觉得不够规范。
2)、所有程序做在一起,不方便开发,特别是多人合作这个项目,如果不小心改到自己设计范围之外的,就很容易导致问题。虽然有SVN等代码管理
工具,但觉得各部分还是应该尽量独立,以减少出错的可能性。
3)、用户界面,准备用QT来做,这又是一个独立的程序,那么运行界面时,就需要把正常的机器控制和数据交互功能关闭,才能进行用户控制,
否则可能会导致对机器的控制冲突。
二、三大功能模块分为三个工程,每个工程独立设计,以单独的程序运行,它们之间通过进程间通信交互。这样的话,三大功能模块进程只要按照预定的
接口即可进行无冲突的通信,并且如果其中单个功能模块程序有BUG,并不会影响到其它功能模块的正常运行,也便于调试。
但这种方式也有一些疑惑,比如:进程间应该采用哪种通信,才能稳定可靠地满足多进程之间的相互交互?
实际地说,这种项目所需的软硬件架构其实应该是在工业控制和汽车控制都通用的。第一次做这种项目,欢迎有兴趣的朋友一起来讨论下,这种架构
方式是否合理,有哪些方法。;)
|