三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

组态王KingView入门指南:从PLC通讯到上位机监控系统搭建

组态王KingView入门指南:从PLC通讯到上位机监控系统搭建

1. 项目概述:从PLC到上位机的桥梁搭建

如果你刚接触工业自动化,可能会被一堆缩写搞晕:PLC、SCADA、HMI、DCS…… 而当你开始尝试把车间里那台西门子S7-1200 PLC的数据“搬”到电脑屏幕上时,“组态软件”这个词就会频繁出现。KingView(组态王)正是国内工业自动化领域里,你绕不开的一个名字。它不是编程语言,更像是一个强大的“可视化搭建工具”,专门负责把PLC、仪表、变频器这些底层设备的数据,变成操作员电脑上能看懂的流程图、趋势曲线和报警列表。

我最早用组态王还是6.5x的版本,那时做一个简单的液位监控,需要手动写一大堆驱动配置。现在的版本已经友好太多了,但核心逻辑没变:连接设备、定义变量、设计画面、编写逻辑、发布运行。这五步,就是组态开发的标准流程。对于电气工程师、自动化工程师或者项目调试人员来说,掌握一款像KingView这样的主流组态软件,意味着你不仅能让机器“动起来”,还能让整个生产过程“看得见、管得住”。它解决的核心问题,就是信息孤岛——把现场分散的、不同协议的数据,统一采集、集中展示、并允许进行远程控制和逻辑干预。

2. 核心需求解析:为什么是KingView?

市面上组态软件不少,国外有WinCC、iFIX、InTouch,国内也有力控、MCGS等。那为什么很多项目,尤其是中小型项目和入门学习,会从KingView开始?这背后有几个很实际的考量。

2.1 对国内工控生态的深度适配

KingView一个巨大的优势在于它对国内主流PLC、仪表、板卡的驱动支持非常全面且及时。你搜索“三菱PLC”、“信捷PLC”、“汇川PLC”,这些在国内自动化市场占有率极高的品牌,KingView通常都有成熟、稳定的驱动库。这意味着你不需要自己去研究Modbus TCP的报文细节,或者为某个小众协议写DLL,软件内置的驱动向导基本能搞定90%的连接问题。这种“开箱即用”的特性,极大地降低了项目初期通讯调试的难度和周期。

2.2 学习曲线相对平缓

相比于WinCC基于STEP7的集成环境,或者iFIX较为复杂的VBA脚本系统,KingView的界面和逻辑对初学者更友好。它的开发环境(TouchExplorer)将工程浏览器、画面开发系统、数据库组态等模块集成得比较直观。变量定义、画面绘制、动画连接、命令语言(类似C语言的脚本)这几个核心功能模块划分清晰。一个有一定计算机基础的技术人员,跟着教程做一两个案例,基本就能上手完成简单的监控项目。这种低门槛,让它成为了很多高校自动化专业实训和工程师入门SCADA的首选。

2.3 成本与功能的平衡

在正版软件领域,KingView在提供核心SCADA功能(数据采集、报警、历史记录、报表)的同时,其授权费用相对于一些顶级国外品牌更具竞争力。对于很多预算有限但又需要可靠监控系统的项目来说,这是一个关键的决策点。而且,它的运行系统对计算机硬件的要求也相对温和,老旧的工控机也能跑得起来,增强了在改造项目中的适用性。

注意:选择组态软件,永远没有“最好”,只有“最合适”。对于超大型、高可靠性要求的DCS系统,或者需要深度与ERP/MES集成的项目,可能需要更强大的平台。但对于大多数单机设备监控、小型生产线数据采集这类场景,KingView是一个务实且高效的选择。

3. 开发环境搭建与工程框架创建

工欲善其事,必先利其器。开始第一个KingView项目前,正确的环境准备能避免很多后续的麻烦。

3.1 软件安装与版本选择

