SCADA进阶之路-1

[复制链接]
查看24845 | 回复0 | 2024-3-2 01:13:28 | 显示全部楼层 |阅读模式


1、序言

干一行爱一行。你爱SCADA这一行吗?如果你爱这一行,那么一定不希望一直做些基础性的工作,一定会将成为这一行的佼佼者作为你的目标。

作为一名在西门子从事SCADA工作多年的工程师,想大家聊聊SCADA进阶方面的话题。

根据内容不同,会分多次发出。

整个系列文章不打算谈及SCADA软件的某个功能的具体操作方法。

如果对这些内容感兴趣,请移步1847其它板块。

此系列文章,仅针对自己的SCADA工作经历,谈一些自己的经验或者说经历。

希望这些经验或者经历能够为刚入门的你,或者正在SCADA路上彷徨的你提供一些启发。

如果你已经是SCADA大神了,那就从此页面划走吧。

不管是谁,只要对谈论的话题感兴趣,都欢迎在评论区留言。

对于一个SCADA工程师,如果希望在技术上再上升一个台阶,应该怎么办?方向在哪?一万小时定律大家肯定都听过。

若想在某项技术能力上异于常人,那么舍得在其上投入足够的时间和精力是必不可少的。

但是每个人的时间和精力都是有限的,将大量的时间和精力投入在哪里,就会是一个重要的选择。

接下来我将跟大家探讨自己在SCADA成长过程中曾经努力的方向。

在1847聊SCADA,当然聊的主要就是西门子的SCADA软件。

细数下西门子的 SCADA,无非包括WinCC V7.x,WinCC OA V3.xx,WinCC Portal V1x, WinCC  Unified V1x。

这些SCADA软件,都可以用来做上位机画面,实现生产的监视与控制功能。

每款软件都有自己独立的特点。

上述任何一款产品,想达到熟练应用的程度,没有大量时间的投入很难说自己真正掌握了。

对于那些常规的组态功能,通过不断地做项目,在项目制作的过程中去发现软件的各个功能的实现方法、组态过程,逐渐了解其特点,最后达到熟练应用的程度。

这个学习路线对于那些相对简单、不需要太多背景知识的功能的掌握,完全没有问题,只是手熟而已。

但对于一些高级功能的实现,通常都需要借助脚本来实现。这就对使用脚本的能力提出了要求。

为了更好地掌握SCADA软件的脚本,了解或者理解编程的方方面面知识就是我们需要努力的方向。



西门子的SCADA软件,很多高级功能都是通过脚本来实现的。

WinCC V7.x 支持不只一种脚本,这包括 C、VBS 及 VBA脚本,另外还支持 ODK扩展开发包。

WinCC OA 则更像是一个类似 C 语言的二次开发平台,C 语言的应用几乎贯穿整个组态过程。

WinCC Portal 支持 C及VBS脚本,WinCC Unified 则支持 JavaScript脚本,而二者又都支持 Openness。

所以,为了更好地掌握组态软件的高级功能,必须熟悉相应脚本在软件中的应用。

而想更好地理解脚本的应用,光靠组态软件中的那些函数说明是远远不够的。

这需要工程师站在编程开发的维度上去理解脚本。

其实除了脚本,软件的排错、故障的诊断等等同样需要具备一定的编程知识。

如果你对编程概念很了解,甚至于知道怎么开发一个组态软件,那么将会对现成的组态软件有更好的理解。

同时在处理软件运行中出现的问题时,也会有全新的分析问题的视角,这对处理问题将大有裨益。

除了编程知识,我们还要花些精力在操作系统上。

我们的SCADA软件是运行在特定的操作系统上的,可以理解,操作系统就是SCADA软件的生存环境。所以为了让SCADA软件生存得更好,为其营造一个良好的生存环境也是至关重要的。

为此,我们需要了解操作系统的一些知识。谈及操作系统,其实这是一个很大的话题。当然,对于 SCADA 工程师来说,并不需要面面俱到。抓住一些跟SCADA软件应用相关的一些知识就可以了。

另外,随着数字化的呼声越来越高,数字化的应用也在不断地出现和更新。

一些IT知识也在不断地向OT层面渗透,也在不断地影响着SCADA层面的一些应用。

为此,立足于跟上整个数字化发展的大趋势,SCADA工程师的知识也需要向上扩展,掌握更多的IT知识及IT/OT 融合知识,这在将来会为你带来更多的竞争优势。

综上,我们聊到了编程知识,聊到了操作系统,聊到了IT知识等。

