KingView组态开发实战:从PLC通讯到上位机监控系统搭建 1. 项目概述从PLC到上位机的桥梁如果你在工业自动化领域摸爬滚打过一阵子肯定对PLC可编程逻辑控制器不陌生。它就像是工厂设备的大脑负责执行逻辑控制、顺序控制、定时、计数与算术操作等指令。但光有大脑还不够我们还需要一双“眼睛”和一个“控制面板”来观察大脑的运行状态并给它下达指令。这就是上位机组态软件存在的意义。而KingView组态王作为国内工业组态软件的先行者和市场占有率极高的产品几乎是每一位从PLC编程转向上位机开发的工程师绕不开的一站。我最初接触KingView是在一个老旧产线的改造项目上。现场用的是西门子S7-200系列PLC控制着十几台电机和阀门。客户的需求很简单在办公室的电脑上能实时看到各个电机的启停状态、阀门的开度、以及一些关键的温度和压力参数并且能远程点动控制几个关键的设备。当时项目预算有限工期紧在对比了WinCC、力控、iFIX等一众软件后最终选择了KingView。原因无他对国内工控环境适配好、驱动丰富特别是对老型号PLC支持到位、学习曲线相对平缓而且性价比高。这个“【PLC】KingView入门及组态开发”项目本质上就是搭建一个连接下层PLC硬件与上层管理人员之间的可视化监控桥梁。它不涉及复杂的控制算法编写核心在于数据通讯的建立、画面组态的绘制、以及数据逻辑的绑定。对于已经熟悉PLC梯形图或ST语言的工程师来说学习KingView更像是掌握一种新的“表达方式”将硬件IO点、寄存器地址转化为屏幕上会动的图形、闪烁的指示灯和可填写的输入框。2. KingView核心概念与工作流程拆解在真正打开软件动手之前理解KingView的几个核心概念和工作流程能让你少走很多弯路。它的设计哲学是“面向对象”和“基于事件”虽然听起来有点软件工程的调调但在组态里非常直观。2.1 核心四要素设备、变量、画面、命令语言任何KingView项目都离不开这四大基石它们构成了数据流动的完整闭环。设备这里指的不是物理的PLC而是在KingView软件中定义的、与物理PLC对应的通讯驱动连接。你需要告诉KingView你要和谁说话比如一台西门子S7-1200 PLC通过什么方式说话比如以太网、串口以及说话的规则协议如S7协议、Modbus TCP。这是所有数据来源的根基。如果设备定义错了后面所有工作都是空中楼阁。变量这是KingView的灵魂。变量是软件内部用来代表PLC中某个具体数据点的抽象。例如PLC的输入点I0.0一个按钮信号在KingView中可以定义一个名为“启动按钮”的I/O离散变量与之关联。变量分为多种类型I/O变量与设备PLC直接关联的变量值随PLC数据实时变化。这是监控的核心。内存变量完全存在于KingView软件内部的变量不与硬件关联。常用于中间计算、状态标志或画面内部的逻辑控制。结构变量可以理解为自定义的数据类型比如定义一个“电机”结构包含“启动”、“停止”、“故障”、“转速”等多个成员变量。这在管理多个同类设备时非常高效。画面用户看到的监控界面。你可以在这里放置泵、管道、罐体、仪表盘、按钮、指示灯等图元。但画面本身是“静态”的它需要和“变量”绑定才能“活”起来。比如一个代表电机的图形其“填充颜色”属性绑定到一个名为“电机运行状态”的变量上当变量值为1时显示绿色为0时显示灰色。命令语言这是KingView的逻辑引擎。虽然它不像PLC编程那样处理高速的实时控制但用于处理画面交互逻辑、数据运算、定时任务等绰绰有余。它主要出现在几个地方应用程序命令语言项目启动、运行期间、退出时执行的脚本。数据改变命令语言当某个变量的值发生变化时触发执行。事件命令语言当画面中某个图元被点击、鼠标移入移出等事件发生时触发。画面命令语言与特定画面关联画面打开或关闭时执行。动画连接这其实是一种特殊的、可视化的命令语言。通过对话框配置图元属性如位置、大小、颜色与变量之间的函数关系实现动画效果。注意很多新手会混淆“变量”和“画面动画”。记住一个原则变量是数据载体动画是数据表现。你应该首先规划好需要哪些变量数据点再去画面上思考如何展示它们。2.2 标准工作流程从零搭建一个监控画面理解了核心要素一个标准的开发流程就清晰了需求分析与变量规划这是最容易忽视但最关键的一步。拿到工艺流程图或控制要求后不要急着打开软件。拿出一张纸或Excel表格列出所有需要监控的数据点。例如数字量输入DI急停信号、到位传感器、按钮状态。对应PLC的I点。数字量输出DO电机启停、阀门开关、指示灯。对应PLC的Q点。模拟量输入AI温度、压力、流量。对应PLC的IW或ID区域。模拟量输出AO调节阀开度给定、变频器频率给定。对应PLC的QW或QD区域。内部寄存器设备运行时间、产量计数、故障代码等。对应PLC的M、DB区。 为每个数据点规划一个清晰的变量名如“反应釜温度_AIT101”、“输送电机运行状态_M101”。良好的命名习惯是后期维护的福音。创建项目与设备配置在KingView中新建项目然后进入“设备”配置。选择你的PLC品牌和型号如西门子-S7-1200-TCP填写正确的IP地址、机架号、槽号对于S7-300/400、连接超时等参数。务必使用PLC编程软件如TIA Portal确认这些参数并确保PC与PLC网络互通。定义变量数据库在“数据词典”中根据之前的规划逐个创建变量。关键设置包括变量名、变量类型I/O实数、I/O离散等、连接设备选择上一步创建的设备、寄存器地址。地址格式至关重要这是与PLC通讯的钥匙。不同PLC的地址格式不同。西门子M0.0(位)MW2(字)MD4(双字)DB1.DBX0.0(数据块位)DB1.DBD4(数据块双字)。三菱X0Y1D100。欧姆龙CIO0.00DM100。填错地址是导致通讯成功但数据不对的最常见原因。绘制监控画面使用KingView的图库和绘图工具构建界面。建议分层绘制背景层厂房轮廓、设备布局、静态设备层、动态元素层。将图元的动画属性如填充颜色、位置、大小、文本显示与之前定义的变量绑定。编写逻辑与交互为按钮配置“命令语言”实现点击下发控制命令利用“数据改变命令语言”实现报警触发、数据记录等在“应用程序命令语言”中编写初始化脚本。调试与运行在开发系统TouchView中运行测试通过“变量管理”工具强制变量值模拟PLC信号检查画面动画和逻辑是否正确。最后切换到运行系统与真实PLC联调。3. 核心环节实战以西门子S7-1200通讯与电机控制为例让我们通过一个最经典的案例——监控并控制一台三相异步电机的启停来串联上述所有知识点。假设PLC为西门子S7-1200电机由PLC的一个输出点Q0.0控制一个启动按钮信号接入I0.0一个停止按钮信号接入I0.1一个故障信号接入I0.2电机电流值存放在MD100中。3.1 设备连接配置在KingView设备库中找到“PLC” - “西门子” - “S7-1200” - “TCP”。新建一个设备我们命名为“PLC_MAIN”。设备地址这里填写S7-1200的IP地址例如192.168.0.10。通讯参数通常保持默认即可端口102帧间隔等。关键点是本地TSAP传输服务访问点和远程TSAP。对于S7-1200/1500的TCP通讯通常设置为本地TSAP:10.00(十进制) 或0x1000(十六进制)远程TSAP:03.00(十进制) 或0x0300(十六进制) 这个设置需要与PLC侧的配置匹配。在TIA Portal中查看PLC设备属性-“防护与安全”-“连接机制”需要勾选“允许来自远程对象的PUT/GET通信访问”。实操心得如果通讯连不上首先ping一下PLC的IP确保网络物理连通。然后检查TSAP设置和PLC侧的连接机制是否允许。KingView的“设备调试”功能非常好用可以测试单个点的读写是排查通讯问题的利器。3.2 变量定义与地址映射根据控制要求我们在KingView的“数据词典”中定义以下变量变量名变量类型连接设备寄存器地址说明StartBtnI/O离散PLC_MAINI0.0启动按钮常开StopBtnI/O离散PLC_MAINI0.1停止按钮常闭FaultSigI/O离散PLC_MAINI0.2故障信号常开1表示故障MotorRunI/O离散PLC_MAINQ0.0电机运行命令MotorCurrentI/O实数PLC_MAINMD100电机电流值假设已由PLC转换为浮点数单位AMotorState内存离散内部无用于画面显示的电机运行状态1运行0停止Alarm_OverCurrent内存离散内部无过流报警标志这里有一个关键技巧MotorRun是直接控制PLC输出的变量而MotorState是一个内存变量用于在画面上更稳定地显示状态。为什么因为PLC的输出点Q0.0可能因为程序中的互锁、急停等逻辑瞬间变化直接绑定可能导致画面指示灯频繁闪烁。我们可以用“数据改变命令语言”或画面逻辑当MotorRun为1时将MotorState置1并保持直到收到停止信号或故障信号才清零这样画面显示更稳定。3.3 画面组态与动画连接绘制静态元素画出电机符号、按钮、电流表盘背景等。制作动态指示灯画一个圆形作为电机状态灯。右键点击它选择“动画连接” - “填充属性”。在弹出的对话框中表达式关联变量MotorState。设置分段点0对应红色停止1对应绿色运行。制作电流显示画一个“文本”图元同样打开“动画连接” - “数值输出”表达式关联变量MotorCurrent可以设置输出格式如##0.0 A。制作控制按钮绘制一个“启动”按钮。右键 - “动画连接” - “触敏动作” - “弹起时”。在弹出的命令语言窗口中输入// 置位电机运行命令同时更新状态显示 MotorRun 1; MotorState 1;绘制一个“停止”按钮。同样方法在命令语言中输入// 复位电机运行命令和状态 MotorRun 0; MotorState 0;绘制一个“复位”按钮用于故障复位。命令语言中可以对PLC的故障复位地址进行操作。3.4 高级功能实现报警与数据记录单纯的监控还不够异常报警和历史数据追溯是工业系统的刚需。报警配置 在KingView的“报警组”中定义报警例如“电机过流报警”。然后在“报警定义”中新增一条报警。报警变量选择MotorCurrent。报警条件选择“高高报警”或“高报警”设定阈值如 50.0。报警文本填写“电机电流超过50A请检查负载”报警组选择“电机报警组”。 这样当电流超过50A时KingView运行系统会自动在报警窗口显示这条信息并可以触发声音、闪烁等提示。数据记录 如果想记录电机电流的历史曲线需要配置“历史记录”。在“变量”中将MotorCurrent变量的“记录”属性打勾。进入“历史记录”配置设置记录周期如每1秒记录一次、保存天数、存储路径通常为本地文件或数据库。在画面上插入一个“历史趋势曲线”控件将其关联到变量MotorCurrent并设置时间范围如最近1小时。这样操作员就能直观地看到电流随时间的变化趋势。4. 深度避坑指南与性能优化技巧在实际项目中仅仅实现功能是远远不够的。系统的稳定性、可维护性和性能同样重要。下面分享一些从坑里爬出来的经验。4.1 通讯稳定性与故障排查通讯是组态软件的命脉也是最容易出问题的地方。问题一通讯时断时续画面数据刷新卡顿。排查思路网络负载检查网络是否拥堵。KingView与PLC之间如果数据量很大尤其是大量浮点数、字符串会占用较多带宽。使用Wireshark等工具抓包分析。扫描周期在KingView的设备定义中有一个“数据采集优化”选项。对于S7-1200/1500建议使用“异步采集”模式并合理设置分组和扫描周期。不要将所有变量都放在一个快速扫描组里。将关键的、变化快的点如急停、运行状态放在一个组周期设为100-200ms将变化慢的点如温度、累计值放在另一个组周期设为500-1000ms。PLC侧负载PLC的循环周期是否过长通讯处理如PUT/GET服务器是否占用了过多CPU资源在TIA Portal中查看PLC的在线诊断。解决技巧采用变量分组采集策略。在KingView中可以为同一个PLC设备创建多个“逻辑设备”每个逻辑设备指向同一个物理PLC但设置不同的采集周期和变量组。这比在一个设备下管理所有变量更灵活。问题二部分变量读写正常部分变量始终为0或读写失败。排查思路这几乎100%是地址错误或数据类型不匹配。地址核对逐字核对KingView中的变量地址与PLC程序中的绝对地址。注意字节序问题西门子PLC的存储字节序与Intel PC一致小端但有些协议或特殊数据类型需要注意。对于双字DWord或浮点数Float确保地址是4字节对齐的如MD100, MD104而不是MD101。数据类型匹配PLC中一个Real浮点数占4个字节。在KingView中定义变量时类型必须是“I/O实数”地址对应MDxx。如果PLC里是Int整数KingView中应选“I/O整数”地址对应MWxx。DB块优化访问对于西门子S7-1200/1500频繁访问分散的M区或DB中单个变量效率较低。最佳实践是在PLC中创建一个专用的“通讯DB块”将所有需要上传给上位机的数据状态、模拟量打包放在这个DB的连续区域中同样创建一个“下发DB块”接收上位机命令。在KingView中只需要定义少数几个大的“I/O实数”或“I/O整数”数组变量指向这些DB块的起始地址如DB10.DBD0然后通过KingView的脚本或间接访问方式解析这个数据包。这能极大提升通讯效率和稳定性。4.2 画面设计与运行时性能复杂的画面会消耗大量客户端运行系统的CPU和内存资源。禁忌一在一个画面上放置成百上千个动态图元。后果画面打开慢切换卡顿CPU占用率高。优化方案分页设计按工艺流程或功能区划分多个子画面。使用“菜单”或“按钮”配合“ShowPicture()函数进行导航。惰性加载对于非当前焦点区域的设备可以将其动画连接暂时禁用或使用“图形模板”和“替换单元”技术只在需要时实例化。简化图形尽量使用KingView自带的、优化过的图库精灵避免使用过于复杂或高分辨率的位图。禁忌二在动画连接或命令语言中执行复杂的循环或频繁的变量操作。后果脚本执行阻塞导致画面响应迟钝甚至软件假死。优化方案事件驱动多用“数据改变命令语言”代替在“应用程序命令语言”中用While循环不断查询。延时执行对于非实时性的操作如定时生成报表使用KingView的SetTimer()和KillTimer()函数避免阻塞主线程。变量访问优化减少对同一变量的重复读取。如果需要多次使用一个变量值先将其赋给一个局部内存变量。4.3 项目维护与版本管理工业项目生命周期长后期维护和升级是常态。技巧一规范的变量命名与注释。做法采用“设备位号_参数类型”的命名方式如P101_Run(泵101运行状态)TIC203_SP(温度控制器203设定值)。在变量定义的“描述”栏详细写明该变量对应的物理意义、PLC地址、单位、量程等。画面上的每一个重要图元也务必在“属性”中填写注释。三个月后你自己都可能忘了那个红色的长方形是代表什么阀门。技巧二使用“结构变量”和“图形模板”。场景生产线有20台相同的电机每台都需要监控运行、停止、故障、电流、频率。传统做法定义100个独立变量画20遍相似的图形绑定100次动画连接。繁琐且易错。高级做法定义一个“电机”结构变量成员包括Run (离散) Stop (离散) Fault (离散) Current (实数) Freq (实数)。创建一个“电机监控面板”图形模板里面的指示灯、按钮、数据显示框的动画连接都绑定到这个结构变量的成员上。在画面上从图库中插入20个“电机监控面板”实例每个实例关联一个具体的“电机”结构变量如Motor[1],Motor[2]。 这样你只需要维护一个图形模板和一个结构定义所有实例自动继承。修改模板所有实例同步更新。技巧三项目备份与版本注释。血泪教训永远不要在唯一的工程文件上直接修改。KingView工程文件.MPJ是二进制格式一旦损坏很难修复。规范操作使用SVN、Git或简单的文件夹备份。每次重大修改前复制整个工程文件夹并重命名为“项目名_日期_修改内容简述”。在KingView工程内部利用“工程注释”功能记录每次版本更新的主要变更点。