目前KingView的主流版本是6.x和7.x系列。对于新手,我建议从KingView 6.55 SP17.5 SP3这类比较成熟的版本开始。这些版本资料多,社区遇到问题也容易找到解决方案。安装过程本身是向导式的,但有几点需要特别留意:

  1. 操作系统兼容性:KingView 6.x对Windows XP/7支持最好;7.x版本则能更好地兼容Windows 7/10。务必在安装前查阅官方发布的兼容性列表。在Windows 10或11上安装老版本时,可能需要以管理员身份运行安装程序,并尝试兼容性模式。
  2. 安装路径:强烈建议安装在非系统盘(如D盘),且路径中不要包含中文或特殊字符。像D:\KingView这样的纯英文路径是最稳妥的。这是因为组态王的很多运行时组件和工程文件对路径识别比较敏感,中文路径可能导致意想不到的加载失败。
  3. 关闭杀毒软件与防火墙:在安装过程中,暂时关闭Windows Defender或其他第三方杀毒软件。它们有时会误拦截组态王的驱动安装或服务注册,导致软件功能不全。
  4. 授权管理:安装完成后,你需要使用加密狗或授权文件来激活软件。演示版通常有2小时运行时间或点数限制,足够用于学习。正式项目必须使用合法授权。

3.2 创建一个结构清晰的工程

安装完成后,打开“工程管理器”。第一次使用,这里空空如也。点击“新建”,给你的第一个工程起个名字,比如“水箱液位监控系统”。

新建工程后,会自动进入“工程浏览器”。这是你整个项目的控制中心。左侧是树形目录,核心的几个分支是:

  • 设备:在这里配置你要连接的所有硬件,PLC、智能仪表、板卡等。
  • 数据库->数据词典:这里是项目的“心脏”,所有需要监控的变量都在这里定义。
  • 画面:存放你所有绘制的监控界面。
  • 命令语言:存放你编写的各种脚本逻辑。
  • 报表报警等:对应功能的配置。

一个好的习惯是从一开始就规划好工程结构。比如在“画面”目录下,可以建立子目录:“01_总览画面”、“02_工艺流程”、“03_参数设置”、“04_历史曲线”。在“命令语言”下,可以建立“启动脚本”、“循环脚本”、“事件脚本”。这种结构在项目后期维护和查找资源时,优势非常明显。

4. 核心环节一:设备通讯与变量定义

这是组态开发最基础,也最考验功底的一步。通讯不通,后面所有绚丽画面都是空中楼阁。

4.1 设备驱动配置(以西门子S7-1200 TCP/IP为例)

假设我们要连接一台西门子S7-1200 PLC,其IP地址为192.168.1.10。

  1. 在工程浏览器中,右键点击“设备” -> “新建”。你会看到一个庞大的驱动列表。找到“PLC” -> “西门子” -> “S7-1200/1500” -> “TCP”驱动。
  2. 点击“下一步”,给这个设备连接起个逻辑名,如“PLC_1200_1”。
  3. 继续“下一步”,进入关键参数设置页面:
    • 设备地址:这里填写PLC的IP地址,格式为192.168.1.10
    • 通信端口:西门子S7-1200默认的ISO-on-TCP端口是102,保持默认即可。
    • 站号:通常为0。
    • 采集周期:默认1000毫秒。对于快速变化的信号(如转速),可以设小,如200ms;对于慢变化信号(如温度),可以设大,如2000ms,以减轻网络和系统负荷。
  4. 完成配置后,你会在“设备”下看到“PLC_1200_1”。右键它,选择“测试”,如果网络连通且PLC允许访问,你会看到“设备测试正常”的提示。这一步务必做,它能第一时间确认物理链路和基本参数是否正确。

4.2 数据词典:定义你的“信息元”