在后续的内容中,我们将展开这些话题,以亲身经历来跟大家聊聊为什么这些内容这么重要,我们要怎么去学习这些内容。



2、高级语言编程的重要性

高级语言编程知识是WinCC外延知识中最重要的一块。基本上,任何一项技术或者知识,我们都可以将其分为基本部分与扩展部分(或者说高级部分)。

对于这门技术或者知识的应用,掌握基本部分就可以应付大部分的应用情况。但是如果想更好地、深入应用其高阶功能,通常都需要掌握其高级部分内容。

对于SCADA知识来说,这个规则同样适用。如果在SCADA相关知识及应用范围内,我们画个圆圈将知识二分,圈内表示SCADA软件本身的知识,圈外表示SCADA之外的知识。

为了能够处理那些相对难的、深入的问题,我们就需要掌握圈外的知识。我们可以称这些圈外的知识称为SCADA的外延知识。对于外延知识的掌握范围、掌握程度就决定了SCADA知识能够掌握的最高程度。

为什么说编程知识重要,因为在SCADA软件中,需要脚本的地方,需要代码来实现一些特定功能的地方非常多。

对于WinCC V7.x来说,在画面设计中使用脚本将带来非常大的便利性。

当要实现对象的动态化,你可以只通过组态的方式来实现。常规的动态应用,通过动态化窗口实现都没有问题。但是对于相对快速一些的动画,你需要使用动画触发器来实现。而动画触发器是需要借助 VBS脚本来实现的。

而且对于大量的动态化操作,使用动态化窗口将远比不上直接编写代码来得更快捷,后期维护修改也更方便。对于画面对象属性的修改,简单的方法是逐个打开每个对象的属性窗口,然后逐一修改。

如果是一个大型的项目,并且画面内容基本不变,针对不同的工厂,只需要适配不同的参数即可的那种场合。

最高效的方法就是使用 VBA 脚本来进行统一修改。(注意,VBA和VBS是不同的哦。)

除了画面设计,其它如变量与通信应用,数据交互应用,外部扩展应用等,也都存在着脚本的解决方案要优于直接组态的方案,甚至有时只能通过脚本来实现。

除了前述的 VBS及 VBA脚本,某些情况下,还会使用 C 脚本。



在Portal WinCC V1x 中,使用的脚本包括C和VBS,使用情况与WinCC V7.x 类似。当然,它的Openness扩展功能,对C# 的支持最友好。

不管怎样,对于前述两款软件来说,脚本还仅是用于扩展其功能,或者实现一些特殊的功能。但是对于WinCC OA来说,则完全不同。脚本贯穿于软件操作的全部,不管是简单还是复杂的功能。

可以这么说,如果没有一定的编程基础,WinCC OA 入门有些困难。WinCC OA中的 C 脚本功能也很强大,支持多线程编程。可以很容易地在代码中直接创建一个新的线程,用来执行那些耗时的操作,而不影响画面主线程的响应速度。

WinCC OA 提供的大多数系统功能与函数都支持二次修改。使用者可以对这些系统函数进行适当的修改,来满足自己特定的要求。

例如WinCC OA 的报警显示界面就是可以完全定制的。诚然,要做到这些定制功能,就更需要具备足够强大的编程能力了。

Portal WinCC Unified 是西门子最新的SCADA软件,它与前述3个软件有明显区别。其界面显示完全是基本 HTML5标准的。它的架构也跟前者有很大差别。最明显的一点就是脚本语言变为 JavaScript。

对于我们这些工控领域的工程师,由于大部分工控组态软件都很少使用JavaScript作为脚本语言。因此,开始学习并且掌握好JavaScript,就成了更好地使用Portal WinCC  Unified的必经之路。

看到这里,你可能会想,我大概明白了编程在SCADA应用中的重要性。但是具备如此编程能力,是要我成为程序员吗?

答案当然不是。

我们真正需要的只是要具备一定的编程思维就够了。具备了一定的编程思维之后,我们就可以更好地理解脚本在SCADA中的实现过程及作用,我们就可以更好地使用编程知识来解决脚本的相关问题。

我们前面提到了很多种语言,C、VBS、VBA、C#、JavaScript,大家并不需要达到相应语言的程序员程度。因为我们在SCADA中能够用到的功能跟编程语言相关的内容,只是该语言全部功能的一小部分。但是为了理解一个语言,我们不能仅着眼于一个语言用到的几个函数,几个语法。



我们需要从整体结构上理解这门语言。

我们也不需要对某个语言那么熟练,对其每个函数都信手拈来,就像该语言的程序员那样熟练。

我们需要的是知道其有什么,用的时候去网上搜索即可。

