
在工厂里搞过几年组态软件的人应该都有同感报警系统这东西平时没人夸你一旦漏报或者误报挨骂的准是你。尤其是Intouch这种在工控圈里占有率很高的上位机软件报警配置看起来不就是点几下鼠标吗可真到了现场离散量报警和模拟量报警的阈值、死区、优先级、消息文本稍有不慎就是半夜电话被打爆的节奏。这篇文章我就把Intouch实时报警设置的完整套路捋一遍从离散量到模拟量从标记名字典到Alarm Viewer再到达数记录给新手一条能直接照抄的路子也给老手整理一份可以拿来就用的避坑清单。不管你是刚接触组态软件的电工还是已经在做上位机集成的工程师这篇内容对你应该都有参考价值。1. 报警系统整体设计思路先想清楚再动手1.1 实时报警在自动化项目里到底承担什么角色很多人以为报警就是“超限弹个窗”这个理解太浅了。一套合格的实时报警系统本质上是现场工艺安全的最后一道防线。操作员不可能24小时盯着每一个实时数值设备故障也不可能每次都凑巧被巡检发现报警系统的存在就是代替人眼去盯那些关键参数一旦异常就以最快速度通知到人。Intouch作为AVEVA旗下的组态软件实时报警功能在产品体系里叫Alarm System它不是一个独立模块而是和标记名Tag、报警组Alarm Group、报警显示控件、历史报警数据库紧密耦合的一套完整链路。我的理解是你在Intouch里配报警其实是在搭建一条从“PLC数据变化”到“操作员肉眼可见、耳朵可听”的信息通道。通道上任何一个环节断了报警就白配了。1.2 离散量报警和模拟量报警的本质区别离散量报警处理的是“0或1”的问题比如电机运行/停止、阀门开/关、手自动切换、故障信号有无。这类报警的特点是状态明确触发条件简单难点在于信号抖动、报警消息的可读性、以及和PLC程序的配合。模拟量报警处理的是“数值范围”的问题比如温度超80度报警、压力低于0.2兆帕跳变、液位高高联锁。这类报警的难点不在触发逻辑而在阈值怎么定、死区怎么设、量程怎么换算。离散量报警像是看开关拨到那边就是那边模拟量报警像是盯仪表盘指针在什么区间内算正常什么区间内算异常这个“度”的把握才是功夫所在。1.3 动手前先做三件事点位清单、报警分级、阈值表格我见过太多人一上来就打开Intouch开始建标记名结果配到一半发现点位遗漏报警优先级乱七八糟阈值全靠猜。正确的顺序应该是先做纸面工作。第一件事是梳理点位清单。把项目里所有需要接入上位机的信号列成表格至少包含测点名称、PLC地址、信号类型离散/模拟、量程范围、工程单位、所在区域车间、工段、设备。这份清单既是标记名字典的蓝图也是后续调试的对照表。第二件事是报警分级。我的习惯是分三个等级紧急报警需要立即停机或疏散对应HiHi/LoLo或者故障硬接点、重要报警需要操作员尽快处理对应Hi/Lo或者设备综合故障、一般报警提示性信息比如参数偏离、设备切换。在Intouch里这三个等级分别对应不同的报警优先级数值比如1-100数字越小越优先。第三件事是阈值表格。这张表要写清楚每个模拟量报警的报警值、预报警值、死区、报警延迟时间每个离散量报警的触发电平0还是1和消息文本。这张表最好和工艺工程师、设备工程师一起确认你用错了阈值出了生产事故是要担责任的。2. 离散量报警配置设备状态类报警的完整套路2.1 离散量报警到底解决什么问题离散量报警解决的是“状态异常通知”的问题。典型的应用场景包括电机的过载继电器动作、变频器故障输出、阀门开到位和关到位同时为1这种状态本身就是故障、急停按钮被按下、PLC与现场仪表通信中断等。有一种常见的误区是把设备运行状态本身也做成报警。比如电机正常启动后运行信号为1然后就报“电机运行”——这是不对的。报警是针对异常状态的正常运行的状态不应该打扰操作员。你在设置离散量报警时一定要想清楚这个信号的哪个状态才是“需要人注意”的异常状态。2.2 创建标记名与启用报警属性在Intouch里离散量报警的基础是标记名类型为I/O Discrete或者Memory Discrete的Tag。步骤如下打开“标记名字典”Tag Dictionary新建标记名。访问名要提前在“访问名”里配置好对应到你在SMCSystem Management Console里建立的DAServer或者老的IO Server的连接。选择标记名类型为I/O Discrete在“报警”选项卡里勾选“启用报警”Enable Alarm选项。离散量报警在Intouch中通常要么报“1状态”要么报“0状态”你需要在报警设置里指定哪个状态触发报警。一般来讲PLC侧用0表示正常1表示故障这也是大多数PLC编程默认的做法那么Intouch里就设置当Tag值为1时报警。设置报警组Alarm Group这个决定报警信息归到哪个组里后续在报警查看器里可以按组过滤。设置优先级Priority范围是1到999数值越小优先级越高。填写报警消息文本Message Text比如“1号循环水泵过载跳闸”。这个文本一定要写得让人一看就懂——操作员在报警列表里看到的首先就是这行字写得太笼统等于没写。这里要特别强调一下报警消息文本的写法。我见过有人写“X001_ALARM”这种文本对程序员友好对操作员就是灾难。正确写法应该是“车间-设备-现象”三段式比如“RO车间-高压泵P101-变频器故障”。将来操作员截图上报、维修工查故障都会方便得多。2.3 报警条件、消息文本与优先级设置离散量报警的触发条件选择在Intouch的标记名字典里是通过“状态”来体现的。你在报警属性里可以看到类似“On/Off”的报警状态选项。这里有个细节对于普通的干接点信号一定要确认信号在PLC侧是不是做了反逻辑处理。比如急停按钮常闭触点串在回路里正常时PLC读到的是1按下急停变成0。如果你在Intouch里设置的是“值为1时报警”那急停按下反而不报警系统正常运行却一直报“急停动作”——这种低级错误我在现场见到过不止一次。正确的做法是和PLC程序里的变量定义保持一致。PLC侧定义急停变量为“0急停触发”Intouch里就设置该Tag值为0时报警。如果PLC侧已经做了取反变量在正常时是0、急停时是1那Intouch就按1报警。总之以PLC变量的实际逻辑为准不要想当然。优先级方面的经验离散量报警里的故障类信号优先级建议设在100以内状态切换类信号比如“从自动切换到手动”优先级设在300以上甚至不设报警只在报警查看器里留一条事件记录就行。原因很简单故障类需要操作员立即响应状态切换类只是提示响铃会让操作员疲劳真到出大事的时候反而没人当回事。2.4 离散量报警实战中容易踩的坑第一个坑是信号抖动。现场的电机启动瞬间接触器吸合会产生电弧PLC输入点的信号可能在一瞬间误动作反映到Intouch里就是报警闪一下又消失。这种问题在PLC程序里加延时滤波或者用上升沿判断可以缓解如果你改不了PLC程序Intouch侧可以适当提高报警延迟时间但离散量报警在Intouch标准功能里没有直接的延迟参数所以更多还是要在PLC侧处理。我的习惯是凡是参与联锁或报警的DI点PLC程序里统一加50毫秒到200毫秒的去抖时间。第二个坑是通信中断对报警的影响。Modbus TCP或者Profibus DP链路一旦断开Intouch读到的数据是坏品质Bad Quality。如果标记名配置里没有处理品质问题可能会出现通信断了但报警状态停留在最后读数上看起来一切正常。建议把通信状态也做成一个诊断Tag通信中断时对应一个高优先级报警“XX站通信中断”这样比现场设备报警本身更重要。3. 模拟量报警配置阈值、死区与工程细节3.1 模拟量报警的典型场景与标记名配置模拟量报警在工业现场的典型场景太多了反应釜温度超高、储罐液位过低、管道压力越限、循环水流量不足、电机电流过大、变频器输出频率异常。几乎每个过程量都需要报警但并不是每个过程量都值得做四段报警LoLo/Lo/Hi/HiHi。配置模拟量标记名的步骤和离散量类似在标记名字典里新建I/O Real类型的标记名注意访问名、设备地址、数据格式Intouch里Integer、Real、Float的区别要搞清楚最稳妥的做法是PLC侧以实数格式传输Intouch侧选IEEE Real。然后在“报警”选项卡里勾选“启用报警”选好报警组和优先级接着就到了关键部分——设置报警限值。3.2 报警类型、死区与优先级设置Intouch对模拟量报警提供了四段限值报警LoLo低低报、Lo低报、Hi高报、HiHi高高报还有偏差报警Deviation和变化率报警Rate of Change。日常项目里用得最多的是四段限值。段限值设置的思路是这样的模拟量量程0到100度工艺要求正常控制在20到80度。那么可以这样定HiHi85度严重超温可能需要停机、Hi80度温度偏高提醒关注、Lo15度温度偏低、LoLo10度严重低温。这里有个原则报警限值必须落在量程范围之内而且一般建议预留5%以上的余量不然传感器满量程输出稍微飘一下就会触发报警。死区Deadband是模拟量报警里最容易被忽略的参数。死区的作用是防止测量值在报警限值附近反复波动时报警状态频繁“触发-恢复-再触发”。举例来说高报值设在80度如果没有死区温度在79.8到80.2之间波动报警会像呼吸灯一样闪个不停操作员看着心慌报警记录也会被刷屏。设置死区为1度之后只有温度超过80度才报警回落到79度以下才恢复中间跳来跳去都保持报警状态不变。死区的设置经验一般是量程的1%到2%。量程100度的信号死区1到2度是合理的量程1000度的信号死区可以放到10度。这个值不是越大越好太大会导致报警恢复严重滞后明明温度已经降到安全范围了还没恢复操作员会以为还在报警状态。3.3 常见PLC模拟量接入工程的注意事项模拟量报警能不能准确触发前提是Intouch里读到的数值和现场真实值一致。这里牵涉到从PLC到上位机的整条数据链任何一个环节的量程换算错了报警阈值就全是废的。以常见的西门子200smart为例。200smart本体集成的模拟量输入通道接收0到10V或者0到20mA信号时AIW寄存器里的原始值是0到32000接收4到20mA时原始值对应6400到32000。上位机要显示实际工程值必须做换算。换算有两个方案一是在PLC程序里用浮点指令把AIW原始值转成工程值再通过通信交给上位机读二是在Intouch的标记名里直接用“线性转换”Linear Scaling功能设置原始值的上下限和工程值的上下限让Intouch自己算。我的建议是把换算放在PLC侧完成。原因是PLC侧做换算后PLC内部程序比如PID调节、联锁判断可以直接使用工程值不依赖上位机同时Intouch侧只读浮点数配置简单很多也方便以后更换上位机组态软件时不动PLC逻辑。而Intouch侧进行线性缩放的做法适合项目很小、PLC程序已经被别人锁死的情况。另一个重要细节是模拟量输入信号类型和PLC模块量程开关要匹配。很多模拟量模块支持电压/电流输入切换通过模块上的DIP开关或者软件通道配置实现。硬件层面上4到20mA电流信号的两根线一定要接对极性信号线要用屏蔽双绞线屏蔽层一端接地通常要求在控制柜侧的电源地或系统地接入也就是很多工程师说的“屏蔽层接0V”避免长距离传输时感应干扰串入信号回路。3.4 西门子200smart与汇川变频器模拟量读取实录这里分享一个我实际做过的项目案例。现场用的是西门子200smart PLCCPU型号SR30扩展模块是EM AE014通道模拟量输入。采集的是反应釜温度和夹套压力温度变送器输出4到20mA压力变送器也是4到20mA。上位机用Intouch通过Modbus TCP通信读取数据。在200smart程序里我用SCL指令块或者STL语言读取AIW0和AIW2然后按公式 工程值 (原始值 - 6400) / (32000 - 6400) x (量程上限 - 量程下限) 量程下限 换算成实际温度例如0到150度和压力例如0到1.6兆帕结果存到VD区。然后在Intouch标记名字典里建I/O Real标记名访问名指向Modbus TCP的DAServer地址直接指向200smart的保持寄存器VD地址数据类型选Float。这里的坑在于200smart的VD地址是字节地址Modbus寄存器地址是字地址对应关系要换算对。比如VD100对应Modbus地址40001乘以2即400101这个区间。这个换算关系第一次做特别容易错我当年在这里卡了一整天后来对着DAServer的Address Definition文档一个个地核对才搞定。建议你做完后在Intouch里先在线看看数值是否合理而不是直接配报警限值。另一个案例是汇川变频器通过4到20mA模拟量输出反馈运行频率。变频器的AO端子输出0到20mA或者4到20mA接进PLC的模拟量输入模块。这里要特别注意汇川变频器模拟量输出端子的带载能力以及信号线和变频器主回路动力线在同一个桥架里走线时的干扰问题。屏蔽层一定要按照规范接到控制柜接地排0V而且接地排要与变频器PE端子可靠连接。如果现场变频器启停瞬间Intouch里频率值会跳几赫兹先检查屏蔽层接地再考虑在PLC模拟量配置里加滤波。4. 报警显示、历史记录与Web发布4.1 Alarm Viewer报警查看器的配置要点报警配好了接下来要让操作员能看得见。Intouch里最常见的报警显示控件是Alarm Viewer报警查看器在WindowMaker的“开发工具”或者“ActiveX控件”里能找到。把Alarm Viewer拖到窗口上之后要做几件事配置显示的报警组。如果项目分了多个报警组比如按车间、按装置分可以配置控件只显示指定组的报警避免操作员被无关信息干扰。配置显示列。报警查看器的列可以自定义建议至少显示报警时间、恢复时间、确认时间、报警组、标记名、报警消息、当前值、状态。列太多会挤压有效信息列太少又缺少上下文一般8到10列比较好。配置颜色。不用每个报警一个颜色按优先级区分即可比如高频优先红色、中级黄色、低频绿色。颜色方案要和控制室其他系统保持一致操作员已经形成习惯了别乱标新立异。设置操作权限。报警确认Ack是一个需要权限的动作要在WindowMaker里配置好操作员角色和密码避免任何人都能一键确认报警。4.2 Alarm DB Logger历史报警记录配置实时报警在Alarm Viewer里只能看到当前活动报警和最近一段时间的内容历史追溯必须靠Alarm DB Logger Manager插件把报警记录写入数据库。这里我用的方案是Alarm DB Logger Manager插件配合Access或者SQL Server数据库。在Intouch安装目录里找到Alarm DB Logger Manager新建一个记录器Logger配置好数据库连接字符串ODBC数据源、表名、以及要记录的事件类型报警产生、报警恢复、报警确认。实操中遇到最多的坑是ODBC配置。32位和64位的ODBC数据源管理器是分开的Intouch很多时候是32位程序必须用C:\Windows\SysWOW64\odbcad32.exe去创建数据源否则在Intouch里测试连接会报错。另外Access数据库需要安装对应的驱动SQL Server要确认服务器允许TCP/IP连接账号密码正确。报警历史数据表的设计不用太复杂Alarm DB Logger插件会自动建表你只需要关心日志文件的存储位置和数据库空间。如果项目数据量大报警量几千条每天建议定期归档把一个月前的数据备份导出防止Access或SQL Server文件膨胀导致查询变慢。4.3 报警确认机制与声音联动真实项目里报警确认是操作员和上位机交互频率最高的操作。Intouch的确认机制是报警产生后状态为“未确认”Unacked需要操作员在报警查看器里点击确认如果有声音联动确认后声音停止。关于报警声音联动我试过两种方案第一种是用Intouch自带的报警声音设置在报警组属性里绑定一个wav文件报警产生时循环播放直到有人确认第二种是在WindowMaker里写脚本当Alarm Viewer的某个事件触发时调用Windows API播放声音。第一种简单稳定适合大多数项目第二种灵活一些可以实现不同优先级不同声音但脚本一旦写不好容易出兼容性问题。我最推荐的还是第一种方案。在WindowMaker中找到报警组件右键属性设置报警音效文件指向事先准备好的短促提示音。这里有个细节wav文件不要太大几秒钟就够声音不要过于刺耳操作员要在一线待一个班刺耳的声音会让人更烦躁。4.4 Intouch Web发布后报警浏览注意事项Intouch Web发布是很多公司远程监控项目的标配功能。部署在服务器的Intouch应用做成Web发布后客户端通过浏览器就能查看画面和报警。Web发布场景下报警浏览要注意几个点Web客户端看到的是服务器端报警状态快照。如果服务器端Alarm Viewer配置正确Web端显示基本没问题但如果服务器端没人操作确认Web客户端的操作员也无法确认报警——确认动作是对服务器端应用生效的多个Web客户端共用同一套实时数据千万别出现两个操作员同时抢同一个报警确认的情况。Web发布的报警延时取决于网络质量。局域网内基本无感公网远程访问会有几秒延时这是架构决定的没办法用配置消除。如果需要秒级的远程报警推送建议另接短信猫、企业微信机器人等不在Intouch Web端纠结。在ISEIntouchWeb Server发布前需要在服务器上把报警相关控件、WindowViewer运行权限、数据库连接全部测试通过。我见过很多Web发布失败是因为服务器端的WindowViewer没有正常打开报警控件也就没法显示任何内容。5. 高频问题排查实录5.1 “无法打开Intouch应用程序。请参阅记录器以获取详细信息”怎么破这条报错几乎是Intouch新手的最强拦路虎。字面意思是“无法打开Intouch应用程序”实际原因五花八门工程文件损坏、分辨率问题、历史库路径失效、授权异常。第一步看记录器。打开控制面板里的“记录器”Logger工具找到最新的红色错误日志。日志里会说出具体原因比如找不到某个文件、某一行脚本语法错误、某个上位机驱动加载失败。第二步检查工程文件目录。Intouch工程文件是“应用程序”Application界面文件、标记名、脚本都放在工程文件夹里。如果工程文件夹被移动过、网络路径映射过别的电脑打开时就会失败。确认winintouch.exe的版本和你安装的开发授权一致32位和64位的工程和软件版本不能混用。第三步初始化工程。如果日志没有明确指向可以试试把“应用程序”里的ALMDB、$HistData等临时数据文件清理掉或者把工程文件夹复制到本机默认目录下重新打开。我抢救过不止一个打不开的工程大多都是脚本引用了不存在的标记名或者WindowMaker画面文件损坏导致的用记事本打开画面文件看看有没有明显的语法残缺。5.2 Intouch授权路径设置步骤详解InduSoft和Intouch的授权体系其实不太一样IntouchPlant Edition使用授权路径时最容易出问题的就是把授权文件放到了自定义目录但软件默认的搜索路径里没有包含。正确设置授权路径的步骤安装Intouch后打开“授权”License管理器。在授权工具里可以看到当前许可证状态和剩余使用天数。如果是FlexLM浮动授权需要在环境变量里设置WWLM_LICENSE_FILE指向授权服务器的PortHost比如27000172.16.1.10。如果是单机授权Standalone License先看授权文件是否位于C:\Program Files (x86)\Common Files\ArchestrA\License或者安装时指定的授权路径下。授权路径修改在授权工具里操作选中授权类型后重新指向License文件所在目录点击确认应用。重启WindowViewer再看日志确认授权加载成功。我遇到过的坑是重装系统后授权路径指向一个不存在的盘符Intouch直接启动失败。解决方法很简单用授权管理器把路径改回新系统里的实际路径即可。另外同一个授权文件不能同时被两台电脑读取除非你买的是多用户授权——这个在项目验收时要和厂家确认清楚。5.3 报警不触发、误触发排查清单报警不触发或者误触发是现场调试阶段最磨人的问题。我总结了一个排查清单按顺序走一遍基本能定位排查项检查内容标记名报警属性是否勾选了“启用报警”报警限值是否设置正确报警组是否为空数据类型匹配PLC侧数据类型和Intouch标记名类型是否一致大小端是否匹配访问名连接状态DAServer是否在线IO地址是否绑定正确通信质量是否时好时坏死区与延迟设置死区是否设得过大报警延迟是否存在PLC程序逻辑是否在PLC程序里做了量程换算换算公式有无错误量程上下限是否填反报警组过滤Alarm Viewer里是否过滤了报警组导致新报警“看不见”权限与视图当前操作员是否有权限查看该报警组的报警在实际操作中我习惯先在WindowViewer里打开“报警摘要”视图临时把过滤条件全部放开再用测试工具强制改变PLC变量值比如用Force功能给寄存器写入超限数据观察Intouch那边是否出现报警。如果不出现再用Diagnostics工具看通信数据是否变化。这个方法能快速切断问题区间。5.4 模拟量信号干扰与屏蔽层接0V的实操细节模拟量信号的干扰是个永恒话题。现象是Intouch里数值跳变、无规律漂移、报警频繁误触发。大多数模拟量信号是4到20mA电流环或者0到10V电压电流环抗干扰能力强一些电压信号对噪声更敏感。屏蔽层接0V是基本功。控制柜里要有一个干净的接地排通常也叫0V排所有模拟量信号线的屏蔽层一端都接到这个排上。注意屏蔽层不要两端都接地否则地电位差会在屏蔽层里产生环路电流效果适得其反。一般原则是控制柜端接地现场传感器端绝缘处理。如果传感器端实在要接地那就控制柜端不要再接做浮空处理。除了接地还有几个细节容易被忽略一是信号线要和动力线分开走线。在现场桥架里模拟量信号线至少要和交流动力线保持20厘米以上的间距交叉时要垂直交叉。二是PLC模拟量模块通道与现场变送器是否共地。有些变送器是两线制隔离型有些不隔离需要你实际测一下AI通道负端和PLC电源负端之间的电压差如果超过模块允许的共模电压范围就要加隔离栅或者配电器。三是4到20mA信号的回路电阻。变送器有最小负载电阻要求PLC模块也有最大输入电阻限制如果中间串接了安全栅或者隔离器回路电阻可能超出模块驱动能力。遇到这种情况测量一下AI通道两端的电压应该在1到5V之间才正常250欧姆采样电阻对应4到20mA。有了稳定的模拟量信号报警死区、阈值才能发挥真正作用。信号都在那儿“跳舞”的时候谈报警精度就是空中楼阁。写在最后报警系统不是做加法而是做减法做了这么多Intouch项目我最大的体会是一套好用的报警系统靠的不是把所有的点都配上限值而是精心筛选出那些真正值得打扰操作员的内容。少即是多。报警配置的功夫一半在工程实施前一半在现场调试中。阈值定得准、死区设得稳、消息写得明白、确认流程顺远比在系统里堆砌几百条报警更管用。还是那句话报警系统在不出事的时候只是运行界面上一行不起眼的小字但真出了事它就是你最重要的伙伴。希望这篇从离散量到模拟量的完整配置经验能让你少走几步弯路把自己的项目做得更扎实。如果后续有条件我再把自己在报警联锁脚本、复杂声音告警方案上的实操整理出来分享。