通讯建立后,我们需要告诉KingView,具体要读写PLC里的哪些数据。这就是在“数据词典”里定义变量。

  1. 打开“数据词典”,点击“新建变量”。
  2. 变量名:使用有意义的英文或拼音,如WaterLevel(液位)、Motor1_Start(电机1启动)。避免用a1, b2这种无意义的命名。
  3. 变量类型:这是关键,必须和PLC中的数据类型对应。
    • I/O离散:对应PLC的布尔量(Bool),如开关、报警点。连接设备时,你需要指定地址,如M0.0(西门子M区位)或QX0.0(三菱输出点)。
    • I/O整数:对应PLC的16位整数(INT)。地址如MW10(西门子,从M10开始的一个字)。
    • I/O实数:对应PLC的32位浮点数(REAL)。地址如MD20(西门子,从M20开始的一个双字)。
    • 内存离散/整数/实数:这类变量不连接外部设备,只在KingView运行时内部使用,用于中间计算或状态标志。
  4. 连接设备:选择你刚才建立的“PLC_1200_1”。
  5. 寄存器:填写PLC中的具体地址。这里是最容易出错的地方!不同品牌PLC的地址格式天差地别。
    • 西门子M0.0(位),DB1.DBX0.0(数据块位),DB1.DBD4(数据块双字-实数)。
    • 三菱X0(输入),Y0(输出),D100(数据寄存器)。
    • 欧姆龙CIO0.00D100
    • Modbus设备01 4x00001(表示站号1,保持寄存器40001)。这里的“4x”是协议约定,不是实际地址。

    实操心得:在定义变量前,最好有一份PLC的地址分配表。对于西门子PLC,特别注意DB块(数据块)的访问,需要确保在PLC编程软件中,该DB块属性已勾选“优化的块访问”取消(对于老版本兼容),或者使用完全限定的地址。很多通讯失败都是因为地址格式不对或PLC侧权限未开放。

5. 核心环节二:监控画面设计与动画连接

画面是给操作员看的,美观、直观、操作方便是核心要求。

5.1 基本绘图与图库使用

新建一个画面,进入画面开发系统。左侧是工具箱,有直线、矩形、文本、按钮等基本工具。右侧有丰富的图库,包括管道、泵、阀门、仪表盘等工业常用元素。

  • 绘制静态背景:先用矩形、线条等画出工艺的静态框架,比如水箱的外形、管道走向。这部分没有动画,只是底图。
  • 插入动态元素:从图库拖一个“水泵”到管道上,再拖一个“仪表”到水箱旁边。这些图库元素通常是“精灵”或“组合图素”,本身已经内置了一些动画属性(如旋转、颜色变化)。
  • 自定义图素:对于图库里没有的特殊设备,可以用基本图形组合,然后“合成组合图素”,方便重复使用和统一管理。

5.2 动画连接:让画面“活”起来

动画连接是画面与数据词典变量绑定的过程。右键点击画面上的对象(比如水泵图形),选择“动画连接”。

  1. 颜色变化:常用于状态指示。比如,让水泵运行时显示绿色,停止时显示灰色。
    • 在“属性变化” -> “填充颜色”中,设置表达式。可以关联一个布尔变量Motor_Run。设置Motor_Run==1时颜色为绿色,Motor_Run==0时为灰色。
  2. 位置与大小:常用于模拟液位升降、阀门开度。
    • 在“位置与大小变化”中,选择“垂直移动”。关联一个实数变量Tank_Level(液位,范围0-100)。设置移动距离对应像素范围,比如液位0对应图形底部,液位100对应图形顶部。
  3. 值输出:显示数值。
    • 在“数值输出”中,选择一个文本对象,关联变量Tank_Level,并设置格式,如“###.## m”,表示显示两位小数。
  4. 命令语言(脚本):实现复杂逻辑。
    • 在“命令语言连接”中,选择“按下时”、“弹起时”等事件。比如,给一个“启动”按钮的“按下时”事件写入脚本:Motor_Run = 1;。给“停止”按钮写入:Motor_Run = 0;。这样就能通过画面按钮控制变量,进而通过变量写PLC,控制实际设备。

注意事项:动画连接不宜过多过复杂,尤其是“闪烁”效果要慎用,过多的动态效果会消耗运行系统资源,在低配置工控机上可能导致画面卡顿。对于关键报警状态,用“闪烁”是有效的,但对于一般状态,用颜色区分即可。

6. 核心环节三:报警与历史数据记录

监控系统不仅要“看得见”,还要“记得住”和“叫得应”。报警和历史数据是SCADA系统的核心高级功能。

6.1 报警配置

报警用于及时通知操作员系统异常。在KingView中,报警主要分为“离散量报警”和“模拟量报警”。

  1. 离散量报警:针对布尔变量。比如电机过载信号Motor_Overload
    • 在数据词典中,双击Motor_Overload变量,进入“报警定义”选项卡。
    • 勾选“允许报警”,选择“离散量报警”。
    • 在“报警组”中选择一个分组(如“设备报警”),便于分类查询。
    • 设置“报警文本”:1号电机过载报警!。可以设置“恢复文本”:1号电机过载恢复。
    • 触发条件选择“变量为1时报警”(即高报警)。
  2. 模拟量报警:针对整数或实数变量。比如水箱液位Tank_Level
    • 同样在变量的“报警定义”中,选择“模拟量报警”。
    • 可以设置多种限值:高报警(如>90%)、高高报警(如>95%,更严重)、低报警(如<10%)、低低报警(如<5%)。为不同级别设置不同的报警文本和优先级。
  3. 报警窗口:在画面中,通过菜单“工具” -> “报警窗口”,可以插入一个报警显示控件。你需要配置它绑定到哪个报警组,以及显示哪些列(时间、变量名、报警文本、优先级等)。

