news 2026/9/3 4:25:02

kingscada链接外部数据库处理以及报表系统,案例涉及到数据记录插入数据库的脚本实现方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kingscada链接外部数据库处理以及报表系统,案例涉及到数据记录插入数据库的脚本实现方法

kingscada链接外部数据库处理以及报表系统,案例涉及到数据记录插入数据库的脚本实现方法,数据查询条件的选择脚本实现,数据的展示控件使用,系统中涉及的控件有:日期时间控件、多功能树型控件、listview控件、数据集函数的使用,系统配备mysql数据库,通过odbc与上位机链接

工业场景的数据管理总绕不开数据库和报表操作,最近用KingSCADA做污水厂监控系统时折腾了一把MySQL数据库对接。分享几个实战中特别实用的脚本片段,直接上干货。

环境搭建

先在控制机安装MySQL ODBC驱动(注意选8.0以上版本避免中文乱码),配置DSN时有个坑——必须勾选"允许大数据块截断",否则写入长文本日志时会报错。系统参数设置里得把连接超时改到30秒以上,毕竟工业现场网络波动常有的事。

数据入库

在报警触发按钮里塞入这段脚本:

LocalSQL = "INSERT INTO process_log (timestamp, device_id, value) VALUES(?,?,?)" result = SQLInsert(SQLID1, LocalSQL, DateTime.Now, "PLC_101", 56.78) If result <> 1 Then ErrorLog("入库失败:"+SQLGetError(SQLID1)) End If

SQLInsert的参数绑定方式比拼接SQL安全得多,特别是处理日期时间类型时能自动转换格式。注意数据库连接对象SQLID1需要在全局脚本里初始化,建议配合事务使用——批量插入200条以上数据时,显式调用SQLTransaction能提速3倍不止。

条件查询

kingscada链接外部数据库处理以及报表系统,案例涉及到数据记录插入数据库的脚本实现方法,数据查询条件的选择脚本实现,数据的展示控件使用,系统中涉及的控件有:日期时间控件、多功能树型控件、listview控件、数据集函数的使用,系统配备mysql数据库,通过odbc与上位机链接

日期范围查询配合树形控件搞层级筛选:

'树型控件节点点击事件 Sub OnSelChanged() Local startTime = GetDateStart(DateTimePicker1.Value) '自定义函数处理时分秒清零 Local endTime = GetDateEnd(DateTimePicker2.Value) Local zone = TreeCtrl.GetSelNodePath() //获取类似"厂区/车间/产线"的路径 sql = "SELECT * FROM production_data WHERE timestamp BETWEEN ? AND ?" If zone <> "" Then sql += " AND device_path LIKE '"+zone+"%'" End If SQLSelect(SQLID1, dataset1, sql, startTime, endTime) ListView1.BindDataSet(dataset1) End Sub

这里有个骚操作——用多功能树型控件的节点路径直接作为SQL查询条件,实现三级数据钻取。ListView的列宽建议用像素单位,百分比布局在数据过长时容易跑版。

数据展示

在ListView的绘制事件里加了个温度超标高亮:

Sub OnDrawItem(ItemIndex, hDC) Local temp = dataset1.GetItemValue(ItemIndex, "temperature") If temp > 90 Then SetTextColor(hDC, RGB(255,0,0)) Else SetTextColor(hDC, RGB(0,0,0)) End If End Sub

数据集函数GetItemValue比直接访问控件属性快得多,特别是在5000条以上数据时差异明显。遇到过个坑——日期字段需要显式转换:

Local recordTime = StrToTime(dataset1.GetItemString(0, "timestamp")) DateTimeCtrl.Value = recordTime

当MySQL存的是DateTime类型时,直接取出来是"YYYY-MM-DD HH:mm:ss"字符串格式,不做转换直接塞给日期控件会崩。

性能优化

在工程初始化脚本里预加载设备树:

SQLSelect(SQLID1, dataset_tree, "SELECT path_code, device_name FROM device_tree") TreeCtrl.Clear() While Not dataset_tree.IsEOF() Local nodes = Split(dataset_tree.GetItemString(0, "path_code"), "/") Local parent = "" For Each node In nodes If Not TreeCtrl.FindNode(parent+"/"+node) Then TreeCtrl.InsertNode(parent, node, dataset_tree.GetItemString(0, "device_name")) End If parent += "/"+node Next dataset_tree.Next() Wend

这种分级加载方式比递归查询快得多,实测万级节点能在2秒内完成渲染。注意MySQL的批量查询最好设置FetchSize为500,减少网络传输次数。

报表模块其实可以配合水晶报表直接读取数据集,但更骚的操作是用KingSCADA的画面窗口+HTML控件,直接ajax调接口生成ECharts图表,这样既能复用WEB报表又能避免ActiveX的各种兼容性问题。

这些脚本在多个现场跑了两年没出过大问题,核心就三点:参数化查询防注入、异常处理兜底、数据集操作代替直接控件操作。搞工业数据库别想着用ORM那些花活,老老实实写SQL反而最稳。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:32:35

闲置 N1 盒子别扔!OpenList 聚合网盘,搭配 cpolar 随时随地看 4K 资源

OpenList 作为一款开源免费的网盘聚合工具&#xff0c;核心功能是整合阿里云盘、夸克、百度云等数十种存储服务&#xff0c;通过统一的网页界面实现文件的查找、播放与下载&#xff0c;还支持 302 重定向技术&#xff0c;播放视频时直连网盘高速链接&#xff0c;避免带宽卡顿。…

作者头像 李华
网站建设 2026/9/2 11:57:01

告别嘈杂!Moodist%20白噪音神器,搭配%20cpolar%20解锁随时随地的宁静

Moodist 作为一款沉浸式环境音效生成器&#xff0c;核心功能是将雨打屋檐、篝火噼啪、山间溪流等数十种自然与生活音效拆分为独立模块&#xff0c;用户可自由调配比例&#xff0c;打造专属治愈音效&#xff0c;适配职场人、学生党、宝妈等各类需要舒缓环境的人群&#xff0c;其…

作者头像 李华
网站建设 2026/9/2 20:41:34

电动汽车与燃油车仿真模型大揭秘

纯电动汽车BEV 电机 电池 VCU控制仿真模型纯电动汽车整车仿真测试; 附赠传统燃油车 仿真模型 发动机 传动系 车辆模型 . 模型均有直观的模型搭建说明描述&#xff01;嘿&#xff0c;各位技术宅们&#xff01;今天咱来唠唠超酷的纯电动汽车&#xff08;BEV&#xff09;和传统燃…

作者头像 李华
网站建设 2026/9/2 21:38:04

科技设备免费处理的秘密技巧:快速回收打印机和笔记本电脑

我们都有那样一个"墓地"衣柜&#xff0c;里面塞满了旧笔记本电脑和缠成一团的打印机电缆&#xff0c;因为没人愿意处理正确丢弃它们的麻烦事。但到了2026年&#xff0c;让电脑和其他科技设备烂在那里不仅浪费空间&#xff0c;更错失了为地球做最基本贡献而不花一分钱…

作者头像 李华
网站建设 2026/9/2 21:38:13

研究人员通过数据投毒技术保护知识图谱免遭盗用

来自中国和新加坡高校的研究人员开发了一项新技术&#xff0c;能够使被盗的知识图谱数据在未经授权的情况下被整合到GraphRAG AI系统中时变得无用。大语言模型基于训练数据进行预测&#xff0c;无法有效回应其他数据的查询。AI行业通过检索增强生成&#xff08;RAG&#xff09;…

作者头像 李华