ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Intouch单机版核心功能实战:标记名字典、动画连接、脚本与报警配置

Intouch单机版核心功能实战:标记名字典、动画连接、脚本与报警配置 咱们这篇接着上一篇往下走。上一篇我讲了Intouch单机版从安装到建第一个空白工程的完整过程还带着你拖了几个按钮、文本框把WindowViewer跑起来看了一眼效果。如果你已经照着操作过一遍现在应该能打开Intouch Application Manager、能进WindowMaker、能新建窗口并且在窗口上摆几个控件了。但是很多新手走到这一步就卡住了画面是能画出来了可按钮点了没反应文本框里永远显示0数据根本不动。这其实是Intouch入门最难过的一道坎——从画了一张图到做了一套能跑的人机界面中间缺的恰恰是最核心的几块拼图标记名字典、动画连接、QuickScript脚本、历史趋势与报警配置。这篇我就按这个顺序把这四个核心能力挨个讲透最后再补充单机版最容易被坑的部署细节。内容依然以单机版为主线不扯复杂的分布式架构保证你在没有PLC、没有服务器的情况下也能用电脑把一套能活的监控界面完整跑起来。1. 标记名字典Intouch画面与数据的总闸1.1 为什么必须先理解标记名Intouch里最核心的概念就一个标记名Tagname。你可以把它理解成给每个数据起的一个门牌号。画面上显示的液位值、按钮控制的电机启停状态、趋势曲线要记录的温度变化全部通过标记名来访问而不是像Excel那样直接写死一个单元格。这和H5开发里用变量名存取数据是一个道理只不过Intouch的变量不叫变量叫标记名而且在Intouch里所有标记名的定义、类型、初始值、读写权限都集中在一本总账里——这就是标记名字典Tagname Dictionary。任何窗口、任何脚本要访问数据都必须先在这本总账里登记。我在培训新手时经常打一个比方标记名字典是小区物业的业主名册画面上的温度计、液位罐是业主家的水表电表脚本是抄表员。抄表员要读哪户的数据必须先查名册确认这个户号存在数据才能流动起来。名册里没登记画面画得再漂亮数据也是死的。1.2 单机版新建标记名的两种方式打开方法在WindowMaker里点击菜单特别→标记名字典或者直接按快捷键CtrlD。打开的对话框就是Intouch的总账。新建一个标记名点新建然后选择类型。单机版入门阶段你只需掌握四种最常用的类型英文用途举例内存离散型Memory Discrete按钮的启停状态、阀门开关、报警灯亮灭内存整型Memory Integer计数器、设备台数、整数型数值内存实型Memory Real温度、压力、液位、流量等模拟量内存字符串型Memory Message操作员姓名、报警描述、提示信息注意看这些类型前面都有内存两个字。内存的意思是这个变量的数据只保存在电脑内存里不跟外部设备通信。单机版入门阶段用内存类型就足够把逻辑跑通后面接PLC、接OPC Server时再建I/O离散型I/O整型I/O实型这类与外部交换数据的标记名。举个例子我们现在建三个标记名模拟一个储罐的液位监控Tank1_Level内存实型初始值0.0表示当前液位Tank1_HighAlarm内存离散型初始值0表示高报警状态Tank1_Volume内存整型初始值0表示累计产量在建标记名时还有一个容易忽略但很有用的字段叫初始值。WindowViewer每次启动时内存型标记名都会被重置成这个初始值相当于程序上电时的默认状态。如果某个值每次开机都必须重新设定那初始值就设成你期望的默认值如果不关心初始状态设成0或空字符串就行。1.3 命名规范与变量名大小的坑建标记名时命名建议直接按设备位号_含义的规则来比如Pump1_State、Tank2_Temp、LineA_Pressure。项目小的时候你可能觉得随便起名无所谓但一旦画面几十张、脚本上百条命名不规范的工程维护起来能让人辞职。尤其是后面你可能会用导出导入功能批量建点命名越规范批处理越省事。这里有个特别容易坑新手的点标记名本身不区分大小写但标记名字典里不允许出现重名的标记名哪怕只是大小写不同也不允许。我在一个项目里就见过有人建了Pump1_Run然后又试图建pump1_RUN直接被系统拒绝。这不是什么大问题但能免则免统一用小写加下划线最省心。1.4 删改标记名时的连锁反应警告标记名字典里删除或修改一个标记名会引发连锁反应——所有引用过这个标记名的画面、脚本、趋势控件、报警配置全部失效。Intouch会弹出一个警告框列出有多少处引用将受影响要求确认。所以我的建议是入门练习阶段随便折腾没关系但做真实项目时标记名一旦建好并被画面引用尽量不要直接删改。改个拼写错误更稳妥的做法是先把引用改掉或删掉再动标记名字典。这就是前面说的总闸的含义——总闸一拉所有灯都灭。2. 动画连接把静态画面变成会呼吸的监控界面2.1 动画连接到底是什么标记名建好了数据存在内存里接下来关键一步怎么让画面上的图形跟着数据变化答案是动画连接Animation Link。在WindowMaker里双击任何一个图形对象弹出的动画连接对话框就是你要打交道最多的地方。这个对话框左边列出了可以做的动画类型右边是具体参数配置。入门阶段你只需要关注这几种线颜色、填充颜色、填充百分比垂直/水平、闪烁、旋转、移动、显示/隐藏、用户输入。每一种动画连接本质都是把图形的一个属性跟一个标记名绑定比如液位罐的颜色 → 绑定Tank1_HighAlarm离散型值为1时变红罐内液体的填充高度 → 绑定Tank1_Level实型值越大填充越高电机的转动效果 → 绑定旋转动画整型值控制旋转角度按钮按下的效果 → 绑定用户输入或按键脚本让操作能改变标记名的值2.2 离散型与模拟量动画的配置差异先看最简单的例子。我画一个圆形用来模拟电机运行指示灯。双击这个圆形在动画连接对话框里勾选填充颜色弹出的配置窗口里有几栏标记名填Motor1_Running离散型值的颜色0时是什么色1时是什么色这里离散型的意思是标记名的值只有0和1两种状态对应离散型标记名颜色在0和1之间切换。你可以设置0为灰色1为绿色这样一个简单的运行/停止指示灯就完成了。再看模拟量动画。我们画一个矩形代表储罐罐体再画一个小一点的矩形嵌在里面代表罐内液体双击内层液体矩形勾选填充百分比垂直配置里同样要填标记名比如Tank1_Level。这里的逻辑是标记名的值范围映射到填充百分比需要设置最小值和最大值比如液位0到100那0对应填充0%100对应填充100%液位50时填充恰好到一半Intouch的填充百分比配置输入的最小值和最大值决定了标记名数值与填充比例的映射关系。这个映射是人力的线性映射显示百分比 (当前值 - 最小值) / (最大值 - 最小值) × 100%入门时不用手算心里有数即可。2.3 填充、闪烁、移动新手最常用的三个效果填充动画是模拟液位、料位、储量的最佳方案。垂直填充适合竖罐水平填充适合横管或料仓。闪烁动画一般配合报警使用。比如Tank1_HighAlarm为1时让罐体边框闪烁红色提醒操作员注意。在动画连接对话框里勾选闪烁设置闪烁时的颜色再绑定对应的离散型标记名。注意闪烁效果在Intouch里与线颜色/填充颜色可以叠加也就是说你可以同时设置颜色变化闪烁报警时视觉冲击力更强。移动动画则适合传送带、小车、机械手等场景。勾选水平移动或垂直移动设置移动的像素范围占标记名数值范围的比例。这个入门时可能用得少但配合后续的脚本是做出动态产线画面的基础。在我做过的项目里最容易出问题的是填充方向和最小/最大值反了。比如液位越满填充越少或者最小值填了100、最大值填了0画面上的显示就跟实际完全相反。排查时先检查这两项90%的情况都能解决。2.4 文字显示与用户输入让界面不只是看除了图形动画文本对象的动画连接也很有用。画面上放一个文本对象比如显示当前液位数值双击后勾选文本显示绑定Tank1_LevelIntouch会根据标记名的值自动显示数字。注意文本显示的格式配置可以设置小数点位数比如显示2位小数Intouch会自动转成字符串显示在屏幕上。如果你还想让操作员能在界面上直接修改某个值比如手动设定一个目标温度那就用文本对象的用户输入连接。运行期间操作员点击这个文本会弹出输入框输入的值会直接写入绑定的标记名。这个功能在单机版调试时非常好用——没有真实设备用输入框改变液位值整个画面就跟着动起来了整个动画连接链路马上就能验证。3. QuickScript脚本从看到数据到控制逻辑3.1 脚本放哪里三类最常用的脚本位置动画连接解决了显示的问题但实际的工业控制逻辑比如按一下启动按钮→电机置为运行→累计运行时间加1→超过某个值时触发报警光靠动画连接是实现不了的。这就需要写脚本。Intouch的脚本语言叫QuickScript语法风格非常接近VBScript上手很快。单机版入门阶段你只需要知道三个脚本位置脚本类型在哪写什么时候执行按键脚本画面上的按钮/图形对象上操作员点击时执行窗口脚本窗口属性里窗口打开时、窗口关闭时、窗口运行期间周期性执行数据改变脚本标记名字典里指定标记名上该标记名的值发生变化时执行打开方法在按钮或其他图形对象上右键选择脚本→按键脚本或者双击对象后在动画连接对话框里点击按键脚本按钮进入脚本编辑器。3.2 一个能直接练手的案例启停控制加运行计时我们做一个最简单也最典型的单机版练习一个启动按钮、一个停止按钮、一个运行指示灯、一个累计运行时间显示框。先建几个标记名Motor1_StartCmd内存离散型0Motor1_StopCmd内存离散型0Motor1_Running内存离散型0Motor1_RunHours内存整型0启动按钮的按键脚本这样写Motor1_StartCmd 1; Motor1_Running 1;停止按钮的按键脚本Motor1_StopCmd 1; Motor1_Running 0;接下来让运行时间自动累计。这里要用到数据改变脚本或Window脚本。在标记名字典里右键Motor1_Running选择数据改变脚本输入IF Motor1_Running 1 THEN Motor1_RunHours Motor1_RunHours 1; ENDIF;注意这个脚本在Motor1_Running的值变为1时只执行一次所以每启动一次只加1不是每秒加1。如果你希望每秒钟加一次那应该用窗口脚本的While运行时周期执行模式。选中窗口在窗口属性里找到脚本页选择While运行时用时间间隔1000毫秒写IF Motor1_Running 1 THEN Motor1_RunHours Motor1_RunHours 1; ENDIF;这个经典的周期执行条件判断结构几乎是所有单机版练习和很多真实小项目的雏形一定要吃透。3.3 QuickScript语法避坑等号、分号与标记名限定的坑新手写QuickScript最容易犯的几个错误赋值用单个等号判断相等用双等号。有些从C语言过来的人容易把判断写成单等号Intouch不会报错但逻辑会完全错乱。写判断时务必检查是还是。每句结尾要加分号。QuickScript不像某些脚本语言那样可以偷懒不写分号漏了分号脚本编辑器会直接报语法错误。标记名在脚本里可以直接用也可以带应用程序名.标记名这种全限定格式。比如Application.Motor1_RunHours其中Application是工程名。单机版里直接用短名字就行但如果你后面要跨窗口、跨工程引用就要用全限定格式。入门阶段先用短名别给自己加戏。脚本编辑器右上角有语法检查按钮写完点一下再保存。遇到红色波浪线仔细看错误提示大多数情况是漏了分号、拼错了标记名、或者用了中文标点。我自己的切身体会QuickScript的报错信息很粗糙常常只告诉你第几行有问题不告诉你具体原因。所以写脚本一定要养成每写完一小段就语法检查一次的习惯别一口气写50行再检查错起来能把你绕晕。4. 历史趋势与报警让画面具备工业级的信息反馈能力4.1 趋势曲线观察数值变化规律的利器一个监控画面如果只能看到实时数值那跟普通仪表盘没区别。工业组态软件的核心价值之一是能让你看到过去一段时间的数据变化趋势。Intouch里做历史趋势曲线用的是趋势控件。在WindowMaker的工具箱里找到图表/趋势相关的控件不同版本位置不太一样老版本在绘制工具箱里叫趋势曲线新版本在ActiveX或.NET控件里叫InTouchTrend或Trend拖到窗口上然后右键配置数据源。单机版入门时最省事的做法是让趋势控件直接绑定一个标记名比如Tank1_Level设置好时间范围显示最近10分钟刷新周期设成1秒。运行起来后你再用用户输入功能改变液位值就能看到曲线在实时变化。这里有一个很多新手都会忽略的点实时趋势可以不用额外授权但历史趋势往往需要配置存储才能实现。Intouch的历史数据存储需要在标记名字典里把要记录的标记名的记录数据属性勾选上并在历史数据存储配置里指定存储路径和保存周期。这样Intouch会把数据按时间戳写入本地硬盘的SQL数据库或专用数据文件之后趋势控件才能查询到历史数据并回放曲线。4.2 历史存储配置单机版最容易漏掉的一步在WindowMaker里菜单配置→历史数据配置弹出对话框。这里可以配置历史数据存储路径、存储时间、记录周期。单机版默认可能没有启用历史存储你要手动指定一个路径比如D:\IntouchData并勾选启用历史数据存储。然后在标记名字典里对需要保留趋势的标记名比如Tank1_Level、Tank1_Volume把属性页里的记录数据选项勾选为记录。这样运行时Intouch才会把标记名的值按你设定的周期写入历史库。如果没有这一步趋势控件上你只能看到启动后的实时曲线关掉WindowViewer再打开历史数据是空的曲线全断了。这个勾选记录数据的细节是单机版初学趋势功能时最大的坑。4.3 报警配置与报警显示报警也是工业监控的基本需求。Intouch里配置一个报警核心步骤是在标记名字典里选中要做报警的标记名比如Tank1_Level在报警属性页里勾选启用报警然后设置报警类型和限值。常用的报警类型有离散型报警标记名1时报警、模拟量高报数值大于上限报警、低报数值小于下限报警。比如Tank1_Level可以设高报值90高高报值95。配置报警组。报警组的作用是给报警分类比如储罐区电机区。新建报警组在报警组配置窗口里操作入门时用一个默认组$System也行但正规项目建议按区域建组方便后续报警分屏筛选。在画面上插入报警显示控件。老版本用的是报警/事件控件AlarmViewer新版本多用AlarmDBView控件拖动到窗口上运行时这个区域就会实时滚动显示报警记录。做过一个甲醇罐区的项目当时报警限值设置成了百分比但现场变送器输出的是4~20mA对应的0~100数值两者一开始没对齐导致实际液位80%时就已经乱报高报。后来统一在标记名字典里把量程范围和报警限值都按工程单位配置好报警才恢复正常。这个教训我写在这报警限值一定要跟标记名的工程单位一致换算清楚再填千万别拿百分比值直接当工程量用。4.4 报警确认与声音提示的入门实现报警出来之后操作员要能确认报警。Intouch里报警确认通常通过脚本或控件右键实现。用AlarmDBView控件的话操作员在报警列表上右键会有确认选项。你也可以在脚本里用函数如AckAlarm来编程确认。声音提示方面Intouch支持在报警时播放WAV文件。在报警配置页里可以设置报警声音文件。单机版调试时可以放一个简单的提示音方便做演示。不过声音提示在真实项目中需要谨慎太频繁的报警声会让人烦躁甚至麻痹配置时记得设计好报警分级。5. 运行调试与部署从开发机能跑到工控机也能跑5.1 WindowViewer运行与调试技巧在WindowMaker里按CtrlF8或点击运行按钮Intouch会启动WindowViewer把当前窗口以全屏或窗口模式运行起来。开发调试时我建议不要全屏而是在WindowViewer里保留标题栏方便来回切换调试。运行期间如果发现画面不对可以直接切回WindowMaker继续改改完再点运行WindowViewer会自动加载最新内容不用每次关了重开。这个小特性在Intouch里叫运行期间修改单机版调试时非常好用。另外WindowViewer运行时可以按CtrlW关闭当前窗口返回WindowMaker如果程序卡死可以用任务管理器把Viewer.exe进程结束然后重新运行。5.2 单机版最坑的一个环节节点名单机版入门阶段你多半是在自己电脑上又装开发又跑运行可能永远遇不到节点名问题。但如果你把工程拷到另一台电脑上或者从别的电脑拷过来继续开发就会遇到一个让新手崩溃的问题打开工程后脚本里所有标记名引用全部变成带主机名前缀的形式而且原本正常的标记名查找开始报错。原因在于Intouch的标记名引用默认是基于节点名工程名的单机版安装时默认节点名就是你的计算机名。如果你在电脑A上建的工程拷到电脑B上打开而电脑B的计算机名跟电脑A不一样Intouch可能就按新计算机名去找标记名导致引用不匹配。解决方案是先确认单机版环境里所有位置用的都是同一个节点名或者把工程里的引用改成不带节点名的短名称。注意Intouch的节点名可以在Application Manager里配置也可以在标记名引用时用节点名::工程名.标记名这种格式。单机版建议统一用无节点名的格式直接写标记名不要带hostname::前缀这样换电脑不容易出问题。但这只是一个临时规避手段。真实项目中拷贝工程到工控机是常态我一般会用Intouch自带的工程打包功能或手动拷贝整个工程目录并在新电脑上用Application Manager重新指定节点名和Mark路径。无论哪种方式到了新电脑上第一步就是打开Application Manager重新确认工程节点的名称和路径再启动WindowMaker做一次全部标记名校验。5.3 画面切换、退出权限与单机版安全单机版虽然通常只是一个人或几个人用但操作安全不能忽略。这里推荐两个基本功窗口切换脚本在按钮的按键脚本里写Display(监控画面);即可切换到指定窗口。也可以用Show和Hide系列函数做弹窗式窗口。窗口名称要跟WindowMaker里窗口名一致注意大小写和空格。运行时安全Intouch单机版支持配置操作员登录和操作权限。在配置→安全里可以启用安全功能建立操作员账户给不同账户分配访问级别。然后在动画连接、脚本所在对象的访问名或安全页里设置所需级别。这能防止误操作也是正规项目验收的硬指标。刚开始做小项目时我很不重视安全配置觉得麻烦。直到有一次在现场调试不知道谁在WindowViewer上把一个关键联锁值改成0导致联锁失效虽然没出事故但被客户狠狠批评了一顿。从此以后凡是给人做的界面哪怕单机版我也至少要配一个操作员/工程师两级权限。这件事值得你一开始就学好。5.4 单机版工程的备份与另存最后再提一个所有Intouch用户都必须养成的习惯经常备份工程。Intouch工程是整个项目的心血一个误操作或硬盘故障就可能毁掉几周的工作。Intouch没有特别强大的自动备份所以我一般手动复制整个工程文件夹或者定期用其他备份工具同步到第二块硬盘。在WindowMaker里做大规模修改前先备份整个工程目录修改后先运行WindowViewer验证一遍再继续。这套改前备份、改后验证的习惯能让你避开90%的做坏了没法回退的窘境。特别是单机版开发阶段你可能要反复调整画面、删改标记名一个备份就是你最大的后悔药。另外Intouch支持工程的另存为功能在WindowMaker里可以将当前工程另存为一个副本。这个功能在做版本迭代时尤其好用——比如这个版本已经稳定跑通了下一个版本要测试新逻辑可以另存一份带后缀_v2的副本在新副本上改即使改坏了也不影响原版。6. 顺着这条线还能往哪些方向深入到这里第二篇的内容基本覆盖了Intouch单机版最核心的四块能力标记名字典、动画连接、QuickScript脚本、历史趋势与报警。如果你能完整做出一个储罐液位监控的小工程并且让按钮、动画、曲线、报警都正常工作那你就已经越过了Intouch入门最难的门槛。接下来如果要继续深入我在实际学习中走过的路径大致是这样的第一步是通讯。单机版毕竟是单机真实项目总得连PLC、连仪表。DDE、OPC DA、OPC UA、SuiteLink这些通讯协议怎么配、怎么排错是Intouch进阶绕不开的大头。第二步是复杂动画与脚本库。比如用脚本动态创建/删除对象、用ActiveX控件做复杂报表、把Intouch的逻辑封装成可复用的自定义函数。第三步是工程架构与标准化。单机版还好一旦涉及多个画面、多套子工程、数据转发如何建立统一的标记名体系、统一的脚本库、统一的报警分组这些直接决定后期维护成本。第四步是协同与二次开发。Intouch有SQL访问功能能和数据库交互也支持C#等做扩展控件做更复杂的页面这在现代化工厂里越来越常见。这些内容每一块单拿出来都能写一篇万字长文。如果你有兴趣后续我可以按这个顺序继续更新。不过在那之前我建议你先把手头的Intouch装好跟着这篇把储罐液位监控的小项目做完亲自把数据不动变成数据跟着操作走那种感觉是看多少教程都替代不了的。这一篇就先写到这。有什么具体卡住的地方欢迎在评论区带着截图和报错信息来问我看到都会回。
返回列表