掌握一定的搜索和对搜索结果的辨识技巧,这样才能将编程领域内的经验拿来为SCADA所用。

在SCADA应用中,我们通常不会去写很长的代码。

我们需要的是面对一个特定的问题,当常规方法实现不了时,怎么通过脚本来实现。

对于互联网这个庞大的知识库,我们需要具备将庞大的编程语言相关的内容整合的能力。

擅于将辨识后的他人的编程语言的经验进行整合,得到能够解决我们SCADA问题的能力。

通常我们在编程语言方面并不需要造新轮子,只需要使用好旧轮子就已经不错了。

面对如此多的编程语言,以及那些将来新出的语言,我们怎么来应对呢?我们需要的是至少熟悉一种编程语言,同时具备快速学习一种新语言的能力。

首先说说为啥要至少熟悉一种编程语言。任何技能,只说不练都是假把式。

既然要深入理解编程知识,那就必须得实践过才行。

你需要清楚该编程语言的开发过程,软件程序的结构。要有常用功能的开发经历,例如界面、通信(例如以太网通信)、多线程、Windows API 应用等应用程序。

至于是真实的项目还是演示程序倒无妨。只有完整地亲历过这些事情,你才能真正了解一个应用程序的开发始末及其运行过程,以及在软件实现相应功能时,编程语言与操作系统到底是怎么交互的。



这些事情对建立编程思维很重要。例如,当你真正开发过多线程程序后,你才能真正理解在Windows 中进程是什么,线程是什么。理解了这些概念,你才能真正理解在SCADA软件中脚本的线程到底是怎么回事,才能理解正确高效使用脚本的一些要求。而不仅是人云亦云,只是简单地拷贝粘贴别人的代码。又如,你实践过API调用的编程开发方式,你才能对操作系统有更好的理解。

关于操作系统的知识,我们会在后续的文章中跟大家讨论。

通过对一种语言的实践过程,来建立一定的编程思维能力。这样,当在网上找到别人编写的一大段代码时,才能在浏览一下,大概就能弄清程序的结构脉络。

在理解程序结构的基础上,再去研究其细节的功能实现。才能不至于一下子就掉到某个函数的细节上,而丢失了对整体的把握。才能将其更好地整合到自己的应用中。

具体的方法其实也很简单,就是要舍得投入时间和精力。以C++为例,喜欢看视频的,就下载个C++的学习视频。喜欢看书的,就找个经典的C++教程。然后系统地学习一下。

注意,一定要学习完所有的章节。我们假设的这个视频或者书籍的内容是系统完整的。只有完整地从头到尾都学完,才能系统地掌握这门语言。对这一门语言建立的系统认知,将会在你学习第二门语言时受益。因为其实各种编程语言之间都是有相通之处的,你付出的努力都会在某个不经意的时刻最终得到回报的。

那接下来咱们说说快速学习一种新语言的方法。通过第一门编程语言的学习,你已经具备了一定的编程思维。

套用第一门编程语言的情况,对比去了解新语言的差别在哪里。学习的要点还是要放在语言的运行环境、程序结构、如何启动、怎么运行等方面。因为有了第一门语言的基础,这第二门语言的学习,就不用完全被学习材料牵着鼻子走了。

我们要带着系统化学习一门语言的那些要点,逐一获取答案并验证。通过发现与第一门语言的相同点与不同点,将会进一步加深对编程的理解,强化编程思维。然后不断总结这种学习要点,形成自己的风格。逐渐就会对陌生的编程语言不再打怵,任何一门新语言拿来,只要按照这个套路过一遍,基本上就入门了。

剩下的就是根据自己的需要,对其某个方面进行深入的学习了。



经过这些,相信你应该具备一定的编程能力了。手边常备一些编程相关的网站收藏很有必要。我常用的一个编程网站收藏是菜鸟教程。它就像是一个字典。当我需要学习某个新语言时,或者查询某个旧语言的关键字或者函数名称时,就会去翻看这个字典。

最后要说一下,我们掌握这么多的编程知识仅是为了让自己具备一定的编程思维。这样,我们就可以在SCADA应用中,根据客户的需要,通过编写相应的代码来实现相应的功能。

编程思维还有一个重要的作用,发生在我们诊断SCADA问题的时候。简单来说,此时我们会站在SCADA软件开发者角度来看待问题。一个给定的软件功能,通常的开发过程是怎样?如果出错了,会发生在哪个环节?是功能本身设计的缺陷,还是运行环境的问题?有了编程思维,会为我们诊断这类问题带来意想不到的的好处。

