SCADA进阶之路-2

[复制链接]
查看17962 | 回复0 | 2024-3-2 01:24:47 | 显示全部楼层 |阅读模式
SCADA进阶之路-1

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 相关的共享文件夹及其权限的设置。

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

上图中的 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登录用户。

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

服务程序的运行通常会依赖操作系统的一些服务。如果操作系统的服务运行不正常,那这些服务程序就会运行不正常。如果服务程序没有正常运行起来,那就会导致依赖这些服务程序的普通应用程序无法正常工作。

由于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则由一长串数字组成。

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

实际上,某些应用程序在识别一个Windows 账户时使用的并不是大家熟知的那个字符串的用户名称。

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

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

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



5、SCADA深入理解及学习经验点滴

在前面几篇文章中,针对需要掌握编程知识及操作系统知识的重要性讲了很多。对这些知识的掌握程度,可能影响甚至决定一个工程师在SCADA进阶之路上能够走到的高度。但请注意,这些知识或者说技能可能并不会立即对SCADA的应用产生效果。

本文列举了SCADA的几个相关功能,针对这些功能进行总结。通过分析这些内容,帮忙大家找到深入学习的方向。有了努力的方向,再配以适当的学习方法,这样才能事半功倍。

继续看之前,要明确我们进阶的目标。我们学习SCADA,不仅仅是要完成一个一个的项目。更重要的是,做这些项目的同时,我们可以不断扩充自己的知识范畴及对相关知识的理解深度。这样,我们才能在日积月累的工作中不断拔高自己的技术能力,实现在职业生涯中的不断跃进。

西门子的SCADA软件有好几种。咱们就以WinCC 为例来说几个可以深入研究的点。通过对这几点的说明,让大家领会研究切入的方向。掌握此规律后,对于其它功能的深入理解,也就可以找到方向了。

咱们先说说WinCC 的 Web 功能。

在 WinCC V7.2 版本之前,WinCC 的Web 功能,使用 WinCC/Web Navigator 这个选件来实现。Web Navigator 服务器使用的技术是 IIS + ASP。

所以,在那个时期,想更好地理解 WinCC  的Web Server 功能,就需要去研究 IIS 及 ASP  技术。当然,如果只是简单地应用 Web Server 的功能,不想深入研究,当然可以不用理会它。知道一些常规参数的设置界面的使用,做做Web 项目还是足够的。否则,最好能够研究下 IIS 搭建一个网站服务器的架构及实现方法等内容。

对于动态页面的实现技术 ASP 最好也能多研究下。到了 WinCC V7.3 SE 之后的版本,WinCC 的Web 功能增加了 WinCC/WebUX 选件。通过WebUX 实现的 Web 页面,浏览器适应性更好。通过手机等移动设备也都可以浏览 WebUX发布的画面。之所以能做到这点,那是源于其Web Server 的实现技术有了新的变化。WebUX 使用的是 IIS + iisnode 的技术框架。服务器主体还是延用 IIS技术,但是引入了IIS的扩展模块iisnode。它将 node.js 这种Web 服务端脚本语言实现网页的技术很好地与 IIS结合在一起。所以,为了弄清楚WebUX 的底层原理,那么去研究 iisnode、node.js,当然也包括基本的 HTML5、CSS、JavaScript 就变得很有必要。



再说说 OPC 在SCADA软件或者自动化领域的应用。

WinCC V7.0 版本之前,仅支持 OPC DA 技术。从 WinCC V7.2 之后,才开始支持 OPC UA 技术。

在 OPC DA 的年代,使用好这项通信技术,COM/DCOM 的技术一直是个重要的坎。我记得在跨计算机进行通信时,OPC DA 的服务器和客户端能否正常通信,很大程度上受制于 DCOM 的配置及用户权限的配置是否正常。

因为COM/DCOM设置繁琐,而且对跨子网的应用并不友好,加之这个技术更多地还是应用在Windows环境下,导致其应用受限。后来推出了 OPC UA 技术,可以说 COM/DCOM繁琐设置的梦魇就彻底消失了。

因为OPC UA不再基于COM/DCOM技术,不再受限于Windows环境。在通信安全层面,也采用了安全证书的技术。若想成功配置 OPC UA 客户端和服务器的安全通信,那么证书技术必须要理解。而要了解证书技术,就牵扯到对称加密、非对称加密、Windows 的证书管理机制及软件本身对证书的管理机制等内容。

这些内容都是可以深入研究的方向。而不是仅仅按照软件说明里面说的将某个证书文件拷贝到某个文件夹下,然后就可以通信了那么简单。

对SQL Server数据库的理解同样重要。正常使用 WinCC 时,我们根本不需要关注其数据库 SQL Server 的具体配置及数据库内部的库、表等概念。因为WinCC 已经将涉及到的操作都做到了界面上。我们在组态WinCC 的过程中,相关的参数设置都自动写入数据库中了。

