鲲鹏恒控 · 更新日志
这份文件写给使用者:每个版本新增了什么、改好了什么。 版本号与发行包文件名里的
vX.Y对应,最新版本在最上面 —— 拿到新包先看最上面那节,就知道这次值不值得更新。
v0.5 —— 2026-10-12 ~ 2026-10-17
一句话:列表自由度 + 脚本编辑体验 + 报警交互全面补齐;脚本读写点位简化成一个 #、点位类型混用编译期就报 —— 列宽能拖、脚本有错不让存、报警能删能确认、趋势曲线运行时不滚动(修好了)。
新增
- 报表 / 表格 / 报警列表,每一列多宽现在随你定。 属性面板新增「列宽px(每行一条,空=自动)」—— 第几行就是第几列,和「列标题」怎么填的就怎么对;也可以直接在画布上拖:选中列表元素,列与列之间出现一条小竖条,左右拖动即改列宽,拖的过程里列宽实时跟着变,松手就定;不满意一下
Ctrl+Z撤回来。按住Alt拖 = 所有列一样宽。填法就是每行一个数字(像素),不用写中括号、不用拼 JSON,脚本里读出来也是干净的数组。 - 每一行多高,也能定了。 「行高px(0=自动)」加到表格 / 报表 / 报警列表 / 实时数据表 / 配方表:填了就连表头带数据行一般高,留 0 就按内容自动撑开。
- 报警列表的「初始数据」有了,而且能关。 没报警时列表里显示什么,可以在属性里逐条填(每行一条:时间|等级|来源|内容);「无报警时显示初始数据」开关一关,就显示「暂无警报」。真报警来了照常顶掉 —— 演示数据和真数据两本账,互不打扰。
-
表格补齐了外观项。 是否显示表头、字体、字号、单元格对齐方式、网格线颜色,以及「行数据」编辑框(每行一条,列与列用
|分隔),之前想要这些效果只能干着急。 -
按钮支持「按下动作 / 抬起动作」两个独立动作。 原来的「点击动作」改称「按下动作」,跑在按下瞬间;新增的「抬起动作」跑在松手瞬间。配法:按下写
启动=1、抬起写启动=0—— 这就是下位机常用的点动脉冲输出。(动作原先挂在「点击」上,做脉冲会变成「先写 0 后写 1」顺序颠倒,现已改到「按下」。) - 元素可以直接重命名了。 在画面上右键元素选「重命名…」,或按
F2,改完名字后它的属性、绑定、事件脚本都还在。 - 实时数据面板按设备分组。 采集点按「通道名 · 设备名」折叠成组,内部变量另归「内部变量 / 全局变量 / 窗口变量」组;组头显示条目数,点一下收起 / 展开。
- 实时数据表头可拖动改列宽。 拖列右缘热区调宽、双击复位该列;列宽记在本机,下次打开还是这个宽度。
- 脚本里的 CSV 表格现在有一套完整的「增删改查」。 新建表、删除表、读表头、数行数、按行号插行删行、按条件改字段、按条件查行、读改某一格 —— 都在
Csv库里,数据落在工程数据目录,Excel 能直接打开。以前只有「读整表 / 写整表 / 追加一行 / 按一列删行」四件事,想改某一列或查某几行都得自己把整表读回来在循环里拼。 - 运行态的虚拟键盘学会了「看人下菜」。 用鼠标点输入框、登录框时,不再弹出虚拟键盘(有物理键盘,再弹一块只是挡画面);用手指点才弹,而且系统自己不弹时由软件补上 —— 触摸屏工控机现场没物理键盘,也能输账号密码。画面上的登录元件和运行态顶栏登录、以及各类编辑框,一视同仁。
- 查找、替换改成居中的小弹窗。 按
Ctrl+F(查找)或Ctrl+H(替换),弹出的不再是一条贴在屏幕边的窄条,而是一个居中的对话框:查找框、搜索范围(脚本代码 / 画面元件 / 变量点表)、结果列表都在里面。结果列表带着行号和它所在的脚本名;双击某一条,直接跳到对应的脚本并停在那一行,光标已经就位,接着就能改。弹窗不遮屏幕 —— 跳过去照样看得见、点得到别的地方,可以一路双击把几处都看一遍;Esc或 × 关掉,再按Ctrl+F还会带上一次搜的词。标题栏上还有「上一条 / 下一条」和「刷新索引」按钮,不用记键盘。 - 保存脚本前会先自动检查一遍,有错就不让存。 在程序集里改完脚本按
Ctrl+S(或点「保存」),软件先按编译器同一套标准把这段代码过一遍:有问题就拒绝保存,并告诉你在第几行、是什么错,点一下诊断还能直接跳到那一行;改对了才落进工程。以前是"先存进去再说",等到进运行态才报错。⚠ 万一宿主没挂接编译器(检查不了),会明确提示"本次没有检查"再让你存 —— 不拦你,但不会假装检查过了。 - 保存脚本后
Ctrl+Z不再失灵。 以前点一下「保存」,之前敲的代码就撤不回来了,只能把标签页关掉再开。现在保存只更新内容、不动编辑器本身,撤销历史一直都在;只有把该标签页整个关掉再打开,历史才清空重来。 - 进运行态不再"带着错也进得去"。 运行 / 预览前会先把整个工程的脚本全部编一遍:有错就一条条列出来、点一下跳到出错处,并拦住不让进;万一编译没能执行(比如宿主未挂接编译器),会先问你要不要进,不会闷头就进。
-
工具栏「编译」按钮说清了它只管当前这段。 提示里注明"仅当前子程序;全工程查错按 Shift+F7" —— 免得以为按一下就把整个工程查完了。
-
报警列表(AlarmList)支持删报了。 以前报警窗只能看、不能删,报了就一直挂在那。现在运行态支持:
- 每行右侧自带删除按钮,单条直接清;
- 勾选多行后点「批量删除」;
- 一键「全部删除」;
- 脚本里可用
Alarm.Remove/RemoveMany/RemoveAll按条件自动消警,还能读LastClickKey/LastCheckedKeys做交互式删报。 删报 ≠ 确认(Ack):确认是把报警标记为「已确认但仍活跃」,删报是直接从列表移除。两者在运行态独立可用。 - 报警列表终于接上了真实的报警引擎。 以前画面上的报警窗只显示组态时填的静态示例数据,运行时有新报警也不会刷新。现在报警引擎与运行画面打通了 —— 报警触发、确认、恢复、清除都会实时反映在画面上,刷新延迟在毫秒级。
-
报警列表属性面板新增一批开关。 可以控制是否显示勾选列、行内删除按钮、批量删除按钮、全部删除按钮;还能改按钮文字、行高、最多显示几行、列对齐方式,以及哪些列(时间 / 等级 / 来源)显不显示。旧工程不填这些新属性也能照常跑,缺省行为不变。
-
绑定点位现在能写「算式」了 —— 点的原始值可以先换算再显示。 加了绑定时多出一个点值算式编辑框:用
x代表点值,写一段四则运算(如x / 10、(x - 4) * 100 / (20 - 4)、max(0, min(100, x))),点值进来先按它算成新数,再走原有的格式化 / 颜色映射 / 条件显示。框里边写边试算(填个试算点值就实时看到结果),下面列着几个常用例子点一下即填。现场 PLC 常给放大 10 倍的整数、0~4095 的 ADC 码或 4~20mA 电流,以前要还原成工程量得改 PLC 程序、或在脚本里轮询换算;现在直接在绑定上写一段就行。算式语法刻意做小:四则运算、括号、取余%、乘方^、常量pi/e、常用函数abs round floor ceil sqrt min max pow—— 不做变量、赋值这些(那是脚本的事)。写错了当场就提示,不会等到运行才发现;万一某个点值下算不出(除零、开负数根),显示的是原始值而不是 0,不会让人误以为"这个点一直是 0"。 - 点「运行」「预览」时有了加载动画。 以前点下去要等编译校验、拉运行窗口 / 建内核,屏幕上却什么都不动,像卡死了;现在会弹出一个转圈的等待框,写着"正在启动运行态…/正在编译校验…"以及一句说明(首次启动会久一些),起好了自动消失。运行态那边还带「取消」按钮,等太久可以掐掉。
- 所有耗时的操作都配上了等待动画,不再像卡死。 上一版只给「运行 / 预览」加了等待框,这一版铺开到所有会等的地方:编译 / 快速编译 / 全部编译(Shift+F7)、打开工程 / 新建工程、导出工程包 / 导入工程包 / 生成运行封包、全局查找(Ctrl+F)首次打开时的建索引、查找替换里的「全部替换」—— 全都有了转圈的等待框。等待框会写清正在干什么(校验工程 → 编译脚本 → 生成运行包,一步一句),不是干挂着"加载中"。快操作(保存这种眨眼就完的)不会闪框,只有真的等得久了才出现,不会反过来添乱。
-
全局查找的弹窗现在能拖到任何地方了。 按
Ctrl+F弹出来的查找框,以前死死钉在屏幕正中,挡住底下的代码也没法挪;现在按住它的标题栏就能拖,拖到哪儿下次打开还在哪儿(本机记住)。标题栏上的「上一条 / 下一条 / 刷新索引」按钮不受影响,点它们不会把框带歪;拖出屏幕也会自动收回来,标题栏永远抓得到。 -
脚本现在能直接连数据库了(内置 SQLite,零配置)。 在「设置 → 数据库连接」里配一条连接、起个名字,脚本里就能
Db.Exec("名字", "建表 / 增删改 SQL", 参数…)、Db.Scalar(...)查单值、Db.Query(...)查多行 —— 记录操作、上报数据、查工单都在射程内。数据落在工程data/目录,SQL 强制参数化(@p0 @p1…),不拼字符串,天然防注入。MySQL / PostgreSQL 的位置也留好了,驱动接入后即用。 - 脚本函数库的条目现在中英对照,鼠标一悬停就看清怎么用。 右侧函数库的每个库分组头显示「中文 / English」(如「变量 / Variables」);条目悬停弹出四行说明 —— 中文写法、English、举例、For example,中文在前、英文在后,照抄就能用。
- 函数库里的「举例」现在条条对得上,而且用的是真实点名。 以前有些条目的举例拿别的写法顶替(读字符串的函数却示范点位引用),也有拿「点名」「点1」「报表名」这类占位符凑数的;现在每条举例都演示它自己那个函数的调用,点名一律用真实样例(「锅炉温度」「机组表」「1号PLC」…),复制进脚本改个名字就能跑。中文那行按中文别名写、英文那行按标准名写,一眼对得上。同时把脚本里读写点位的首选写法统一成
#作用域.点名.实时值——#PLC1.锅炉温度.实时值 = 80;直接赋值、#PLC1.锅炉温度.实时值 > 80直接参与比较,不用再记那一长串按名调用;按名Tag.*只在需要强制类型、点名是运行期拼出来的、要批量读写、或要拿整份点信息时才用(函数库每条说明里都提示了这一点)。编辑器里边打边补和「快速插入函数」插进来的,也都是这个写法。 - 函数库里「语言自带」的那几组不再显示像缺陷的提示。 控制、变量、运算、文本、时间、数学、转换、异常这八组是编程语言本身自带的语法,写法只有一种 —— 以前鼠标悬停会显示「(无中文别名,直接用标准名)」,看着像缺了东西;现在直接给「写法 + 举例」两行,照着写就行。顺带把内建「文本」组与软件自带「字符串」函数库的英文名区分开:以前两边都叫
Strings,分组头两行看着一样,现在内建那组标成Strings (built-in)。 -
脚本可以「整点触发」了 —— 后台定时脚本多了第二种跑法:按时刻。 以前后台脚本只有一种跑法:「每隔 N 毫秒跑一次」;要它在每天早八点做一次日结、每小时整点存一次盘,只能自己拿毫秒数去凑,还凑不准。现在新建定时脚本时先选触发方式:「每小时整点」/「每天定时」/「按间隔(毫秒)」。选按时刻就填一张时刻表 ——
*:00是每小时整点,*:30是每半点,08:00,20:00是每天早八晚八(小时位置写*表示每个小时);软件启动后常驻,墙钟走到表上的时刻就跑一次,同一分钟只跑一次。已建好的脚本随时能在程序集里点「编辑触发」换跑法,代码和备注原样不动。列表里直接显示「每小时 :00 常驻」这样的大白话,不用去猜那串符号。时刻表填错了(比如25:00)当场拒掉并告诉你哪儿不对。 -
脚本读写实时点位,现在直接写
#设备名.点名.实时值。 以前点位只能「点名当字符串参数」传(Tag.GetFloat("锅炉温度")、Tag.Write("进料阀", 1)),现在点位是可寻址对象:读 ——double t = #PLC1.锅炉温度.实时值;、if (#PLC1.锅炉温度.实时值 > 80) { … };写 ——#PLC1.进料阀.开.实时值 = 真;。三类作用域全覆盖:设备通道点#<设备名>.<点名>.实时值、全局内部变量#全局变量.<裸名>.实时值、画面窗口变量#<画面名>.<短名>.实时值。除了实时值,还能取 6 个叶子:质量 / 质量正常 / 单位 / 量程下限 / 量程上限 / 初始值(如#PLC1.锅炉温度.单位、#PLC1.锅炉温度.质量正常)。名字重复、张冠李戴(点名不属于这个设备时,会告诉你它真正属于谁)、找不到作用域或点,一律编译期直接报中文错误,不再等进运行态才炸。 - 点名要等运行期才算得出来?把整条引用(作用域 + 点名 + 叶子)一起包进花括号,变量裸写在双引号外。 #{"PLC1.窑" + i + ".开.实时值"} 就是
#设备名.点名.实时值的运行期版;#{"全局变量.批次" + i + ".点名"} 在运行期把名字叫回规范名。双引号里只放纯文本、变量一律写在引号外(+ i +)—— 读代码的人一眼看出哪段是死的、哪段是活的。字面量能写死的点名不要用这种写法 —— 静态#设备名.点名.实时值才是主写法。只有两种形态,没有第三种:要么整段都不写花括号,要么井号 +{到第一个}把作用域、点名、叶子一起包进去(#设备名.{…}.实时值这种把作用域留在括号外的不认);叶子必须写在大括号里、且只能是点位专用叶子(#{名 + ".长度"}/#{名}.实时值编译期直接报错)。表达式里不能出现};括号里是完整字符串字面量时编译期就校验(不存在即报错),含变量时运行期才解析、编译期不校验点是否存在 —— 质量类要动态判断就写#{"PLC1.窑" + i + ".开.质量正常"}。 - 「按名收点」的函数,实参直接传
#….点名,不再手写双引号。History.Log(#烤箱温度.点名, 0)里的#烤箱温度.点名编译期就变成点名字符串(等价"烤箱温度"),点位改名 / 换作用域随手改成对的,不会漏改成另一串字符。 - 点位类型混用,编译期就报错(不再等运行期)。 以前「开关点跟 0 比」「数值点直接当 if 条件」能顺利编过、进运行态当场抛异常,现在编译时就报错,消息里带点名和该改成什么:
- 开关点(Bool)不能做加减乘除、不能跟数字比、不能赋给数值变量、也不能往里写数字;
- 数值点不能当 if / while 条件、不能敲
!/&&/||、不能强转(bool)、不能赋给 bool 变量。 - 想要「非 0 即真」的布尔,用
Tag.GetBool("点名");想跟门槛比,就写#…实时值 > 80。字符串拼接("急停=" + #PLC1.急停.实时值)、开关点跟开关点比,都不拦。
优化
- 绑定的点位现在能改了,而且不用先删再建。 属性面板「数据绑定」里每一条都多了「编辑」和「删除」两个按钮:点「编辑」(或直接点这一行)就能换点位、改算式、改格式、改颜色映射、改双向 / 单向 —— 改完确定即生效,原来没动的那几项原样保留。以前只有「整行点一下就删除」一条路,想改个小数位数都得先删掉再重新绑一遍。删除现在必须点「删除」按钮,不会再手一滑点掉一条绑定。编辑时的选点位框会高亮当前绑的那个点,还多一个「保持当前点」按钮 —— 只改格式不必在几百个点里再找一遍。改错了按
Ctrl+Z整条撤回。 - 报警列表的表头和行终于对得齐了。 以前表头改了列宽,行里的格子还是按文字多少自己伸缩,怎么看怎么歪;现在表头、行内同一套列宽。
-
列宽留空 = 自动,不再"填错一行、后面全错位"。 空行表示"这一列自动",编辑框会原样保留空行;只有末尾连续的空行才收掉。
-
右键菜单补齐。 新增「复制样式(格式刷)/ 粘贴样式 / 水平翻转 / 垂直翻转 / 全部解锁」,与菜单栏、快捷键一致。
- 右键「事件脚本」子菜单补上组件事件。 以前报警列表的「删除报警 / 批量删除报警 / 全部删除报警」在右键里点不到,现在能直接建。
-
点事件脚本会自动建子程序。 右键菜单 / 跳转指向一个还没建的事件时,软件自动补一个空的子程序并选中它(以前会静默落到程序集列表第一条,看起来像「点了没反应」)。
-
仪表盘(Gauge)的数值文本挪到了表盘上方。 以前数值压在表盘左下侧,半圆表盘一展开就会把数字挡住。现在数值置顶居中,读数一目了然。
- 泵 / 风机(Pump)的转子现在能跟着点值转了。 以前绑了「数值」点后转子纹丝不动,只能靠灯色判断运行状态。现在绑上转速 / 角度值后,转子会按数值实时旋转,风机有没有转一眼就看出来。
-
工业图元全面排查了一遍「静态」问题。 逐个验证了所有工业图元(储罐、管道、阀门、泵、仪表盘、趋势、开关、数码管)的运行态绑定,确保每个该动的属性(液位、流量、开关状态、指针、段码、滑块位置)都能随点值实时更新,没有遗漏。
-
新建子程序的引导弹窗,把「全局模块」讲清了。 它就是分类(分组),弹窗里现在直接写明;「归属」那行也挂了一句随选择变的人话(本窗口 / 全局各一句);底部把「窗口子程序 / 全局子程序 / 模块」三者关系一次说清;「+ 新建模块…」也改叫「+ 新建模块(新分类)…」。
- 子程序的「参数」从单行文本框改成「+ 加一个参数」加号表。 原来要手打
double v, double lo, double hi,现在一行一个参数(类型 + 参数名)、行尾 ✕ 删、底部「+ 加一个参数」。新建弹窗和编辑器头部是同一个样子;落到工程里的还是那一串参数字符,脚本里照旧。 - 函数目录、编辑器补全、悬浮信息卡,统一到
#语法。 以前在脚本里插入设备点会插成"点名"这种字符串,现在统一插#设备名.点名.实时值,全库不再出现抽象的"点名"占位。同时纠了一批老说明:「点不存在时Tag.GetFloat返回什么」—— 写清了是抛错,不是返回 0;数组 / 结构 / FIFO 点不给「转不出来的垃圾文本」,直接抛能看懂的错误;内建语法组的提示也不再显示「(无中文别名,直接用标准名)」这种废话。 - 点名自己带
.的点,现在也能直接写。 像进料阀.关、Tank.Level这种名字,#PLC1.进料阀.关.实时值照写不误 —— 点位引用从右往左切段:最右一段是叶子、最左一段是作用域、中间整段都是点名;作用域也能省。不用再为了绕开点号去套#{}。
修复
-
脚本函数目录里「什么时候该按名调用点位」的说法纠正了。 以前函数说明写着「点名是运行期算出来的,所以只能按名调用」—— 现在点位引用
#已支持动态点名(#{表达式}),这条理由不再成立。说明改成:静态点名写#作用域.点名.实时值、动态点名写#{"作用域.点名" + 拼接 + ".实时值"};只有强制类型转换(取整 / 转文本 / 非 0 即真)和#没有对应形态的操作(批量读写 / 探存在 / FIFO / 数组 / 取整份点元数据 / 取更新时刻)才按名。 -
改数据库连接的其它字段时,不再把已设的密码抹掉。 以前编辑一条带密码的连接、只改个说明再保存,密码会被一起清空;现在密码框留空 = 保持原样,前后端口径一致。
-
表格的列标题被清空时,不再一列都不画。 以前把列标题删成空会得到一张没有列的表格,现在自动回落到默认三列,和列宽的算法一致。
-
仪表盘 / 面板表的读数不再「跑偏」或挡住刻度。 半圆仪表盘和工业面板表的读数以前会跑到左边缘、沉到表盘正中,数字长了还会挤出表外;面板表盘面的刻度上还压着一个大写单位。现在读数一律居中,贴在表盘留白处,不碰刻度、不压指针。
-
报警列表的组件事件子程序名不再显示英文。 建出来是「删除报警」,不再是
AlarmDelete。 - 外部 AI 通过 MCP 建按钮事件脚本时更稳了。 以前把「报警列表专属的删除报警」这类事件写到别的元件上会静默成功(存进去却永远不触发);事件脚本的 JSON 形状也没写清,AI 按直觉传会被拒还看不懂原因。现在这类错误会当场拒绝并说清,工具说明里也把正确形状和全部 15 个事件名列全了。
- 全局条件现在能改表达式了,新建时表达式也不会再丢。 以前新建全局条件时填的布尔表达式没被正确保存,建出来的条件永远不成立(形同虚设),界面上还看不到、也改不了。现在表达式会正确落库、在列表里显示,并新增「改条件式…」随时修改。
- 往 CSV 表末尾追加一行时,不会再把新行粘到上一行尾巴上了。 以前如果表文件不是以换行结尾(手改过、或旧版本脚本写的),追加的那一行会和前一行挤成同一行,整张表串列串行。现在会自动补齐换行再写,Excel 打开也不会错行。
- 周期脚本不会再存进「周期 0」的无效条目。 批量保存画面 / 工程脚本时,以前不检查每条周期脚本的周期值,填 0 的条目照样存进去、却永远不会执行;现在与单条新建口径一致,周期必须大于 0,否则当场拒绝并说清是哪一条。
- 外部 AI 通过 MCP 看元件属性时,按钮的动作(按下/抬起)现在能看清里面填了什么。 以前复合型属性只显示一个类型名(如「动作模型」),看不到动作类型、写哪个点、写什么值;现在会把里面的字段一并列出来。按钮的新增属性(按下动作 / 抬起动作 / 按下文字色等)也都已进入 MCP 的属性清单 —— 外部 AI 调「列出元件属性」就能拿到全部 22 个可写属性名、类型、合法取值和中文说明。
- 删掉一条带算式的绑定再撤销,算式也一起回来了。 以前撤销会把绑定重建,但算式字段没跟着回填,撤回来的是"没有算式的绑定",行为悄悄变了。
- 绑定算式里填错一个符号,不会再整条绑定失效。 以前算式里出现无法识别的字符时,求值器会抛异常而不是安静放弃 —— 在运行态会顺着调用栈把整条绑定乃至画面刷新打断。现在与后端一致:认不出就当作算不出,原样用点值,绑定照常工作。
-
AI 通过 MCP 保存脚本时的字段说明补齐了。 画面脚本 / 工程脚本 / 脚本模块的保存工具以前只说「字段见查询接口」,AI 只能猜;猜错字段名有的会被静默丢弃。现在工具说明里直接给出字段形状示例(含条件表达式字段名、模块函数体字段名、周期必须大于 0)。
-
若宿主未挂接编译器,脚本错误只能查出"结构类"(括号不配对之类),语义错误(少分号、类型不匹配)要连真宿主才查得出来。
-
报警列表里的「批量删除」按钮在没有勾选列时不再孤零零显示。 以前如果属性面板只开了批量删除、没开勾选列,界面上会出现一个点不了的「批量删除」按钮。现在批量删除只有在同时开启勾选列时才会出现,避免误导。
-
趋势曲线在运行态不滚动 —— 修好了。 现象是点值一直在变、曲线一动不动。两个原因:① 给曲线绑了显示格式(百分比 / 一位小数 / 十六进制)时,曲线拿到的是格式化后的文本(
"42%"),解析成数字失败被静默丢掉 —— 十六进制格式更隐蔽:不报错、只是值全错(80 格式成"0050",解析回来变 50);② 后端本来就支持「趋势元素上填个点名,无需写脚本、自动采样成滚动曲线」,但前端一直没读这个字段,照这样配的趋势全是死的。现在两条路都通了;多笔(Series)各喂各的笔,不会串笔;窗口固定拍数灌满后正常左移滚动。 - 工程树「窗口程序集」把有程序的窗口误显示成「0 子程序」。 只写了事件脚本(窗口创建 / 销毁、周期脚本、元素事件)、没写普通函数的窗口,树上恒显示 0。现在按实际内容数,该是几就是几。
已知限制
-
重命名元素不会改写脚本正文里按旧名字写的引用,改完需自行核对。
-
外部 AI 的自动回流目前只在 http 常驻模式生效。stdio 模式(外部客户端自己拉起进程)下编辑器不知情,不会自动刷新(但改的东西一样会落盘)。
-
类型混用检查只认点表里声明了类型的点(开关点 / 数值点);字符串、数组、结构、FIFO 和没填类型的点不查。
var推断出的变量、方法返回值、#{表达式}动态点名也不查 —— 宁可漏报,不误报。 - 这个检查只拦编译期(全部编译 / 单段检查)。进运行态后的派发和画面刷新不做类型检查。
v0.4 —— 2026-10-11
一句话:运行起来能真控制设备了 —— 点「运行」后按钮/开关真能把值写到 PLC,要不要登录、谁能操作全由你自己摆元件决定;这一版还把运行程序做成了能当网站发、点类型扩到字符串/数组/结构/队列、设备数据能上云(MQTT),并把「MCP 服务器」最容易让人卡住的地方修顺了。
新增
- 运行时真能下发到设备了。 以前点「运行」只能看、不能动(写值一直提示「未开通」)。现在运行窗口里的按钮、开关、滑块、输入框真能把值写到 PLC / 设备。编辑器里的「预览」仍然只看不下发(避免设计时手滑动到现场设备)。
- 要不要登录,由你放不放登录元件决定。 画面上没摆登录元件 = 运行时直接全部可用、免登录;摆了「用户登录器」或「用户管理器」才按账号分级(没登录只能看、不能操作)。软件不再强制塞一道登录。
- 新增「用户管理器」元件。 从元件库「安全/登录」拖到画面上,运行时点一下就能建用户、改密码、管角色(默认仅管理员可开)。
- 新增「账号编辑器」元件(同在「安全/登录」组)。它不用先登录,但每次改动都要输入一个有账号管理权限的账号口令来授权 —— 给「不想用登录门控、要自己搭权限界面」的场景用。(注意:它不算登录元件,摆它不会让未登录的控件置灰。)
- 边运行边调试看实时值。 点「运行」后切回编辑器,「实时数据 / 实时变量」面板能看到运行窗口里真实的点值在跳,方便调试。
- 新增「运行模式」:全屏 / 窗口 / 端口三选一(工程设置 → 生成信息里选)。
- 全屏(默认):运行时占满整屏,现场上位机用。
- 窗口:带标题栏的普通窗口,大小可调,本机操作 / 调试方便(以前一律被强制放大全屏,现在能选了)。
- 端口:把运行界面做成网站对外发布 —— 自己填一个端口号(默认 8765),并自己选绑定地址:「仅本机(127.0.0.1,只有这台电脑能开)」/「所有网卡(0.0.0.0,局域网 / 域名 / 别的电脑都能访问)」/「某张指定网卡的 IP」。(注意:0.0.0.0 和 127.0.0.1 不是一回事 —— 前者对外开放、后者只给本机。)点「运行」后,软件会在「输出」面板直接给出能用浏览器打开的完整网址;选了对外的地址时还会列出本机各局域网 IP 地址,把 IP 换成绑定的域名即可从别的电脑 / 手机访问。要不要登录仍由你摆不摆登录元件决定。
- 点类型大升级:支持字符串、数组、结构、队列(FIFO)点,以及无符号 64 位整数。 以前点只能是单个数值 / 开关;现在建点时类型下拉里多了这些 —— 比如从 PLC 读一段 ASCII 字符串、一次读一批连续寄存器当一个数组点,能显示、能绑定、能在脚本里读写(
点位.读文本/写文本/读数组/写数组、队列的入队 / 出队),也能写回设备、进历史。建点向导会按你选的类型自动显示要填的参数(字符串长度 / 数组元素数 / 队列深度 / 元素类型)。 - 设备数据可以上云了:新增 MQTT 转发。 在原有的 HTTP / ModbusTcp 转发之外多了 MQTT —— 出站把点值打成 JSON 发到 Broker 主题(可按变化或按周期发,断线自动重连),入站订阅主题接收远端下发、回写到工程里的点(按白名单)。用户名 / 密码 + 可选 TLS 鉴权,口令存在本机、不进工程。
- 新增两个工业仪表「显示」元件(绑实时变量显示,不自己造数据;在元件库「图表」组):
- 工业面板表:配电柜那种方框盘面指针表,弧刻度 + 指针 + 读数,填单位 A / V 就是电流表 / 电压表。
- 示波器波形:示波器风格的实时波形,绑上点后新值从右侧推入、整条向左滚。
- 画面「退出」按钮的正规退出途径(脚本
Sys.Exit())。 现场运行程序是全屏无边框、没有标题栏,以前只能按 Alt+F4。现在脚本里调一下就能优雅退出(先停脚本 / 采集 / 转发再退,不是硬杀进程)。编辑器里试运行时调它不会关掉编辑器,只停本次预览。 - 双击卸载脚本(Windows / Linux)。 绿色免安装包不用了?双击卸载脚本即可清理本机配置(密钥 / 缓存 / 界面偏好),并单独问你要不要连「文档」里的工程一起删(默认不删)。
- MCP 面板新增「自检」按钮。 一次列出:当前传输方式、是否已开启、连接端点、工具数量、是否需要令牌、是不是只读模式,并真试一次启动;起不来就按原因给出该怎么办的建议(改成 http / 先打开一个工程 / 重新解压完整发行包)。排查问题不用再猜。
优化
- 预览和运行不再打架。 点运行会自动关掉预览(两者抢同一个设备连接会出错);运行窗口还开着时再点预览,会提示你先关掉运行窗口。
- Linux 运行程序同样支持真下发和登录门控(和 Windows 一致)。
- 确认框不再冻住整机。 脚本弹确认框等人点的时候,其它脚本(采集 / 周期 / 条件)照常跑;不写等待时长就一直等着,写了秒数到点自动按「否」。触摸屏上会自动换成大按钮、不依赖物理键盘。
- MCP 浮窗:关掉 MCP 不再把浮窗整个关掉。 点「关闭 MCP」只是停服务器、解锁编辑器,浮窗保留成一个「启动 MCP」按钮,随时一键重开;只有浮窗右上角新加的 ✕ 才彻底关掉它。
修复
- 运行日志里的中文乱码修好了 —— 以前「输出」面板里运行窗口回流的中文会变成一串问号方块。
- 编辑器里选「端口模式」的提示误报修好了 —— 画面上明明摆了登录元件,切到端口模式仍会提示「没摆登录元件、对外可访问」。现在按当前画面实时判断,摆了就提示、不摆才提示。
- MCP 服务器「点启动没反应」已修复(换电脑最容易碰到)。 此前换一台电脑打开软件,进「MCP 服务器」 面板点「启动」可能什么反应都没有 —— 不弹提示、输出面板也一片空白,让人以为程序卡住了。原因有两个: 一是当传输方式是 stdio(由外部 AI 客户端自己拉起)时,那个按钮是灰的,点了本就不会有任何动静; 二是即便方式选对(http),服务器若是慢了一点才启动失败(端口被别的程序占了、被杀毒软件拦下、 冷启动较慢),界面也会误报成「已启动」。 现在:「启动」按钮任何情况下都可点 —— 点下去一定有反应,要么真的起来,要么在输出面板里 留下一行红字把原因说清楚(并同时弹一个提示气泡)。服务器是否真的起来,改为实际验证端口能不能连上 才算数,不再靠「等一小会儿看它还活着没」这种猜测。
- MCP 的配置现在会明确告诉你它在哪。 这份配置存在每台电脑各自的本机目录里、不随安装包走, 所以换台电脑就等于「第一次使用」。此前界面上完全看不到这个文件的位置,也不知道新机第一次打开时 这份配置其实还没生成。现在面板上会显示完整路径,且首次打开时软件会自动生成这份配置 (不再只存在于内存里、让人找不到、也不知道该改哪)。
- 「MCP 服务器」弹窗里的启停 / 保存动作,现在都会在「输出」面板留一行记录。 此前这些操作只在 弹窗里闪一下提示气泡,2 秒就没了、事后翻不到;现在无论成功失败,「输出」面板都留有可回查的一行。
文档
- 《使用说明》新增「MCP 服务器:第一次用请先看这里」一节。 把「配置存在本机、换台电脑就是第一次使用」 「http 与 stdio 有什么区别」「stdio 下点启动不是没反应、是设计如此」「起不来该点哪个按钮」这几件 最容易踩的事一次说清。
已知限制
- 外部 AI 的自动回流目前只在 http 常驻模式生效。stdio 模式(外部客户端自己拉起进程)下编辑器 不知情,不会自动刷新(但改的东西一样会落盘)。
v0.3 —— 2026-09-29
一句话:让「外部 AI 改工程」真正好用起来 —— 改完编辑器自动跟着变,手动刷新也说清了刷什么。
新增
-
运行程序支持 Linux 了(Windows + Linux 双平台)。 以前编译出来的运行程序只能在 Windows 上跑; 现在同一套工程可以原样拷到 Linux(麒麟 / 统信 / Ubuntu 等)上全屏运行 —— 画面、脚本、报警、 历史记录、数据采集与转发能力与 Windows 版完全一致。发行包已随附 Linux 版运行程序, 拷过去执行
./start.sh即可,目标机不需要另装任何运行环境。 编辑器里点「编译」(F7) 现在会先让你选平台(Windows / Linux)——选 Linux 就直接编出上面那套 Linux 运行程序包(含桌面双击启动图标),不必再去开发机跑命令行脚本。 已实测:同一幅含全部 56 种元件的画面在 Linux 上全部正常渲染,脚本、绑定、报警、采集 与 Windows 版表现一致;运行画面上的图标风格在两个平台上完全统一(原先把少数占位图标 画成彩色 emoji,在 Linux 上会随系统字体现得五花八门、缺字体时还会变方框,现已全部换成 随包自绘图标)。脚本的自定义函数库(程序集里的「模块」)也已实测可用:封装好的函数可以直接 读写点位、打日志、调用系统能力,写$"液位={点位.读浮点("储罐"):F1}%"这类中文写法也照常编译。 -
外部 AI 改工程,编辑器实时看得见。 外部 AI(Claude Code / Cursor 等)通过 MCP 每改成功一步 (加通道 / 加设备 / 加点位 / 改画面…),编辑器会自动把改动拉回来并刷新:工程树跟着更新, 当前打开的画面 / 点表页跟着重取。改完不用再关掉重开工程。
- 两点提醒:
- 外部 AI 正在改的时候,别在编辑器里同时手改同一个工程 —— 编辑器的自动保存可能把外部改动 盖回去。真发生了,界面会明确提示「工程已被外部 AI 修改并重新加载」,不会闷声不响。
- 编辑器里那个页面若有未保存的修改,自动刷新会跳过它(不冲掉你写的内容)并给出提示; 存一下、重开该页就能看到外部改动。
- 工业图库:106 个现成工业符号,拖入即用。 15 类(消防 / 暖通空调 / 给排水 / 楼宇机电 / 照明 / 炉窑热工 / 水处理 / 物料输送 / 电机泵 / 阀门 / 管件 / 罐槽 / 仪表 / 电气 / 安全警示), 按系统分组 —— 左边选系统、右边挑图标。符号的颜色角色(描边色 / 填充色等)可以单独绑点, 运行态按点位值换色(例如泵按运行状态变绿)。
- 特效库:23 个工业动效。 6 类(空气流动 / 粒子 / 流体 / 电力 / 光效 / 填充纹理),拖进去 就是会动的示意图(空调吹风、管道液体流动、电流方向…),不用自己写动画。
- 基础图形库:44 个常用形状。 6 类(基础可编辑 / 常用形 / 多边形 / 星形 / 箭头 / 曲线)。 其中「基础(可编辑)」那 7 个落成可拖顶点的矢量图元(矩形 / 椭圆 / 折线 / 多边形 / 箭头 / 曲线 / 分隔线),填充能绑点变色;其余是拖入即用的现成形状。
- 图形布尔运算。 选中 2 个以上可编辑矢量图形,右键「布尔运算」做合并 / 交集 / 切割 / 异或, 结果落成一个可继续编辑的多边形 —— 顶点还能拖、填充还能绑点。做异形轮廓不用再一个个拼。
- 图片裁剪。 图片框右键「图片裁剪…」,拖四角裁剪框直接裁。只写 4 个裁剪参数,原图不动, 随时可以改回或重裁。
- 六个国产 PLC 品牌档。 Modbus 通用档之外,新增汇川 / 台达 / 信捷 / 永宏 / 施耐德 / 通用仪表变频 6 个品牌档(内置协议共 14 档)。加 / 改设备时,地址怎么填按所选协议 在弹窗顶部直接给出。
- 更多地址区开放。 三菱
X/Y/B/W(16 进制寻址,实验性)、欧姆龙 EM 区 (E0.100)、松下继电器 / IO 字区(WR/WX/WY,只读)、西门子 S7 位地址。 - 图元库新增「标识码」组(二维码 / 条码);原「非可视」组改名为「定时器」。
- 脚本函数库扩到 15 库 / 153 个函数。 新增
Csv(CSV 表格读写)与Report(报表 / 实时表) 两个库;每个内置函数都配了中文别名 —— 写点位.读浮点("炉温")和Tag.GetFloat("炉温")完全等效,不用背英文。 - MCP 工具扩到 131 个(只读感知 56 / 组态修改 75)。外部 AI 现在能发现并创建图库符号、 按所选协议拼点位地址。
优化
- 「刷新」按钮不再让人猜。 编辑器里有 4 个刷新入口(工具栏的 ⟳、程序集、报表定义、全局查找的 「刷新索引」),此前都只写「刷新」两个字、点完基本没反馈。现在每个按钮都带说明(刷的是什么、 会不会动别的面板),点完还会弹一条提示告诉你结果,例如: 「已重新读取『点表』;其它面板(工程树 / 图元库…)未动」。
- 两种「刷新」在菜单里说清了区别:工具栏 ⟳ 只重拉当前这一页,不动工程树等其它面板; 「视图 → 整页重载」等于浏览器 F5,会重新加载整个前端。
修复
- 发行包不再缺 MCP 服务器。 此前发行包里没有 MCP 服务器程序,编辑器「MCP 服务器」面板点
「启动」会报「找不到 MCP 服务器程序」。现已随包发布(放在独立的
mcp\子目录)。 - 打包脚本双击闪退(窗口一闪而过、看不到任何提示)已修复。
- MCP 的「复制对接说明」写全了端点。 粘给外部 AI 后,它不用再去猜
/mcp、/sse等路径 (根路径返回 404 是正常的,说明里已写明)。 - 「复制对接说明」加了中文编码的防误判提示。 明确告知外部 AI:本软件返回的中文一律是 UTF-8、 本身没有问题;若在终端 / 管道里看到中文像乱码,先用码点核对,别当成服务端 bug 去「修」, 更不要拿乱码字符串去建目录(会留下乱码名的野目录)。
已知限制
- 外部 AI 的自动回流目前只在 http 常驻模式生效。stdio 模式(外部客户端自己拉起进程)下编辑器 不知情,不会自动刷新(但改的东西一样会落盘)。
- 运行态下发 PLC 写值仍未开通,详见文末「尚未开通」。
v0.2 —— 2026-09-29
一句话:把「外部 AI 连接」这套能力真正装进发行包。
新增
- 随包发布 MCP 服务器(
mcp\Hmi.Mcp.Host.exe):让 Claude Code / Cursor 这类外部 AI 工具能 读写本工程。在编辑器里打开「MCP 服务器」面板点「启动」即可,不用手动双击。 - 传输两种:
stdio(外部客户端按需拉起,默认)与http(本机监听端口,可常驻启停)。 - 打包脚本重写:发布时自动做交付自检 —— 缺
组态编辑器.exe/mcp\Hmi.Mcp.Host.exe/wwwroot\index.html/project\project.json任一即报错,不让残包流出去。
说明
- 主程序与 MCP 服务器分开放(MCP 在
mcp\子目录)是刻意的:两者依赖的框架库大版本不同, 混在一起会互相覆盖、导致 MCP 起不来。名字和位置都别动。
v0.1 —— 2026-09-29
首个发行包。 免安装、解压即用,已内置 .NET 8 运行时;目标机只需装 WebView2 运行时 (Windows 11 一般已自带,详见同目录《使用说明.txt》)。
首次拿到软件,可对照了解本版本已包含的主要能力:
- 组态开发 —— 画面组态(拖控件、对齐分布、图层、栅格 / 标尺 / 裁剪预览)、元素属性与数据绑定、 多标签编辑、撤销 / 重做、查找替换。
- 数据组态 —— 通道 / 设备 / 点表(外部采集)、全局变量与窗口变量、变量监视。
- 脚本与程序集 —— C# 脚本引擎(代码高亮、函数库、用法提示)、画面脚本 / 窗口程序集 / 全局程序集; 脚本调试输出回流到「输出」面板。
- PLC 通讯 —— 内置模拟从站(无硬件也能喂动态数据)、Modbus TCP、西门子 S7(200 SMART / 300·400 / 1200·1500)、三菱 MC、欧姆龙 FINS、松下 Mewtocol;支持读取点位(写值下发见「尚未开通」)。
- 运行与调试 —— 编译 / 快速编译、编辑器内预览(脚本真跑)、独立运行态、随包示例工程 (楼宇窗户控制系统)。
- 报警 / 历史 / 报表 / 配方 —— 报警与事件、历史数据(SQLite)、报表、配方、邮件通知 (邮件口令在本机加密存放,不进工程目录)。
- 外观 —— 内置按钮 / 指示灯 / 棒图样式(含立体质感);工程还可带自定义 SVG 按钮皮肤。
- AI 能力 —— 内置 AI 助手(自然语言组态,危险操作会先弹确认)+ 对外 MCP 出口。
- 其他 —— 多语言、用户 / 权限。
已知限制
- 本版本发行包不含 MCP 服务器(v0.2 起才带上)。
尚未开通(如实标注)
- 脚本的设备通讯库(设备在线状态 / 重连)仍是占位,调用时会给出明确提示,随驱动接入再补。
- 部分协议地址尚未开放(如三菱的
SB/SW软元件与位取字、松下的LD/WL区)。 遇到时会给出明确提示而不会静默误读,后续版本逐步开放。 - 三菱
X/Y/B/W(16 进制寻址)为实验性开放 —— 进制已对底层库核实,但位响应打包与 连续读仍需现场核验,正式投产前建议先小范围验证。 - 二维码 / 条码当前是预览占位图案,不能真扫;条码下方文字可绑点,二维码内容暂不支持绑点。
本文件随发行包一起发布。每个新版本会在此追加一节,历史版本保留不删。