以前总结了一回工业应用的技术栈方向,生成了一个技术导图已经做了罗列规划,内容也基本上包含了普通应用所需要的大部分方面,当然可能对于个人的技术见识来说会有遗漏空缺,这个还需要到具体项目时再进行调研和补充。
1.系统结构
新的东西能带来新的观点。新接触到的的产线方案,最近做了相关的技术调研,对于软件应用的理解更深了一个层次。以前可能对工业应用的理解比较碎片化,没有一个完整的思路,接触过产线的完整方案以后,开始对一些专业的软件组织方式和内容有了一个系统化的认知,对系统的应用有更清晰的层级划分。
对于一个完整的工控系统,无论简单复杂程度与否,我觉得都可以可以划为三个层次,设备层、控制层和决策层。(如同网络分层,有人理解更丰富,可能会划分五层七层等一样)
设备层:也即硬件层,对产品进行感知和执行的单元,包括传感器、仪器仪表、条码、射频识别、数控机床、机器人、HMI主机等;
控制层:对设备层数据进行采集、保存和转发、并能够执行一些控制逻辑的单元,包括可编程逻辑控制器(PLC)、数据采集与监视控制系统(SCADA)、分布式控制系统(DCS)等;
决策层:对整个系统的实时状态进行展示、历史数据查询统计并能够对决策进行有数据支撑的预测。主要包括盖勒普制造执行系统(MES),及产品生命周期管理软件(PLM) 等。
而常用的单机系统应用,它其实也拥有系统的三个层次属性,三个层次里的内容退化成了模块化的软硬件设计,如果单机系统继续往上集成则是作为大系统设备层的子单元进行组合;
2.单系统应用
单系统应用是系统应用的常态化设计,作为系统的底层架构设计,单系统应用不管在简单和复杂系统中都要进行设计,是整个设计的基础。
目前单系统应用从软件划分来看可分为arm软件系统、x86软件系统和RTOS系统;
每种系统下都有自己对应生态的硬件和软件配套,当然也不乏一些跨系统的应用方案,但是毕竟占少数,所以根据不同的系统应用需求,来选择不同的单系统方案才更正确。
2.1单机的工业控制设备
工业化控制设备从协议方式和厂家SDK这两方面着手,通用的协议方式可以支持不同厂家的的同类设备,对于像采集板卡这种需单独驱动控制的,各个厂家都有其sdk开发包,通常一个开发包可以完成其所有产品的控制。
很多通用库可以支持多种协议,比如ni或者安捷伦的visa库,比如libmodbus支持RTU、ASCII、TCP等;对于这些通用协议和通用库需要长期进行累积、封装和改进,以方便开发使用;
2.2 单机的软件组态化
软件的组态化也就是可配置化,通过现有软件搭建组合成为一个控制系统,将功能模块化。和搭积木是一个道理,等搭建完成后,再来配置他们之间的关系和各个积木块的数据配置,最后生成使用软件。
组态的最高化境界是无需编程或者少量编程,全部通过配置操作完成所有软件模块的设计工作,极大的提高了软件设计的效率。最先通过硬件的组态,配置与硬件连接的协议、参数来实现硬件的控制,然后再进行数据组态,利用通用协议把采集到的数据进行解析后进行映射和保存等操作;最后是UI组态,只需简单拖拽和设置将数据显示模块和数据绑定进行显示。
软件想做到组态化应往三个方面进行设计和积累:
模块化:工业应用开发上将开发的通讯协议、硬件控制和数据管理等软件功能进行功能模块化封装,不同的设备支持不同的通用协议的话就使用不同的模块分别进行设置控制;
可配置化:对于不同模块可以通过配置的方式进行加载、运行和处理,
接口化:对数据的处理流做到明确的输入输出,做到可以链式连接的方式。
2.3 单机的仿真化
很多人对于单机软件的界面的设计风格,上回也进行了讨论,对于软件的配色等也进行了总结和选择;其实这只是软件界面的一个方面,对于一个工控软件来说,界面的风格可能不是需要很前卫和时尚,其功能也不会很复杂多变,但是对于用户来说,其实最基本的需求就是简洁、明确和高效。不需要对计算机有很深入的了解,也不需要对抽象数据进行学习,只是了解系统的运行,就可以很快的进行软件的使用,那么对于界面的仿真化就十分必要。
如下图的 给水控制系统,形象的系统设备展示和水流等动画,对于软件操作人员来说,可以很快上手,摆脱单调的数值显示刷新带来的枯燥感,可以形象的了解系统结构,清晰的观察数值的呈现节点,快速的定位系统问题。
软件的仿真化其实是比较困难的技术,其工作量也会大幅提升,如果想做到完美实现,最快是通过使用成熟的SCADA系统软件开发包进行开发,这个在当前市场上比较成熟了,可以持续了解和发现是否有免费好用的;
另外一个是先从开发自己的组建仿真控件库开始,逐步完善整个仿真界面系统,这方面现有选择其实并不多,需要支持透明、阴影、3D、控件缩放、抗锯齿、克服不同分辨率和DPI下的实现效果一致等,目前备选的方案有qt的qml技术 和 microsoft的wpf技术。
对于界面开发的技术路线选择根据实际情况而异,各有各的优势和限制,需根据实际情况进行选择;
qt优点:
- 跨平台开发,在linux和windows下都有较好的支持;
- 使用c++语言有较好的通用性;
qt缺点:
- 开发效果可能不如c#;
- 库较少,需要自己进行开发;
c#优点:
- windows平台下有优秀的显示效果;
- 有较为丰富的界面和样式库进行选择
c#缺点:
- c#在一些较为冷僻的工控上可能支持不太好,需要结合c++进行联合开发;
- linux下不支持;
- 还有就是c#不开源,所以对于国产化上可能会有一些限制。
2.4 其他系统开发
嵌入式系统开发已经越来越成为一种趋势,具有系统专业化、低成本化、低功耗和方便携带的优点,当然开发的难度和门槛也比较高,需要对硬件知识和linux系统有较为深入的理解。目前主流的操作系统包括linux arm系统、andriod系统和实时系统(FreeRtos、Vxworks和ReWorks等);
对于工业控制,实时操作系统是绕不开的一个系统应用方向,在实时系统中来说可能分量最重的就是Vxworks了,这个也将作为下一步的学习目标,至少了解系统的基本组件和进程的调度方式,能够熟悉VxWorks的基本界面实现等,如果遇到有Vxworks或者相关的实时系统下的设计要求能够快速的进行系统方案的确定。
3.SCADA系统
SCADA,全称为「supervisory control and data acquisition」它的意思是「数据采集与监控系统」,多用于可实现数据实时采集、设备过程监控、设备异常报警等,它的的底层数据支撑来源于分布式的传感器、仪表、设备和单机系统等节点,支持多种通讯协议,实现硬件系统与软件系统信息的交换,向上传递状态信息,向下执行控制命令,起到一个中心控制和数据管理的核心控制功能。
SCADA中间控制层其实在设计时是一个分层模块概念,它真正的实体存在于设备层(单机系统软件)的传输模块和决策层(数据服务器)的数据逻辑处理、数据存储和数据访问等功能中,它通常以模块的方式集成于系统之中,当系统发展到中大型的规模,才会出现scada服务器的设备。
SCADA对于的分布式的多点采集的需求是较为经典的管理方式,天然适合与产线系统、楼宇、自动化的管理,这方面的控制系统搭建还有很有必要学习和掌握的,目前市面上scada的多从组态的设计出发,加入上层管理系统的概念,组成MES的大的系统结构。scada真正的精髓是工控网关,既要支持设备层的多种设备协议,又要打通传输通道,将数据进行绑定、汇总和分发,所以其中的协议支持转换才是关键。
4.软件技术的方向
1.持续的完善工业协议和板卡的通用库封装,设计中进行软件的模块化,提高软件的可重用性,加速单机开发的时间。
2.界面UI的qml和wpf技术尝试,实现通用UI控件的组态化;
3.调研Scada系统的软件库,找到适合使用的完整方案;
3.linux arm系统配置和软件设计的初步实现;
4.VxWorks系统的学习和使用。