前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[专家] SCADA 大咖之路

[专家] SCADA 大咖之路

作者头像
科控物联
发布2022-03-29 16:31:08
1.4K0
发布2022-03-29 16:31:08
举报
文章被收录于专栏:科控自动化

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软件开发者角度来看待问题。一个给定的软件功能,通常的开发过程是怎样?如果出错了,会发生在哪个环节?是功能本身设计的缺陷,还是运行环境的问题?有了编程思维,会为我们诊断这类问题带来意想不到的的好处。

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个错误提示窗口。

创建项目-错误窗口1

创建项目-错误窗口2

创建项目-错误窗口3

因为错误描述中明确提及了是权限问题,所以就去检查登录计算机的用户是否正确设置了权限。经过检查,确认登录用户隶属于Administrators 组,也隶属于 SIMATIC HMI 组。不是用户权限的设置导致的问题。

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

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

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

不正常的 temp 文件夹权限

正常的Temp 文件夹权限

对于B系统和C系统来说, Users的权限中没有“写入”权限,而且也没有勾选“特殊权限”。而对于 A系统和D系统来说,虽然也没有“写入”权限,但是基本权限中勾选了“特殊权限”。进入特殊权限的设置界面中,我们可以看到其高级权限中具有“创建文件/写入数据”的权限。

正常的 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无法正常使用的例子,只是为了从技术角度说清楚兼容性可能存在的影响。大家在使用软件时遇到问题,一定要首先排除掉兼容性可能性,从而减少很多不必要的时间浪费和不必要的争论,为顺利的项目调试和执行打下坚实的基础

4、操作系统 – 需要了解的那些技术

操作系统,是 WinCC软件运行的环境。为了在其上安装、运行WinCC,起码要对其操作界面非常熟悉。图形界面,快捷命令自不必说。关于操作系统内部原理之类的材料,也能在网上找到很多。通过这些文档、视频可以全面地了解操作系统到底是怎么工作的。作为 WinCC 的使用者,我们应该不太会期待自己能成为 Windows 的专家。但站在 WinCC 的角度上,多掌握些与 WinCC 相关的 Windows 知识,对我们的 WinCC 成长之路还是大有裨益的。

操作系统,其实也是一种程序,一种特殊的程序而已。以Windows 为例,正因为有了它,我们的应用程序去访问各种硬件才变得更容易,我们才可以同时在一套硬件平台上运行多个应用。为了达到这些目的,操作系统其实做了很多繁杂的后台工作。我们的目的是在操作系统上更好地应用WinCC,没有必要去深究Windows 太深的内容。但是对于其中的某些内容,还是要多了解些的。例如权限管理和网络管理相关的内容,这些内容在我们使用 WinCC 时基本都要涉及到。

说到权限管理,跟我们相关的主要有Windows 用户及用户组的概念,以及文件及文件夹的权限。

WinCC 对于Windows 的用户,根据各种应用情形,就有各种要求。在WinCC的帮助系统中搜索“定义操作系统的访问权限”,会列出WinCC 各种应用场景下对Windows 用户的权限要求。这包括WinCC 安装、准备运行、操作WinCC、访问分布式系统、本地项目访问等应用场景。涉及到Administrators、Users、SIMATIC HMI、SIMATIC HMI VIEWER等Windows 用户组的设置。在正常的生产环境下,考虑到系统的安全性,绝不是登录用户一直都具有管理员权限的。

为此,我们需要深入理解 Windows 的用户及用户组的概念。用户是隶属于用户组的,然后有很多用户组。每个用户组可以有不同的权限定义。这些用户及其权限的设置,直接影响我们操作文件及文件夹时的权限。就像上一篇讲的因为temp文件夹不正确的访问权限设置,导致了WinCC 无法正常运行的问题。

当我们安装WinCC 时,安装程序除了向计算机拷贝普通程序及服务程序文件、注册服务程序及修改注册表之外,还会对一些特殊的文件夹进行相应的设置。例如打开计算机共享的设置界面,我们可以看到如下一些跟 WinCC 相关的共享文件夹及其权限的设置。

上图中的 SCRIPTFCT 就是一个特殊的共享文件夹,里面存放有WinCC 脚本相关的库文件。该文件夹已经在安装时就被设置成共享文件夹,并且将共享权限唯一分配给 SIMATIC HMI组的用户。同时文件夹的访问权限中,设置SIMATIC HMI 组的用户对其具有所有访问权限。如果用户意外改动了此文件夹的共享及安全设置,就会出问题。

上图中还有一些名称如“WinCC_Project_xxxx”的共享文件夹。这些文件夹都是WinCC的项目文件夹。它们的共享设置就包含了 SIMATIC HMI 及SIMATIC HMI VIEWER 两个组的用户,都是只有读权限。而访问权限,这两个用户组也有不同的设置。SIMATIC HMI 的权限是全部权限,而SIMATIC HMI VIEWER 组则不具有修改权限。这些不同的权限设置都和前述的WinCC不同的应用场景具有对应关系的。

说到网络管理。诸如IP地址、子网掩码、网关、DNS,NetBIOS名称解析,子网、跨子网,域与工作组,交换与路由,终端总线,防火墙等概念都和 WinCC 的跨计算机应用息息相关。如果想用好WinCC,并且具备一定的排错能力,这些概念必须深刻掌握。一些要求这里不赘述,感兴趣可以浏览如下链接,查看WinCC 中的相关要求:https://support.industry.siemens.com/cs/us/en/view/868014/zh。