6.2 历史数据记录与趋势曲线

历史数据用于事后分析和工艺优化。KingView通过“历史记录”功能实现。

  1. 变量记录设置:在工程浏览器的“历史记录” -> “历史记录配置”中,添加需要记录的变量,如Tank_LevelFlow_Rate。设置记录方式:数据变化记录(值变化超过一定死区才记录,节省空间)或定时记录(每隔固定时间记录一次)。
  2. 历史库配置:KingView使用自带的或第三方数据库(如SQL Server)存储历史数据。需要配置存储路径、数据保存天数、存储周期等。
  3. 趋势曲线控件:在画面中插入“历史趋势曲线”或“实时趋势曲线”控件。
    • 实时趋势:动态显示变量当前时刻的变化,通常用于监控。
    • 历史趋势:可以查询过去任意时间段的数据。你需要配置曲线关联的变量、时间范围、纵坐标量程等。操作员可以通过控件上的工具栏进行放大、缩小、平移等操作。

避坑技巧:历史数据记录会占用大量磁盘空间。务必根据变量重要性、变化频率合理配置记录周期和保存策略。对于每秒变化多次的压力信号,可能只需要每秒记录一次平均值;对于一天才变化几次的批次号,可以采用变化记录。同时,要建立定期备份和清理旧数据的机制,防止硬盘被撑满导致系统停止记录。

7. 核心环节四:命令语言与逻辑脚本

当简单的动画连接无法满足复杂控制逻辑时,就需要使用“命令语言”。KingView的命令语言语法类似C语言,是增强系统灵活性的关键。

7.1 命令语言的几种类型

  1. 应用程序命令语言:在工程启动时、运行时、退出时执行。常用于初始化全局变量、建立通讯连接、退出时保存数据。
  2. 数据改变命令语言:当指定变量的值发生变化时触发执行。非常适合用于连锁逻辑。例如,当“急停”按钮按下时,立即将一系列电机运行变量置0。
    // 当变量 EmergencyStop 变为1(按下)时触发 if (EmergencyStop == 1) { Motor1_Run = 0; Motor2_Run = 0; Valve_Open = 0; // ... 其他需要停止的设备 }
  3. 事件命令语言:由用户自定义的事件(如画面打开、窗口关闭、定时器到点)触发。
  4. 热键命令语言:分配给特定键盘按键。
  5. 画面命令语言:附加在特定画面上的脚本,随画面打开而加载,关闭而卸载。

7.2 常用函数与技巧

KingView提供了丰富的内部函数,掌握它们能事半功倍。

  • 数学函数Abs(),Sin(),Sqrt(),Max(),Min()等。
  • 字符串函数StrFromReal()(实数转字符串),StrMid()(取子串),用于动态生成报表标题或消息。
  • 系统函数ShowPicture()(打开画面),ClosePicture()(关闭画面),PrintWindow()(打印当前窗口)。
  • 历史数据函数HisTrendQuery()(查询历史趋势数据),用于在脚本中主动获取历史记录进行分析。
  • 文件操作FileOpen(),FileWrite(),FileClose(),可以将关键数据或操作日志写入到文本文件中。

一个实用案例:自动生成每日报表你可以创建一个“内存字符串”变量DailyReport。在“事件命令语言”中,创建一个每天0点触发的事件。脚本中,使用HisTrendQuery函数查询前一天的关键工艺参数(如平均温度、总产量),然后拼接字符串,最后用FileWrite函数将DailyReport写入一个以日期命名的文本文件中。这样就实现了一个简单的自动日报功能。

