公司动态
Delphi工控上位机开发:iocomp控件与OPC联调实战
简介本资源是面向工业自动化与数据采集领域Delphi开发者的专用组件包聚焦Delphi 13.1环境下OPC通信应用的快速构建。它整合了iocomp OPC控件核心运行依赖与安装支持文件帮助中高级开发者绕过环境配置障碍直接开展OPC客户端开发、实时数据监控及设备状态可视化等关键任务。压缩包共8个文件含3个关键DLL如opccomn_ps.dll、iOPC2.dll、2个可执行工具APRXDIST.EXE用于分发部署OPCENUM.EXE用于OPC服务器枚举、1个安装说明HTML文档、1张图文指引JPG及1个版本说明TXT整体仅724KB轻量便携。已有58人学习下载资源结构紧凑、即取即用——无需额外编译或注册可直接集成至Delphi 13.1 IDE配合OPCInstallNotes.htm和安装图示清晰呈现部署路径与典型调用流程显著降低工业级OPC项目起步门槛。 搞工控上位机的人电脑里多少都留着几个压箱底的压缩包其中一个大概率叫iocomp。这东西在Delphi圈子里的地位差不多相当于工具箱里的那套内六角扳手——平时不觉得多起眼真要拧到那颗螺丝了没有它就只能干瞪眼。我最近正好在做锅炉余热回收项目的监控界面三台螺杆机的压力、温度、流量客户全要求用仪表盘和趋势曲线实时刷新还要能追溯历史数据。翻出这个“Delphi 13.1控件之 iocomp opc.rar”从解压到连上OPC服务器折腾一晚上把主界面搭了个七七八八。趁着手感还在把安装、配置、调试、踩坑的完整过程写下来能给后来人省不少时间。先说明一下标题里的“Delphi 13.1”别太当真官方版本号里其实没有这个。Delphi的版本演进比较跳跃从Delphi 7之后一路到2007、2009、2010、XE再到10.x系列硬要对号入座的话“13.1”更像是打包者随手写的名字实际对应哪个IDE版本得看你自己的环境。但这不影响使用因为iocomp的本质是ActiveX/COM控件只要你的Delphi能导入COM组件从Delphi 7到最新的Delphi 12基本都能用这恰恰是它能在工控圈流传这么多年的原因。1. 这个压缩包的核心价值iocomp在Delphi工控界面中的位置1.1 一个包能帮你省下几天工期做工业上位机的人都知道最烦的其实不是通讯协议而是界面。客户端会要求“压力要能看趋势曲线”“温度异常要亮红灯”“这地方加个旋钮”“那地方放个数码管显示”你要是拿Delphi自带的基础控件从头画一个仪表的刻度、指针、量程、颜色渐变就能磨掉半天。iocomp正好就是干这个的它提供了一整套面向工业监控场景的可视化控件仪表盘、趋势图、LED指示灯、开关、旋钮、滑块、数码管显示基本覆盖了HMI界面的所有常见元素。这个压缩包名字里有“opc”说明它不是单纯的界面控件包还包含了OPC相关的组件或配套工具。实际项目里这两个东西常常成对出现iocomp负责把数据画出来OPC负责把数据接进来。一个完整的上位机画面无非就是“读取PLC/DCS的数据 → 在仪表和曲线上显示 → 超限了报警 → 顺便存个历史记录”iocomp负责中间这一层而且做得比较省心。1.2 为什么老工程师电脑里都留着它工业项目的生命周期普遍很长十年前的老设备可能还在跑上位机程序也往往是几年才迭代一次。Delphi本身的生态已经足够稳定加上iocomp这种成熟的第三方控件只要装好了工程文件可以跨IDE版本打开。很多老工程师手里都存着当年下载的安装包或绿色包不是没想过换方案而是不敢换——一个跑得好好的监控系统没必要为了“界面更好看”去冒险重构。另外还有一个现实原因Delphi自带的TChart能画趋势曲线但画不出工业仪表盘那种接近真实设备的质感DevExpress的图表控件功能强大但体积大、配置复杂而且不专门服务于工控场景。iocomp在“工业仪表外观”这条赛道上几乎是没什么对手的所以它在很多项目里成了标准配置。1.3 适用场景与人群如果你正在做以下类型的项目这个压缩包大概率对你有用锅炉、空压机、污水处理、楼宇自控、实验室数据采集等需要实时监控界面的项目用组态王、LabVIEW等平台做了不少画面但需要在Delphi里定制一套更灵活的上位机需要把OPC DA/UA的数据源直接映射到仪表盘、趋势曲线和LED报警灯上维护老项目IDE里突然找不到iocomp控件了想搞明白为什么这篇文章适合的读者是两类人一是刚接触Delphi工控开发、被控件安装折磨的新手二是已经在做上位机、想系统梳理iocompOPC用法和避坑点的工程师。下面从安装开始一步步拆开讲。2. 解压、注册、摆上IDE工具栏安装全流程2.1 安装前先看目录结构拿到“Delphi 13.1控件之 iocomp opc.rar”之后先别急着解压到桌面就双击。第一步是看看压缩包里都有什么。一个规范的iocomp发布包一般会包含三层东西官方安装程序一个setup.exe或者install.exe这是优先用的入口。它会自动把ActiveX控件文件.ocx/.dll复制到系统目录写入注册表安装许可证文件顺便带上帮助文档。控件文件各种以i开头或者以控件名命名的ocx/dll文件。如果包里的安装程序是旧版在部分新系统上可能装不进去这时才需要手动注册。示例Demo/Samples这个非常关键。iocomp官方Demo里有大量控件用法示例比如仪表盘的刻度设置、趋势图的数据追加、OPC的连接参数等很多属性不看到Demo根本猜不到怎么配合。2.2 注册的本质ActiveX控件必须进注册表iocomp大部分控件是ActiveX它在Delphi IDE里能显示、能拖放依赖的是Windows注册表里的COM注册信息。每一次在窗体上放一个iocomp控件IDE会读取注册表CLSID找到对应的ocx文件路径然后调用它的接口。理解这一点很多安装问题就一目了然了。比如为什么绿色解压包有时候能用有时候不能用因为解压出来的ocx文件只是躺在文件夹里注册表没登记Delphi压根不知道它存在。为什么用管理员权限运行安装程序更稳妥因为写注册表需要权限普通权限很有可能写了个寂寞。2.3 手动注册的操作步骤如果压缩包里没有安装程序或者安装程序在你的环境上报错那就手动注册。默认情况下64位Windows有两条注册表视图32位程序的注册表重定向到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node而Delphi IDE本身是32位进程所以必须保证控件注册到32位注册表视图。具体操作把整个控件目录放到一个固定路径比如D:\iocomp\不要放在桌面或临时目录里避免后续被清理。以管理员身份打开命令提示符。注意是“以管理员身份”不然会报权限错误。进入控件目录逐个注册cd /d D:\iocomp C:\Windows\SysWOW64\regsvr32.exe iPlot.ocx C:\Windows\SysWOW64\regsvr32.exe iInstrument.ocx这里用SysWOW64下的regsvr32是强制以32位方式注册确保32位的Delphi IDE能看到。如果你的系统是32位直接regsvr32 iPlot.ocx就行。注册成功的标志是弹出“DllRegisterServer in iPlot.ocx succeeded”的提示。如果弹出的是“模块已加载但找不到入口点”或者“无法定位程序输入点”说明这个ocx文件本身可能不是标准的ActiveX控件或者文件被安全软件动过手脚需要检查杀毒软件隔离区。2.4 在Delphi IDE里把控件面板调出来注册成功之后打开Delphi IDE正常情况下不需要额外配置iocomp控件会自动出现在ActiveX控件栏里。如果没出现走一遍手动导入流程菜单栏找到Component→Import Component→Import ActiveX Control。点击Refresh按钮让它重新扫描注册表。在列表里找到iocomp相关条目勾选。按提示生成包装单元Project最后一路确定。完成之后新建一个工程窗体下方的控件面板上应该多出一排iocomp图标。拖一个到窗体上双击进入它的属性编辑器看到完整的属性树就说明安装成功。这里补充一句关于授权的话。iocomp是商业控件如果你手上的包里没有对应的许可证文件控件在运行时会有试用限制比如弹提示框或者加水印。正式商用的话按官方渠道购买授权网上那些“绿色免激活”的包在许可证完整性上经常有坑后面专门说。2.5 验证安装的检查清单给大家一个我每次装完控件都会过一遍的验证清单检查项操作正常结果控件已注册命令行regsvr32对应ocx提示注册成功IDE能看到控件打开Delphi查看ActiveX面板出现iocomp图标能拖放到窗体新建工程拖入一个仪表控件窗体上正常显示运行时无授权报错运行程序查看控件表现不弹试用水印/提示Demo能编译打开官方Demo编译运行正常打开窗口如果任何一步卡住了别慌第5章专门讲排查链路。3. 控件面板上哪些真正值得用iocomp的控件数量不少但实际工控项目里用得最频繁的翻来覆去就那么几类。我把它们按功能分个组顺便说一下怎么配。3.1 仪表类控件指针表、量具、旋钮仪表盘是工业监控界面的门面。iocomp的仪表类控件打开后默认是一个圆形的指针表你可以配置量程上下限、刻度颜色、指针颜色、表盘背景、单位文字等。我一般会把量程上限Max设成现场实际量程的1.1倍到1.2倍留出富余。比如空压机排气压力正常在0.7MPa左右量程设成0~1.0MPa比较合适这样指针走在中段既不显得空也不会因为瞬间超量程打表。关键属性大致是这几个方向数值输入Value给这个属性赋一个浮点数指针就会动。这也是运行时数据绑定的入口。量程与单位Max、Min、Scale、UnitText。单位文字比如MPa、℃、m³/h。外观与颜色指针、刻度、背景色按企业VI或客户习惯调。报警色超限时指针或表盘变红。具体属性名不同版本略有差异装好后打开CHM帮助文档搜索“Alarm”基本都能找到。旋钮和滑块类控件也归在仪表这组。旋钮常用来做手动设定比如人工设定一个温度目标值滑块适合做连续量调节类似变频器的频率给定。它们本质上也是数值输入控件运行时读Value属性就能拿到当前设定值。3.2 趋势曲线实时数据是否直观的关键趋势曲线是另一个高频控件。客户一般不会只看仪表盘上的瞬时值他们更要看“这段时间压力是不是一直在涨”“昨晚温度有没有异常波动”。iocomp趋势曲线控件能解决这个问题。配置趋势曲线我一般做这几件事设置Y轴量程和单位让它跟仪表量程保持一致避免视觉上的误导。设置X轴显示时间窗口比如“显示最近10分钟的数据”控件会滚动刷新。根据需要添加2~4条曲线每条曲线独立颜色分别绑定不同的参数。确认缓冲区大小。缓冲区决定历史数据能往回看多久如果项目要求追溯24小时趋势缓冲区要点需要设得足够大不然程序跑久了曲线会断。运行时调用添加数据点的方法把当前值和当前时间追加进去。曲线这块最容易踩的坑是时间对齐。多台设备的数据如果来自不同OPC Item它们的时间戳可能不是完全同步的画出来会有轻微的偏移。如果客户对精度要求高我一般会在读取到数据后本地以统一的系统时间写入曲线而不是直接依赖OPC时间戳。3.3 指示灯、开关和文本显示这组控件在报警和状态显示里特别常用。LED灯控件可以表示设备运行/停止/故障有圆形和方形两种外观颜色可调还能加闪烁效果。开关按钮控件可以做成“启动/停止”按钮联动PLC的DO点。文本显示控件做出来是数码管的效果适合显示温度、压力、时间等数值。我常用的配合是一个LED灯显示设备状态一个文本显示控件显示关键参数大数字再加一个开关控件做手动启停。三个控件放在一起视觉上很工整客户看了也认可。一个需要注意的地方是LED的颜色语义要统一。建议全厂项目里红色只用于故障/报警绿色只用于运行/正常黄色用于待机/警告。别一个界面里红色表示正在运行另一个画面里红色表示故障操作员看多了会误判。3.4 控件通用属性设置的逻辑不管哪类iocomp控件都有一个共同的使用套路将显示值绑定到数据输入将外观状态关联到报警逻辑。换句话说控件本身不关心数据从哪来它只负责把值可视化。所以在做界面的时候我的习惯是先把数据采集逻辑写好再回头配置控件。先把OPC读出的数值调试好再加仪表盘上去这样能用最小成本定位是通讯问题还是显示问题。另外iocomp的ActiveX控件在Delphi里运行时会生成一个包装单元属性名在Delphi代码里往往被转成了带前缀的完整名称。如果记不住属性名可以把控件拖到窗体上用对象检查器逐项查看工具提示会显示对应的设计期属性名照着引用就行。4. OPC联调实战把数据灌进iocomp控件4.1 OPC DA与OPC UA先想清楚再动手OPC是工业通讯里的一个经典标准但很多初学者会在“DA”和“UA”之间绕晕。简单讲OPC DAData Access是老一代规范基于Windows的COM/DCOM技术。特点是实时性好、实现简单但配置麻烦尤其跨机器访问时DCOM权限和防火墙能让人怀疑人生。OPC UAUnified Architecture是新一代规范走TCP/IP不依赖Windows的COM机制跨平台、加密、证书认证、信息模型更完善。WinCC、组态王、西门子、罗克韦尔这些主流平台目前都在推UA。如果你的现场环境和压缩包里的工具都支持我建议优先选OPC UA。但坦白讲很多老项目、老设备、老PLC驱动只支持DA所以DA的知识也必须有。我实际项目里大概是“新项目用UA老项目继续DA”的状态两边都要会。4.2 用Simulation Server搭一个不会出错的测试环境联调的时候最怕什么怕现场PLC还没接好或者设备压根没通电。所以先在本机装一个模拟OPC服务器把链路调通是工控开发的基本操作。Matrikon OPC Simulation是个免费的模拟器装好之后会生成一个模拟设备里面不断产生随机数标签名比如Random.Int1、Random.Real4、Bucket Brigade.Int1等。这些标签可以模拟压力、温度、流量等各种数据类型拿来练手再合适不过。我一般这样搭建测试环境安装Matrikon OPC Simulation。用它的OPC Quick Client连接本机模拟服务器浏览标签列表记下想读的Item ID。Item ID就是OPC服务器内部的名字比如Matrikon.OPC.Simulation.1对应的标签由服务器决定。在Delphi工程里用OPC客户端组件或接口去连接同一个服务器。把读到的值传给iocomp控件验证显示效果。4.3 Delphi里的数据读取与控件赋值Delphi连OPC DA常见有两种路线路线A使用OPC DA Automation接口。系统装过OPC Core Components之后可以通过CreateOleObject(OPC.Server)创建客户端对象。这是官方标准接口不依赖第三方的控件。路线B使用HslCommunication这类工业通讯库。它把Modbus、西门子、三菱等协议和OPC UA封装成了更友好的类代码量少而且有Delphi版本可以使用。下面是路线A的核心逻辑示意。不同OPC组件API名称会有差异但总体套路就是“连接服务器→添加Group→添加Item→定时读值→赋值给仪表”。var OpcServer, OpcGroup, OpcItem: OleVariant; begin // 1. 创建OPC客户端对象并连接服务器 OpcServer : CreateOleObject(OPC.Server); OpcServer.Connect(Matrikon.OPC.Simulation); // 2. 添加一个组设定刷新率 OpcGroup : OpcServer.OPCGroups.Add(MyGroup); OpcGroup.IsActive : True; OpcGroup.UpdateRate : 100; // 100ms // 3. 添加要读取的Item OpcItem : OpcGroup.OPCItems.AddItem(Random.Real4, 1); // 4. 定时器里把Item值赋给仪表控件 // Instrument1.Value : OpcItem.Value; end;实际项目里数据点不止一个我会用一个TList或者数组去管理多个OPC Item每个Item和自己对应的显示控件建立映射关系。结构大概是“ItemId 显示控件指针 报警阈值 单位”这样新增一个数据点只需要在配置列表里加一行。定时刷新的间隔我一般取100到200毫秒。电脑上看仪表指针已经足够流畅如果间隔太小反而会因为OPC服务器并发压力导致通讯堵塞。当然如果走OPC UA订阅模式服务器主动推送数据实时性会更好但代码复杂度也高一些。4.4 DCOM与防火墙远程OPC最容易卡住的地方如果OPC服务器不在本机而是在另一台工控机上最头疼的就是DCOM配置。这也是为什么我一直强调先在本机用Simulation调试因为本机联调可以完全绕过DCOM这个坑。真到了跨机器访问DA服务器的场景需要检查的是用dcomcnfg打开组件服务找到对应的OPC服务器程序在“属性→安全”里把“启动和激活权限”“访问权限”加入运行客户端的用户账户。如果网络环境比较简单可以直接把权限设为“允许Everyone”或“允许Network Service”。但注意这是牺牲安全性换便利性的做法正式项目里要做最小权限。防火墙放行OPC相关的端口和程序。OPC DA动态端口比较多用起来比较痛苦这也是OPC UA越来越受欢迎的原因之一。组态王、LabVIEW连接NI OPC Servers和西门子1200这类场景说到底也是同一个链路设备驱动程序往OPC服务器里写数据客户端组态画面、LabVIEW界面、Delphi上位机再从OPC服务器读数据。只是它们更容易上手因为平台自带了OPC客户端配置界面。用Delphi做上位机时相当于把这一层自己实现了所以OPC客户端的本文还有配套的精品资源点击获取