大家好,
我是西门子工业自动化与驱动技术集团的一名热线工程师,负责人机界面产品(俗称HMI),包括WinCC,面板和工业计算机(IPC)。
热线上每天都会出现一些有趣的问题,有些纯粹跟技术相关,有些是过程比较有趣。随着西门子网站越办越好,我们也在想,能不能在网上跟大家分享这些热线上的趣事呢?而这种分享是不是会让更多有趣的事发生呢?
于是,我会尝试在这里时不时的跟大家聊些热线上的事。
今天想说的故事技术性并不强,只是有些峰回路转。
故事:
昨天,有个客户打热线说他的WinCC服务器客户机出问题了,不管在哪台台机器上切换画面,所有机器的画面都会跟着变。
于是,我问客户,你是在用变量控制画面变化吗?
客户说,没有啊。
我不着急,说:你是在切换画面按钮里改变变量值,而用变量值控制画面变化吗?
客户说,没有啊。
我说。。。客户说。。。我说。。。客户说。。。我说。。。客户说。。。
总而言之,客户说他就是用按钮的组态对话框做的画面切换。
于是,我茫然了。
昨天下午跟同事们讨论这个问题,大家敲打了我。
于是我给这位客户再打电话,我说一步,让他做一步。
结果,他是用按钮控制变量变化,用变量控制画面变化。
分析一:
这个问题在热线上并不罕见,一般是用切换画面的按钮改变某个变量值(用函数SetTagXXX,相应函数说明可以在在线帮助里查到),而在全局脚本(或者别的什么地方)里根据这个变量值的变化来控制画面的变化(用函数SetPictureName)。
这种组态方式比用标准画面切换的方法复杂,但是灵活,可以用一个按钮打开不同画面:按钮先根据不同条件给变量赋值,而不同的值导致打开不同的画面。
问题在于,在服务器客户机系统里,如果这个变量是全局的(指所有的服务器、客户机上),也就是说这个变量的变化发生在所有计算机上,因而所有计算机上的全局脚本都会被执行,导致所有计算机上的画面都会跟着变。
总的来说这种编程方式多转了一个弯(一般来说if...then SetPictureName()就很简洁了,无需用变量来间接改变画面),呵呵,技术流给项目实施带来了隐藏的小麻烦 :)。
解决这个问题的方法是,在按钮里用脚本直接根据情况切换画面。使用局部变量的方法则会使前面提到的灵活性受损。
用按钮的组态对话框做的画面切换,由于画面运行系统不是全局的,所有不会有这个问题。
分析二:
你得到的确定答复未必是真相,因为答复你的人知道的不是真相。
祝大家周末愉快!
Lemon
2010年3月19日