注意事项:命令语言虽然强大,但滥用会导致运行系统性能下降,尤其是写在“数据改变”命令语言中且关联高频变化的变量时。脚本逻辑应尽量简洁高效,避免死循环。复杂的计算和业务逻辑,如果可能,尽量在PLC侧完成,KingView侧重显示和调度。

8. 系统调试、发布与运行维护

所有组态开发完成后,必须在开发环境下进行充分调试,才能发布为运行系统。

8.1 分步调试策略

  1. 通讯测试:在“运行系统”启动前,使用工程浏览器中的“设备测试”功能,逐一测试所有设备的通讯状态,确保每个变量都能正确读写。
  2. 画面与动画调试:在开发系统中,使用“画面”菜单下的“预览”功能,检查画面布局、动画连接是否正确。可以模拟改变变量值,看画面元素响应是否符合预期。
  3. 逻辑脚本调试:这是调试的难点。对于命令语言,除了仔细检查语法,更有效的方法是使用“输出调试信息”。在脚本中插入Printf()函数,将关键变量的中间值或执行步骤输出到信息窗口,这是追踪脚本执行流程最直接的方法。
  4. 集成运行测试:点击开发环境上的“运行”按钮,启动运行系统。在此模式下,进行完整的流程测试,模拟各种正常和异常工况,检查画面切换、报警弹出、历史记录是否都正常工作。

8.2 工程发布与运行系统安装

开发调试无误后,需要将工程“发布”到目标工控机上运行。

  1. 工程打包:在开发系统的“工程管理器”中,选择你的工程,使用“工程打包”功能。这会生成一个.kpg文件,包含了工程的所有必要资源。
  2. 目标机环境:在目标工控机上,同样需要安装KingView运行版(或完整版)软件。运行版更小巧,授权也可能不同。
  3. 安装与恢复:在目标机上,通过“工程管理器”的“工程恢复”功能,导入之前打包的.kpg文件。
  4. 配置运行系统:在目标机上运行“组态王运行系统”。首次运行可能需要配置运行参数,如初始启动画面、网络参数等。通常,我们会将运行系统设置为开机自启动,并隐藏Windows任务栏,使其成为一个真正的“工控专用界面”。

8.3 常见运行期问题与排查

即使调试通过,运行系统也可能出现问题。以下是一些常见问题及排查思路:

问题现象可能原因排查步骤
运行系统启动后黑屏或闪退1. 图形驱动不兼容
2. 分辨率设置不当
3. 工程文件损坏
1. 更新或回滚显卡驱动。
2. 检查开发环境和运行环境的分辨率是否一致。
3. 重新恢复工程包。
部分画面数据不更新1. 设备通讯中断
2. 变量采集周期设置过长
3. 画面中动画连接错误
1. 检查设备状态指示灯、网线、IP地址。
2. 在“设备”中调整该设备或变量的采集周期。
3. 重新检查画面中对象的动画连接配置。
报警不产生或不显示1. 报警未启用或定义错误
2. 报警窗口未绑定正确报警组
3. 报警服务器未启动
1. 在数据词典中确认变量报警属性已勾选并正确定义。
2. 双击画面报警窗口,检查“报警组”选择。
3. 检查KingView运行系统的“报警服务器”进程是否正常运行。
历史曲线无法查询数据1. 历史记录未启用
2. 历史库文件损坏或路径错误
3. 磁盘空间不足
1. 确认变量已添加到历史记录配置并启用。
2. 检查工程浏览器中“历史记录配置”的存储路径是否存在且有写入权限。
3. 清理磁盘空间。
脚本执行结果不符合预期1. 脚本语法错误
2. 变量作用域问题
3. 触发条件不满足
1. 使用Printf()输出调试,检查脚本逻辑。
2. 确认脚本中访问的变量在命令语言生效的上下文中是可见的。
3. 检查命令语言的触发条件(如数据变化、事件)是否真的发生了。

维护一个稳定运行的KingView系统,除了应对突发问题,更重要的是日常预防:定期备份工程文件和历史数据库;监控运行系统的日志文件;对工控机进行定期的病毒查杀和系统优化(在停机时段进行)。记住,组态软件是连接物理世界和信息世界的桥梁,它的稳定直接关系到生产的稳定。从入门到精通,你需要不断在项目中积累这些连接、定义、绘制、调试和排错的经验,最终才能让这座桥梁坚固而可靠。

← 返回列表