综上,我们强调了在SCADA进阶之路上,编程知识的重要性。希望这些内容能带给你帮助。欢迎在文末留言。



3、操作系统 – 兼容性到底重要不

提起操作系统,大家都不陌生。也许你正在用电脑看这篇文章,又或许你正在手机上看。但不管你用什么方式看,你的设备上都一定会安装有操作系统。

我们使用的各种应用程序都是运行在这些操作系统上的。我们的应用能否正常运行,从某种角度来说,很大程度上就依赖于其能否与操作系统很好地匹配。

换个词就是大家常说的兼容性。

对于“兼容性”,这是一个老生常谈的话题。在不同的场合,热线上、技术论坛里、找答案等,多次被提及。

对于客户来说,有的人选择相信它,遇到问题时首先会去解决兼容性的问题。而有的客户并不认同,认为拿兼容性的问题来说事儿,就是甩锅的行为。在我看来,是不是兼容性的问题,其实是需要 case by case 地分析才能有定论的。

而对于实际的情况,我们技术支持或者客户本人,基本上都不会去花费太多时间和精力去进行这样的分析。

所以,这就成为了一个各说各话的存疑。但无论如何,在使用软件时遇到问题,首先排除掉兼容性的可能性,这么做一定可以减少很多不必要的时间浪费和不必要的争论。

之所以有的朋友不太认可兼容性的问题,可能是因为他们运气太好,从未遇到过兼容性的问题。

又或许他们没有亲身经历过,因兼容性问题导致的各种稀奇古怪的影响结果。

所以导致他们并不重视应用软件与操作系统的兼容性问题。



接下来就给大家说一个因兼容性问题导致软件不能正常工作的故障现象,并给出其分析过程,让广大1847会员感受一下操作系统不兼容的真实影响。

为了拿事实说话,针对不同操作系统下使用WinCC 的情况,我做了一项测试。目的就是看能否找到一个真实的,由于操作系统与WinCC 不兼容导致后者运行不正常的案例。

在测试中使用的这些不同渠道的并不规范的操作系统,名称都使用字母来代替,共使用了3个不同来源的操作系统Win10 1909版本,下面分别称为 A系统、B系统及C系统。

一个原版操作系统称为 D 系统。

测试软件使用的是 WinCC V7.5 sp1,以下简称WinCC。

因为测试过程很长,涉及内容也多。

篇幅所限,如下只挑干货说。

首先测试安装。4个版本的操作系统都可以正常安装 WinCC。没有出现任何报错信息。

然后测试WinCC使用。A系统和D系统没有问题,都可以正常建立新项目。并可以对项目进行画面、变量、归档等常见功能的组态。也可以正常激活运行。

但是B系统和C系统就没有那么幸运了。双双卡在建立新项目上。而且错误是相同的。都是在WinCC 中建立新项目时弹出如下错误提示窗口1。单击“确定”按钮,会依次再弹出2个错误提示窗口。

[img=50%,auto]https://mmbiz.qpic.cn/mmbiz_png/m0pUjY0HTXYDEYeUlODt2uYib1Y1Z55ibKl25fwibm6OLaPTZICIyhhDCN144WhX16uqo05zNd9SpnKojGqZytkibQ/640?wx_fmt=png[/img]

创建项目-错误窗口1

[img=50%,auto]https://mmbiz.qpic.cn/mmbiz_png/m0pUjY0HTXYDEYeUlODt2uYib1Y1Z55ibKrEC4HfCWPiccjTcvR5OJDBMcnVo6dkzzfiacGr1RHqQ2dLMBV1icFu6xQ/640?wx_fmt=png[/img]

创建项目-错误窗口2

[img=50%,auto]https://mmbiz.qpic.cn/mmbiz_png/m0pUjY0HTXYDEYeUlODt2uYib1Y1Z55ibK2cPdRBJrDFJQJsibWNNZf4XaT5KqknJWaTawtiaBSWn2LribG0s3Cnqzw/640?wx_fmt=png[/img]

创建项目-错误窗口3

因为错误描述中明确提及了是权限问题,所以就去检查登录计算机的用户是否正确设置了权限。

经过检查,确认登录用户隶属于Administrators 组,也隶属于 SIMATIC HMI 组。

不是用户权限的设置导致的问题。

然后使用Process Monitor 监视WinCC 建立新项目的操作过程。在监视记录中看到了如下图所示的一条错误记录。

[img=50%,auto]https://mmbiz.qpic.cn/mmbiz_png/m0pUjY0HTXYDEYeUlODt2uYib1Y1Z55ibKia33gYkDuBAewxs1QiaiaebHwcNc3DQPWhZl78oDicoW15eK0ufnGjaPUA/640?wx_fmt=png[/img]