但若在使用 WinCC 时遇到了某些问题,能对数据库进行多一些分析,就多了一个诊断的方向。我记得若干年前遇到的一个 WinCC V6.2.3 的一个事件方式无法正常实现变量归档的问题,就是通过修正数据库内容来解决的。

当时就是通过分析WinCC的组态数据库,查找跟变量归档相关的一些数据表。最后锁定到dbo.PDE#TAGs、dbo.PDE#ARCHIVES及dbo.PDE#TIMES几个表。

然后发现在dbo.PDE#TIMES这个表中的定时器名称为
[img=50%,auto]https://mmbiz.qpic.cn/mmbiz_png/m0pUjY0HTXZxO1wPX6icRoWMgwDaR7bCN3Y9XwMk8Y0hAqTSDXDL5EfdxGrZALsNNBpuXpGrxiaa3D1Agtt980hQ/640?wx_fmt=png[/img]


根据上下文的理解,将其更正为500ms,变量归档恢复了正常。

推测表中本来应该存放的是500ms,但是ms 被错误地汉化了,并且因为数据库不支持中文而出现了乱码,导致了程序无法识别这个定时器。

还有些新技术也开始不断在WinCC 中应用。从WinCC V7.5开始就支持将数据传输至云端,对应的功能是Cloud Connector,使用的是 MQTT协议。

当前的WinCC V7.5 SP2,Cloud Connector中不仅支持 MQTT协议,还增加了对 REST 接口的支持。这些新的IT技术,MQTT也好,REST也好 ,都是我们需要与时俱进去研究的方向。因为IT与OT的融合会越来越深,这是一个大趋势。

综上罗列这样一些点,就是想告诉广大会员朋友,其实产品的很多功能都有其底层依赖的技术。仅知道产品功能本身,会使用这些功能,这只是达到了会用这个产品的层面而已。花时间去研究相应的底层技术,才是SCADA进阶的必经之路。同时也是扩充自己的知识,提高自己能力时需要努力的方向。

明确了我们需要研究这些底层技术之后,接下来需要做的就是怎么去学习或者研究它们了。每个人都有自己的一套学习方法,这里不想泛泛地去谈那些学习方法。只想抛出一些自己在技术支持过程中的点滴经历,给大家一些思考。权当是抛砖引玉吧。

我最想说的一点是养成阅读文档的习惯。这里说的文档是泛指,包括多种形式。还是拿WinCC来举例。每次WinCC 发布新版本时,都会在西门子官方网站(https://support.industry.siemens.com/cs/products?mfn=ps&lc=zh-CN)上发布一个产品通知类型的文章。形如下图的样子。

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

通过查看产品通知信息,可以了解到产品新增的功能、兼容性等简要信息。

在此基础上,再阅读一下软件帮助中的安装/发行说明。如果手头没有WinCC环境,看不了帮助,也可以在网站上阅读在线的帮助文件。在安装/发行说明中,详细地说明了该版本软件安装的各种注意事项,及操作的注意事项。

有的客户觉得没有时间去阅读这些说明,有的客户觉得看这些东西没啥用,凭自己经验安装和使用就可以了。其实这些不严谨的做法,可能会给日后项目运行埋下隐患。

例如在安装/操作说明中已经明确提及了某个限制条件,但是使用者没看到所以没有照做而踩雷。然后为了排查问题花费了大把的时间,最终发现软件已经有言在先了,走了弯路。对于问题的解决,有些只需要改个参数就可以继续使用。

而有些问题就没有那么幸运了,可能只有重新安装软件才能解决。正所谓“磨刀不误砍柴工”。因此,做事情有章法,严谨专业些,这是从一开始就要养成的习惯,会终生受益。

其实对于这一点,多年前的我也不以为然。也是跟亚太区的德国技术支持打了多年交道之后,才逐渐意识到它的重要性。

另外一点就是要有刨根问底儿的精神,忌不求甚解。这点很好理解,就不赘述了。技术上的事情,要一层一层地理解到根上,才说明你真正理解了。对各种知识的一知半解的理解,最终都会成为你进阶之路上的绊脚石。

最后一点想说的是信息的获取能力。

在我们的技术支持工作中,经常要针对客户的问题,去技术支持网站、软件帮助、论坛、内部资源库等地方去寻找问题的答案。

可是,总会出现有的同事能搜到相近的答案,而有的同事就搜不到。这里的差别其实就是信息的检索能力。现在网络很发达,网上知识信息的数量也足够丰富。

如果大家也面临在网上找不到自己想要的知识的局面,那么不妨多了解下网络信息相关的检索方法。

充分利用好不同的搜索引擎,擅于使用不同的关键字进行搜索,同一知识的解释“货比三家”,充分利用好网络中的浩瀚资源来助力自己的进阶之路。

本帖子中包含更多资源

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

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

本版积分规则