以前总结了一回工业应用的技术栈方向,生成了一个技术导图已经做了罗列规划,内容也基本上包含了普通应用所需要的大部分方面,当然可能对于个人的技术见识来说会有遗漏空缺,这个还需要到具体项目时再进行调研和补充。

新的东西能带来新的观点。新接触到的的产线方案,最近做了相关的技术调研,对于软件应用的理解更深了一个层次。以前可能对工业应用的理解比较碎片化,没有一个完整的思路,接触过产线的完整方案以后,开始对一些专业的软件组织方式和内容有了一个系统化的认知,对系统的应用有更清晰的层级划分。
对于一个完整的工控系统,无论简单复杂程度与否,我觉得都可以可以划为三个层次,设备层、控制层和决策层。(如同网络分层,有人理解更丰富,可能会划分五层七层等一样)
设备层:也即硬件层,对产品进行感知和执行的单元,包括传感器、仪器仪表、条码、射频识别、数控机床、机器人、HMI主机等;
控制层:对设备层数据进行采集、保存和转发、并能够执行一些控制逻辑的单元,包括可编程逻辑控制器(PLC)、数据采集与监视控制系统(SCADA)、分布式控制系统(DCS)等;
决策层:对整个系统的实时状态进行展示、历史数据查询统计并能够对决策进行有数据支撑的预测。主要包括盖勒普制造执行系统(MES),及产品生命周期管理软件(PLM) 等。

而常用的单机系统应用,它其实也拥有系统的三个层次属性,三个层次里的内容退化成了模块化的软硬件设计,如果单机系统继续往上集成则是作为大系统设备层的子单元进行组合;

单系统应用是系统应用的常态化设计,作为系统的底层架构设计,单系统应用不管在简单和复杂系统中都要进行设计,是整个设计的基础。
目前单系统应用从软件划分来看可分为arm软件系统、x86软件系统和RTOS系统;

每种系统下都有自己对应生态的硬件和软件配套,当然也不乏一些跨系统的应用方案,但是毕竟占少数,所以根据不同的系统应用需求,来选择不同的单系统方案才更正确。
工业化控制设备从协议方式和厂家SDK这两方面着手,通用的协议方式可以支持不同厂家的的同类设备,对于像采集板卡这种需单独驱动控制的,各个厂家都有其sdk开发包,通常一个开发包可以完成其所有产品的控制。

很多通用库可以支持多种协议,比如ni或者安捷伦的visa库,比如libmodbus支持RTU、ASCII、TCP等;对于这些通用协议和通用库需要长期进行累积、封装和改进,以方便开发使用;
软件的组态化也就是可配置化,通过现有软件搭建组合成为一个控制系统,将功能模块化。和搭积木是一个道理,等搭建完成后,再来配置他们之间的关系和各个积木块的数据配置,最后生成使用软件。
组态的最高化境界是无需编程或者少量编程,全部通过配置操作完成所有软件模块的设计工作,极大的提高了软件设计的效率。最先通过硬件的组态,配置与硬件连接的协议、参数来实现硬件的控制,然后再进行数据组态,利用通用协议把采集到的数据进行解析后进行映射和保存等操作;最后是UI组态,只需简单拖拽和设置将数据显示模块和数据绑定进行显示。

软件想做到组态化应往三个方面进行设计和积累:
模块化:工业应用开发上将开发的通讯协议、硬件控制和数据管理等软件功能进行功能模块化封装,不同的设备支持不同的通用协议的话就使用不同的模块分别进行设置控制;
可配置化:对于不同模块可以通过配置的方式进行加载、运行和处理,
接口化:对数据的处理流做到明确的输入输出,做到可以链式连接的方式。
很多人对于单机软件的界面的设计风格,上回也进行了讨论,对于软件的配色等也进行了总结和选择;其实这只是软件界面的一个方面,对于一个工控软件来说,界面的风格可能不是需要很前卫和时尚,其功能也不会很复杂多变,但是对于用户来说,其实最基本的需求就是简洁、明确和高效。不需要对计算机有很深入的了解,也不需要对抽象数据进行学习,只是了解系统的运行,就可以很快的进行软件的使用,那么对于界面的仿真化就十分必要。
如下图的 给水控制系统,形象的系统设备展示和水流等动画,对于软件操作人员来说,可以很快上手,摆脱单调的数值显示刷新带来的枯燥感,可以形象的了解系统结构,清晰的观察数值的呈现节点,快速的定位系统问题。

软件的仿真化其实是比较困难的技术,其工作量也会大幅提升,如果想做到完美实现,最快是通过使用成熟的SCADA系统软件开发包进行开发,这个在当前市场上比较成熟了,可以持续了解和发现是否有免费好用的;
另外一个是先从开发自己的组建仿真控件库开始,逐步完善整个仿真界面系统,这方面现有选择其实并不多,需要支持透明、阴影、3D、控件缩放、抗锯齿、克服不同分辨率和DPI下的实现效果一致等,目前备选的方案有qt的qml技术 和 microsoft的wpf技术。


对于界面开发的技术路线选择根据实际情况而异,各有各的优势和限制,需根据实际情况进行选择;
qt优点:
qt缺点:
c#优点:
c#缺点:
嵌入式系统开发已经越来越成为一种趋势,具有系统专业化、低成本化、低功耗和方便携带的优点,当然开发的难度和门槛也比较高,需要对硬件知识和linux系统有较为深入的理解。目前主流的操作系统包括linux arm系统、andriod系统和实时系统(FreeRtos、Vxworks和ReWorks等);

对于工业控制,实时操作系统是绕不开的一个系统应用方向,在实时系统中来说可能分量最重的就是Vxworks了,这个也将作为下一步的学习目标,至少了解系统的基本组件和进程的调度方式,能够熟悉VxWorks的基本界面实现等,如果遇到有Vxworks或者相关的实时系统下的设计要求能够快速的进行系统方案的确定。

SCADA,全称为「supervisory control and data acquisition」它的意思是「数据采集与监控系统」,多用于可实现数据实时采集、设备过程监控、设备异常报警等,它的的底层数据支撑来源于分布式的传感器、仪表、设备和单机系统等节点,支持多种通讯协议,实现硬件系统与软件系统信息的交换,向上传递状态信息,向下执行控制命令,起到一个中心控制和数据管理的核心控制功能。
SCADA中间控制层其实在设计时是一个分层模块概念,它真正的实体存在于设备层(单机系统软件)的传输模块和决策层(数据服务器)的数据逻辑处理、数据存储和数据访问等功能中,它通常以模块的方式集成于系统之中,当系统发展到中大型的规模,才会出现scada服务器的设备。

SCADA对于的分布式的多点采集的需求是较为经典的管理方式,天然适合与产线系统、楼宇、自动化的管理,这方面的控制系统搭建还有很有必要学习和掌握的,目前市面上scada的多从组态的设计出发,加入上层管理系统的概念,组成MES的大的系统结构。scada真正的精髓是工控网关,既要支持设备层的多种设备协议,又要打通传输通道,将数据进行绑定、汇总和分发,所以其中的协议支持转换才是关键。

1.持续的完善工业协议和板卡的通用库封装,设计中进行软件的模块化,提高软件的可重用性,加速单机开发的时间。
2.界面UI的qml和wpf技术尝试,实现通用UI控件的组态化;
3.调研Scada系统的软件库,找到适合使用的完整方案;
3.linux arm系统配置和软件设计的初步实现;
4.VxWorks系统的学习和使用。
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手