该错误记录表明WinCC项目管理器在C:Windows temp 文件夹下创建临时文件时,被操作系统拒绝了。

那我们来对比下不正常的B系统/C系统与正常的A系统/D 系统中,此文件夹的权限,如下图所示。

[img=50%,auto]https://mmbiz.qpic.cn/mmbiz_png/m0pUjY0HTXYDEYeUlODt2uYib1Y1Z55ibKaERLy97ywSibenZcPKcRzANI11ImurLfWbTCaE5OF6ibeOBxqUgI360A/640?wx_fmt=png[/img]

不正常的 temp 文件夹权限

[img=50%,auto]https://mmbiz.qpic.cn/mmbiz_png/m0pUjY0HTXYDEYeUlODt2uYib1Y1Z55ibKOFDkSknVIYY2Tkb9nuGhFtsWZTRFk8GNqRqpGyF808VtNPk0EXv7YQ/640?wx_fmt=png[/img]

正常的Temp 文件夹权限

对于B系统和C系统来说, Users的权限中没有“写入”权限,而且也没有勾选“特殊权限”。

而对于 A系统和D系统来说,虽然也没有“写入”权限,但是基本权限中勾选了“特殊权限”。

进入特殊权限的设置界面中,我们可以看到其高级权限中具有“创建文件/写入数据”的权限。

[img=50%,auto]https://mmbiz.qpic.cn/mmbiz_png/m0pUjY0HTXYDEYeUlODt2uYib1Y1Z55ibKp54WoHRm4YYtpL16HKDmiaoaHvARG1U2BOX18nODv8ggGnib6PiavFjicQ/640?wx_fmt=png[/img]

正常的 Temp 文件夹 Users特殊权限设置

通过上述分析,我们得到了如下结论。

因为B系统和C系统中,用户没有对 temp 文件夹的写入权限。而WinCC 创建项目的时候,要在 temp 文件夹中创建一些临时文件,以完成项目的创建工作。因为权限问题,导致 WinCC 创建文件失败,进而导致新建项目失败。

看到这里,你可能会有个想法:“将temp 文件夹的写入权限勾上是不是就正常了呢?”。

你想的没错。只要勾上写入权限,WinCC 确实就恢复正常了。既然这么简单的事情,为啥我们要花费这么多笔墨来唠叨呢?

- WinCC 能正常安装,就一定能正常使用吗?谁知道呢?

- 这样一个看上去很奇怪的问题,结果竟是只要勾选一个权限设置就解决了。如果不是花费时间来分析下,谁知道呢?

- 对于B系统和C系统,勾选了temp 文件夹的“写入”权限就可以正常建立项目并激活运行了。那WinCC 所有的其它功能都会正常吗?谁知道呢?

- A系统可以正常建立简单的项目,并可以激活。那A系统就一定能正常使用WinCC 所有的功能吗?谁知道呢?

- A系统也是自制的非原版系统,但是它却没有这样的问题。所以,在B系统和C系统上出现这样的问题,完全是随机的事情。

哪个自制系统一定没有兼容性的问题?谁知道呢?

- 不正常的B系统和C系统的 temp 文件夹是小写字母开头的。而正常的A系统和D系统是大写字母开头的。是不是B系统和C系统的制作者不小心修改了这个文件夹,导致了现在的问题。谁知道呢?

总之一句话就是,使用不兼容的操作系统带来的结果就是不确定性。

我们使用WinCC 的目的,基本都是为了给最终客户做项目。

在做项目这件事情上,相信没有人会喜欢不确定性。所以,在操作系统的选择这件事情上,我建议大家都依规办事。

WinCC 软件的安装注释中有明确的要求,安装的硬件条件和软件条件。我猜想有的人并未照着执行,甚至根本看都没看过。正所谓磨刀不误砍柴工,在你正式开始WinCC的工作之前,花上点时间仔细阅读下安装注释,绝对对你有益无害。

养成正确的、良好的工作习惯,绝对会让你受益终生。

话外:关于兼容性,本文埋了一个雷没有说出来。大家可以在评论区中留言指出该雷。排雷有奖。

本文举例说明了不同操作系统中WinCC无法正常使用的例子,只是为了从技术角度说清楚兼容性可能存在的影响。

大家在使用软件时遇到问题,一定要首先排除掉兼容性可能性,从而减少很多不必要的时间浪费和不必要的争论,为顺利的项目调试和执行打下坚实的基础。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则