1. iocomp iPlot 数据光标到底解决什么问题
如果你正在做工控上位机,大概率遇到过这种场景:一条温度曲线跑了一整班,操作员指着屏幕问“这个尖峰到底是多少度、发生在第几秒”,你只能把鼠标挪过去,靠肉眼估个大概。iocomp iPlot 里的 Data Cursors(数据光标)就是干这个的——它是一组可以钉在曲线上的测量工具,把鼠标位置变成精确读数,X 值、Y 值、两点差值、甚至频率都能直接显示出来。
Data Cursors 能做什么?简单说,它允许你在绘图区放置若干条垂直或水平的测量线,每条线旁边带一个提示窗口(Hint),实时显示当前所在通道的数据值。如果光标正好压在某个数据点上,就显示该点的原始 X/Y;如果落在两个点之间,而通道的InterpolationStyle设成了ipistStraightLine,它就按线性插值给你算出一个中间值。这一点对分析采样间隔较大的曲线特别有用,你不用去翻原始数组,屏幕上直接读。
它适合谁?适合所有用 iocomp iPlot 做趋势分析、波形回放、报警追溯的工控开发者。无论你是用 MFC、C++Builder 还是 .NET 封装,只要组件暴露了 Cursor 接口,这套配置思路都通用。我试过在一条 8 通道的振动监测曲线上同时挂 4 个光标,两个测峰值、两个测周期,操作员自己就能完成读数校验,不用再喊开发。
这一节对应官方说明资源的 P65–P71,核心就三件事:光标类型怎么选、属性怎么配、代码怎么联动。下面我按“先能跑起来、再调准、最后排错”的顺序拆开讲,每一步都给可复制的配置和验证动作。
2. TaoToken 前置准备:把模型对话接进你的调试流程
在正式配光标之前,先说一个能明显提速的环节。工控上位机的曲线分析经常要写一些重复的解析代码,比如“把光标读到的 DeltaX 换算成时间戳”“根据 Peak-Peak 值判断是否超限”。这些逻辑不复杂,但查 API、对参数很费时间。我的做法是开一个模型对话窗口,把 iocomp 的接口签名和报错信息丢进去,让它帮我生成骨架代码,再自己改。
TaoToken 在这里的角色是统一入口:它把多家模型的调用方式收敛成一套 OpenAI 兼容接口,你不需要为每个模型单独改 SDK。对工控开发者来说,最实际的价值是——你可以在本机写一个小工具,把 iPlot 的 Cursor 事件日志发给模型,让它帮你判断“这个 DeltaY 异常是不是插值方式选错了”。
接入只需要三样东西:Base URL、API Key、Model ID。Base URL 用https://taotoken.net/api,Key 在控制台的 API Keys 页面生成,Model ID 按你选的模型填。如果你只是偶尔问几句,用模型对话页面就够了;如果要长期在编码环节用,比如让模型帮你补全 Cursor 事件处理,可以看 Coding Plan。
具体操作:打开 API Keys 页面创建一个 Key,复制出来;然后在你的调试脚本里把base_url指向https://taotoken.net/api,api_key填刚生成的串,model填模型 ID。这样你就能在写光标联动逻辑时,随时让模型帮你检查参数拼写。注意,这一步只是辅助编码,不参与 iPlot 运行时,别把网络请求塞进 Cursor 的实时回调里,否则曲线一卡一卡的。
3. 可复制的 Data Cursors 配置:类型、属性与联动
这一节是重点,直接给能抄的配置。iocomp iPlot 的光标配置分两层:一层是设计期在属性面板里设,一层是运行期用代码改。我建议先把设计期默认值调好,再用代码做动态联动。
先看光标类型。默认是 Value X-Y,画一条垂直线,显示某通道的 X 和 Y。除此之外常用的还有三种:
| 光标类型 | 含义 | 典型用途 |
|---|---|---|
| Value X | 只显示横坐标 | 时间定位 |
| Value Y | 只显示纵坐标 | 幅值定位 |
| Period Cursor [DeltaX] | 两个光标之间的横坐标距离 | 测周期、测时间差 |
| Peak-Peak Cursor [DeltaY] | 两个光标之间的纵坐标距离 | 测峰峰值、测波动 |
| Frequency Cursor [InverseDeltaX] | 横坐标距离的倒数 | 测频率 |
配置片段(以常见的 settings 风格为例,路径按你工程实际调整):
{ "iPlot": { "Cursors": { "Enabled": true, "DefaultType": "ValueXY", "HintEnabled": true, "HintHideOnRelease": false, "HintOrientationSide": "Right", "PopupEnabled": true, "InterpolationStyle": "ipistStraightLine", "Channels": [0, 1], "SnapToDataPoint": true } } }几个关键属性逐个说。HintHideOnRelease设成 true 时,只有按住鼠标左键不放光标才出现,松开就消失,适合临时测量;设成 false 则光标常驻,适合对比分析。HintOrientationSide决定提示窗口在光标哪一侧,曲线靠右时设成 Left,免得窗口被裁掉。PopupEnabled控制右键菜单,允许操作员在运行时改光标类型和标签,这个建议开着,现场很实用。
多光标联动怎么做?核心是让两个光标共享同一套坐标计算。假设你要测一条正弦波的周期,放两个 Value X 光标,一个在波峰、一个在下一个波峰,然后加一个 Period Cursor 读 DeltaX。代码里监听光标移动事件,把两个光标的 X 值传给 Period 光标:
void OnCursorMove(int cursorIndex, double x, double y) { if (cursorIndex == 0) { m_periodCursor.SetStartX(x); } else if (cursorIndex == 1) { m_periodCursor.SetEndX(x); } m_periodCursor.UpdateHint(); }如果你用的是 Codex 那套配置习惯,auth.json里放的是模型凭证,跟 iPlot 无关,别混在一起。Cline MCP 也是同理,它管的是编辑器侧的模型调用,光标联动还是走 iPlot 自己的事件。记住三件套:Base URL、Key、Model ID 只用于模型侧,iPlot 侧只需要组件授权和正确的属性值。
4. 验证请求与成功结果:怎么确认光标读数是对的
配完不算完,得验证。我一般用三步验证法,确保光标读数跟原始数据对得上。
第一步,造一条已知数据。比如生成 100 个点,X 从 0 到 99,Y = X * 2。这样每个点的理论值都清楚。把这条曲线画上去,放一个 Value X-Y 光标,拖到第 50 个点上,提示窗口应该显示 X=50、Y=100。如果显示的是 49.8 或 100.3,说明插值或索引有偏差。
第二步,验证插值。把InterpolationStyle设成ipistStraightLine,把光标拖到第 50 和第 51 个点正中间。理论 X=50.5,Y=101。如果提示窗口显示 101,说明线性插值生效;如果显示 100 或 102,说明它吸附到了最近的数据点,检查SnapToDataPoint是不是设成了 true。
第三步,验证 Delta 类光标。放两个 Value X 光标,分别钉在 X=10 和 X=40,加一个 Period Cursor,读数应该是 30。再加一个 Frequency Cursor,读数应该是 1/30 ≈ 0.0333。如果 Frequency 显示 30,说明你把倒数算反了,检查是不是误用了 DeltaX。
成功的结果长这样:提示窗口数值稳定,拖动时不跳变,右键菜单能切换类型,多光标之间的 Delta 实时更新。我实测下来,只要HintHideOnRelease和HintOrientationSide设对,现场操作员基本不用培训就能上手。
验证时如果想让模型帮你核对换算逻辑,可以把读数贴到模型对话里,让它算一遍周期和频率,对比你的代码输出。这一步不涉及运行时,纯离线校验,安全。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
这一节列真实会撞上的报错,以及跟光标配置无关但容易混淆的模型侧问题。
401 Unauthorized:如果你在调试脚本里调模型,报 401 基本是 Key 错了或没带。检查Authorization: Bearer <key>头,Key 从 API Keys 页面重新复制,注意别把前后空格带进去。这跟 iPlot 光标无关,别去改组件属性。
local proxy failed:这个报错通常出现在你本机配了网络转发工具时。工控现场很多机器不能随便装东西,如果你看到这个,先确认是不是某个调试工具改了系统代理。iPlot 本身不依赖网络,光标读数全是本地计算,所以这个错一定来自外部脚本。把脚本里的base_url直接写成https://taotoken.net/api,不要经过任何中间层。
reading choices 报错:这多半是模型返回格式跟你解析代码不匹配。比如你按 OpenAI 的choices[0].message.content去读,但返回结构不同。打印完整响应体,看字段名。这跟光标 Hint 的读取是两码事,别混。
OAuth 相关报错:如果你用 Claude Code 那类工具,可能会碰到 OAuth 流程。注意,OAuth 是编辑器侧的事,iPlot 光标不需要任何登录。遇到 OAuth 报错,去检查工具的凭证配置,别动 iPlot 工程。
还有一个 iPlot 特有的坑:光标提示窗口不显示。先查HintEnabled是不是 false,再查HintOrientationSide是不是把窗口挤出了绘图区。如果多光标联动时 Delta 不更新,检查事件有没有绑上,以及UpdateHint()有没有在移动后调用。这些才是本篇该排的错。
6. 把光标用进你的曲线分析流程
Data Cursors 配好之后,真正的价值在于把它嵌进日常分析流程。我的习惯是:每条趋势曲线默认挂两个 Value X 光标加一个 Period Cursor,操作员交接班时自己拖一下就能读出周期和峰峰值。右键菜单开放类型切换,遇到频率分析就临时换成 Frequency Cursor。
如果你要把这套逻辑产品化,建议把光标配置写进工程的初始化代码,而不是依赖设计期属性,这样换机器部署时行为一致。模型侧只用来辅助生成解析代码和核对换算,运行时保持纯本地。需要长期在编码环节用模型的,可以走 Coding Plan;只是偶尔验证读数的,用模型对话就够。接入文档在 doc 页面,Key 在 API Keys 页面,按需取用。