以上提及一些具体的知识点,还有些相关的知识同样重要。Windows 中的程序可以分为普通应用程序,通常就是我们登录计算机后,双击其exe文件才运行的程序。这些程序通常都属于登录用户。还有一种叫服务程序,通常就是计算机开机后,就已经自动运行起来了。这些程序通常都挂在 SYSTEM 、NETWORK SERVICE等用户上。对于WinCC来说也一样会有这两类程序。下图截自Windows任务管理器,列出了一些 WinCC 相关的程序。有些程序就是服务程序,属于SYSTEM用户。有些程序就是普通程序,属于felix登录用户。

服务程序的运行通常会依赖操作系统的一些服务。如果操作系统的服务运行不正常,那这些服务程序就会运行不正常。如果服务程序没有正常运行起来,那就会导致依赖这些服务程序的普通应用程序无法正常工作。由于WinCC 安装时某些服务程序运行不正常,或者操作系统的问题导致某些系统服务运行不正常,又或者某些杀毒软件阻拦了某些服务程序的启动或运行,都可能会产生不期望的结果。

Windows 有很多服务程序,网上也能找到相关的说明。WinCC 的服务程序的说明,官网并没有公布相关的资料。如果感兴趣,只能自己去观察比对。当理清WinCC这些普通程序和服务程序及功能之间的关系,以及其与Windows 服务程序之间的关系后,在遇到WinCC错误时,就可以从操作系统的角度去进行一些更有效的分析和诊断。

还有一个重要的概念就是动态链接库(DLL)。追溯DLL 产生背景,应该是在计算机应用早期,为了解决单体应用程序体积大及占用内存过多而采取的一种解决方案。多个应用程序共享的功能库不用再静态链接到每个单体程序中,从而减小其程序体积。另外在单体程序运行时,内存中只存在一份共享的功能库,从而节约内存空间。Windows 本身,以及其它大部分应用程序,现在都在广泛地使用着DLL的技术。这种技术的好处很明显,但也确实带来了令人困扰的兼容性问题。

例如WinCC V7.2需要调用操作系统的A.DLL。然后操作系统升级了,新版本的A.DLL与老版本之间存在一些差别。这些差别导致 WinCC V7.2 使用新的DLL时无法实现原来既定的功能了。这就产生了兼容性的问题。再比如计算机中同时安装了WinCC 和STEP 7,二者共享使用了B.DLL。这样,B.DLL就在计算机中只存在某个版本的一份文件。当WinCC 软件版本保持不变,STEP 7 单独升级了。升级后的 STEP 7 使用了B.DLL的新版本。但是WinCC 的版本还不支持这个新版本的 DLL,这就在WinCC 和 STEP 7 之间产生了兼容性问题。这也就是有些网友抱怨的WinCC 和STEP 7 都是一家公司的软件,为什么还存在兼容性问题的原因。

前述因DLL版本导致 WinCC 与操作系统或WinCC 与STEP 7 之间的兼容性问题,我说得比较极端,是为了便于理解。实际情况可能是这种兼容性并不会导致软件打不开或者直接报错,而是在某些特殊的条件下才会触发一些奇怪的问题。因此排查起来很困难。

与DLL相关,Windows API 也是一个重要的概念。在WinCC 中实现某些扩展的功能时,API 技术就可以派上用场了。例如WinCC 要通过以太网和某第三方设备C-Device进行通信,但是WinCC 中又没有C-Device的驱动。此时就可以根据C-Device提供的通信协议,在WinCC中通过调用操作系统的以太网通信相关的API函数,编写与C-Device 的通信程序。也有可能C-Device 提供了自身功能的设备API函数,这样WinCC 就可以直接在程序中加载其DLL函数,从而实现与C-Device 的通信。所有这些功能的实现,都需要大家对DLL概念及API 概念有足够的理解。

计算机名称、用户名称大家都已经熟悉不过了,那么 SID 呢?如下图所示,用户名称是 felix,SID则由一长串数字组成。

实际上,某些应用程序在识别一个Windows 账户时使用的并不是大家熟知的那个字符串的用户名称。例如在 WinCC 的选件 PH 中,冗余应用下就会通过识别用户的 SID 来进行处理。正常安装操作系统的主、备两台计算机登录用户的 SID 肯定是不同的,程序运行不会有任何问题。但是因为某客户将安装好操作系统及软件的主计算机硬盘内容,使用Ghost软件直接复制到备计算机。这导致主、备计算机的 SID完全相同。进而导致PH 冗余系统工作紊乱引发停产,带来了不必要的损失。如果该客户知道 SID的概念,在复制备计算机之后使用工具修改下SID,那么这个问题就可以避免了。

林林总总,也只能是管中窥豹地跟大家聊聊一些Windows 的事情。但操作系统可不是Windows的天下哦,尤其在当下。云计算的兴起,容器技术的广泛应用,眼看着Linux 的应用场景离我们越来越近。就像工业领域的边缘计算技术,因为其使用了容器技术,而容器技术是基于Linux的。所以深入理解与应用边缘技术,Linux这个堡垒是必须要被拿下的。连Windows 都开始支持 Linux 子系统(WSL)来拥抱Linux。我们还有什么理由不去学习它呢。还有,如果说得再远点儿,很多客户的应用操作单元不断向手机、Pad延伸。Android 和iOS是不是也要了解一下呢。

操作系统,既然我们所有应用程序都绕不过去,那我们就花点心思在它上面

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档