CITECT数据库说明:SCADA实时库、标签归档与SQL Server对接实战
简介这份文档资料聚焦CitectSCADA Reports内嵌历史数据库面向自动化、SCADA系统集成与工业数据管理方向的工程师及运维人员帮助理解如何借助冗余SCADA连接器与MS SQL Server 2005构建高可靠的历史数据存储方案。资源包内仅1个doc文件约1.42MB内容围绕历史数据采集、存储、安全与主动数据交换展开涵盖逢变则存、死区过滤、100纳秒时间戳、OPC质量标识、每秒十万点变化记录等关键机制并说明与InTouch、Fix32、IFix等SCADA系统及MS SQL、Oracle等企业数据库的接口方式。文档还涉及磁盘空间计算器、性能计数器、SQL审计与用户权限管理等运维要点以及ETL数据提取转换加载和ActiveX脚本通知等扩展能力。目前已有311人学习适合需要快速掌握Citect历史库配置思路、数据精度保障与系统集成方法的读者参考。1. CITECT 数据库说明从一份文档到一套能落地的 SCADA 数据方案很多人第一次拿到「CITECT数据库说明.doc」这类文档时第一反应是找里面的表结构、字段清单结果翻完发现全是配置项和名词解释根本不知道从哪下手。CITECT 是施耐德旗下的一套 SCADA 组态软件它的「数据库」不是我们平时说的 MySQL、SQL Server 那种独立数据库而是组态工程内部的实时数据库也叫标签库、点表再加上可选的趋势归档和历史存储。换句话说这份说明文档真正要解决的是SCADA 系统里成千上万个点位怎么定义、怎么读写、怎么和历史库对接、怎么让上层 SQL Server 或报表系统拿到数据。适合正在做中控 SCADA、国产 SCADA 替代选型、或者需要把 CITECT 接入 OPC 和关系库的一线工程师。下面按「概念先立住、再动手复现、最后讲坑」的顺序拆开讲。2. CITECT 的「数据库」到底是什么实时库、标签与归档的三层结构2.1 实时数据库不是关系库别拿 SQL 思维套CITECT 的核心是一个内存实时数据库每个点位叫一个「标签」Tag标签有名字、类型、工程单位、量程、死区、初始值这些属性。它和 SQL Server 最大的区别是实时库按扫描周期刷新读写走的是内部变量引用不是 SQL 语句。你在画面上放一个数值显示对象背后绑的就是某个标签名而不是一条 SELECT。理解这一点很关键因为后面所有「数据库说明」里的配置项本质都是在描述标签怎么定义、怎么被驱动写入、怎么被归档。常见做法是先规划点表把现场设备PLC、仪表、OPC 服务器的地址和 CITECT 标签一一对应再决定哪些点需要归档、哪些只需要实时显示。点表规划不好后面改起来就是血泪经验——改一个标签名画面上十几个引用全断。2.2 标签类型与驱动配置从 PLC 地址到 CITECT 变量CITECT 支持多种驱动常见的有 Modbus、西门子 S7、OPC DA、OPC UA。以 OPC 为例你需要先装 OPC Core Components再在 CITECT 的 IO Server 里配置通道、设备、点位。每个点位在 CITECT 侧对应一个标签标签的地址格式取决于驱动比如 Modbus 是40001这种寄存器地址S7 是DB1.DBD0这种。下面是一个典型的标签定义示例用 CITECT 的变量声明语法Cicode 里引用变量// CITECT 标签定义示例在变量标签数据库中 // 标签名: Pump1_Flow // 类型: Real // 工程单位: m3/h // 量程: 0 ~ 500 // 死区: 0.5 // 驱动地址: Modbus 40001 // 归档: 是周期 60 秒 // 在 Cicode 中读取该标签 REAL flow; flow Pump1_Flow; // 直接引用标签名 IF flow 400 THEN AlarmMsg(泵1流量高); END逻辑说明CITECT 的标签名在 Cicode 里就是变量名不需要额外声明类型转换。参数说明死区决定什么时候触发更新设太小会导致频繁刷新设太大会丢小变化归档周期决定历史库的采样间隔太密会撑大历史文件太疏会丢趋势细节。我一般把死区设成量程的 0.1%~0.5%归档周期按工艺需要设 10~60 秒。2.3 历史归档与外部关系库的边界CITECT 自带趋势归档数据存在工程目录下的历史文件里格式是私有格式不是直接可查的 SQL 表。如果你需要让 SQL Server 或报表工具读历史数据常见做法有两种一是用 CITECT 的 ODBC 接口把归档数据导出二是通过 OPC 或 Cicode 定时把数据写到外部 SQL Server。第二种更灵活但要注意写入频率和事务控制。-- 外部 SQL Server 历史表结构示例 CREATE TABLE CitectHistory ( TagName NVARCHAR(64) NOT NULL, Value FLOAT NOT NULL, Quality INT NOT NULL, Timestamp DATETIME2 NOT NULL, PRIMARY KEY (TagName, Timestamp) );这个表结构里Quality 字段对应 OPC 的质量码0 表示好值非 0 表示坏值或不确定。很多人在做报表时忽略 Quality结果把坏值当正常值统计数据对不上就是踩坑。写入时建议用批量插入不要每个点一条 INSERT否则 SQL Server 压力很大。3. 把 CITECT 数据接到 SQL Server 和 OPC可复现的配置路径3.1 用 OPC 做中间层CITECT 与第三方系统的解耦CITECT 本身可以作为 OPC DA 服务器也可以作为 OPC 客户端去连别的 OPC 服务器。如果你要让第三方系统比如 MES、报表平台拿 CITECT 的数据最稳的方式是让 CITECT 对外暴露 OPC DA 或 OPC UA第三方通过 OPC 客户端读。这样 CITECT 内部点表不用动第三方也不用装 CITECT。配置步骤在 CITECT 的 IO Server 里启用 OPC 服务记下 ProgID比如Citect.OPC.1然后在第三方机器上用 OPC 客户端工具如 UaExpert 或 OPC Quick Client连接。注意 OPC DA 依赖 DCOM 配置跨机器时权限和防火墙很容易翻车能上 OPC UA 就上 OPC UA。# 检查 OPC 服务是否注册Windows 命令行 reg query HKCR\Citect.OPC.1 # 如果返回空说明 OPC 服务没注册需要重新运行 CITECT 安装目录下的 OPC 注册脚本参数说明Citect.OPC.1是常见 ProgID具体以你安装的 CITECT 版本为准。注册脚本一般在Citect\Bin目录下名字类似OPCRegister.bat。这一步不做第三方连不上就是必然。3.2 用 Cicode 定时写 SQL Server最直接的历史数据落地如果你不想走 OPC也可以在 CITECT 里用 Cicode 直接连 SQL Server。CITECT 提供SQLConnect、SQLExec等函数可以执行 INSERT。下面是一个定时写数据的例子// CITECT Cicode 定时写 SQL Server 示例 INT hSQL; STRING sSQL; FUNCTION WriteToSQL() hSQL SQLConnect(DSNCitectHistory;UIDsa;PWDyourpassword); IF hSQL 0 THEN sSQL INSERT INTO CitectHistory (TagName, Value, Quality, Timestamp) VALUES (Pump1_Flow, Pump1_Flow , 0, GETDATE()); SQLExec(hSQL, sSQL); SQLDisconnect(hSQL); END END // 在任务里每 60 秒调用一次逻辑说明SQLConnect返回连接句柄非 0 表示成功。SQLExec执行 SQL 语句字符串拼接时注意数值转字符串的格式浮点数要用FloatToStr并指定小数位否则可能因为区域设置导致小数点变逗号。参数说明DSN 需要在 Windows 的 ODBC 数据源里提前配好指向你的 SQL Server。密码明文写在 Cicode 里不安全常见做法是放到 CITECT 的加密配置文件里或者用 Windows 集成认证。3.3 点表批量导入导出别手动一个个敲CITECT 的标签数据库支持导出为 CSV也支持从 CSV 导入。实际项目里点表动辄几千点手动敲就是灾难。常见做法是在 Excel 里按 CITECT 的变量导出格式整理好再导入。导出格式一般包含 TagName、Type、Address、Comment 等列。列名含义示例TagName标签名Pump1_FlowType数据类型RealAddress驱动地址40001EngUnits工程单位m3/hRawZero原始零值0RawFull原始满值32767EngZero工程零值0EngFull工程满值500Comment描述泵1出口流量导入前一定要备份原工程导入时注意地址格式和驱动匹配。我见过因为 Address 列多了一个空格导致几百个点全部通讯失败的情况排查了半天才发现是 CSV 里的隐藏字符。4. 避坑与排查CITECT 数据库配置里最容易翻车的 5 个点4.1 现象标签值不刷新画面上一直是 0原因驱动地址配错或者 IO Server 没启动。CITECT 的 IO Server 是独立进程如果没起来标签就是死值。解决先看 CITECT 的 IO Server 窗口有没有报错再用 OPC 客户端直接读同一个地址确认是驱动问题还是 CITECT 配置问题。如果是 Modbus检查寄存器地址是 0-based 还是 1-based很多 PLC 手册写 40001实际驱动要填 0。4.2 现象历史趋势断断续续有数据但时间戳跳变原因归档周期和系统时间不同步或者归档文件写满后没滚动。CITECT 的历史文件默认有大小限制满了之后如果没配置滚动就会停止归档。解决在工程配置里把历史文件大小调大启用自动滚动并确保 Windows 时间同步服务正常。另外如果用了外部 SQL 写入检查 SQL Server 的 Timestamp 字段是不是用了GETDATE()这个取的是 SQL 服务器时间不是 CITECT 机器时间跨机器时会有偏差。4.3 现象OPC 连接报「拒绝访问」或 DCOM 错误原因OPC DA 依赖 DCOM跨机器时默认权限不允许匿名访问。解决在 OPC 服务器和客户端机器上都运行dcomcnfg在组件服务里找到 OPC 相关组件把身份验证级别设为「无」访问权限加上 Everyone。如果还是不行检查防火墙有没有放行 135 端口和动态端口范围。能换 OPC UA 就换UA 只需要一个端口配置简单得多。4.4 现象Cicode 写 SQL 时报「驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接」原因SQL Server 强制加密而 ODBC 驱动版本太老不支持。解决升级 ODBC Driver 到 17 或 18或者在连接字符串里加Encryptno仅内网可信环境。更稳的做法是升级驱动别关加密。这个报错在 SQL Server 2016 以后很常见尤其是用旧版 CITECT 自带 ODBC 的时候。4.5 现象导入 CSV 后标签类型全变成字符串原因CSV 里 Type 列的值和 CITECT 要求的枚举不匹配比如写了REAL但 CITECT 要Real大小写敏感。解决导出一次现有标签作为模板照着模板的格式填。导入前先用文本编辑器检查有没有 BOM 头UTF-8 with BOM 会导致第一列列名解析失败。5. 进阶用 C# 通过 OPC UA 读 CITECT 数据并写入 SQL Server如果你不想在 CITECT 里写 Cicode也不想用 OPC DA 的 DCOM那用 C# 走 OPC UA 是最干净的方案。CITECT 较新版本支持 OPC UA 服务器第三方用 C# 的 OPC UA 客户端库比如Opc.Ua.Client订阅标签收到数据后批量写 SQL Server。// C# OPC UA 客户端订阅 CITECT 标签并写 SQL Server 示例 using Opc.Ua.Client; using System.Data.SqlClient; var endpoint opc.tcp://citect-server:4840; var session await Session.CreateAsync(...); var subscription new Subscription(session.DefaultSubscription) { PublishingInterval 1000 }; var item new MonitoredItem(subscription.DefaultItem) { StartNodeId ns2;sPump1_Flow, AttributeId Attributes.Value }; item.Notification (monitoredItem, args) { var value (double)monitoredItem.LastValue.Value; using var conn new SqlConnection(Serversqlserver;DatabaseScada;Integrated Securitytrue;); conn.Open(); using var cmd new SqlCommand(INSERT INTO CitectHistory VALUES (tag, val, 0, GETDATE()), conn); cmd.Parameters.AddWithValue(tag, Pump1_Flow); cmd.Parameters.AddWithValue(val, value); cmd.ExecuteNonQuery(); }; subscription.AddItem(item); await subscription.ApplyChangesAsync();逻辑说明MonitoredItem的StartNodeId是 OPC UA 节点 IDCITECT 的标签一般映射到ns2;s标签名具体要看 CITECT 的 UA 服务器配置。Notification事件里拿到值后直接写库这里为了简洁每次新建连接实际项目应该用连接池或批量写入。参数说明PublishingInterval是订阅周期设 1000 毫秒对大多数 SCADA 场景够用再快就要考虑 SQL Server 的写入压力。Integrated Securitytrue用 Windows 认证避免密码明文。验证方法先跑起来看 SQL Server 里有没有数据再用 SQL 查最近 10 条确认时间戳和值都对。如果值不对检查 OPC UA 节点的数据类型和 C# 里的强制转换是否匹配。如果连接不上先用 UaExpert 连一下确认节点 ID 和权限没问题。我自己的习惯是任何 SCADA 数据落地项目先跑通一个点的端到端链路再批量复制。一个点通了后面就是体力活一个点不通后面全是坑。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

ES8311音频Codec时钟树配置与分频计算完全指南

ES8311音频Codec时钟树配置与分频计算完全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:31:05 阅读更多 →
从幺蓝破解官网案例拆解软件分发与版本管理技术实践

从幺蓝破解官网案例拆解软件分发与版本管理技术实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:31:05 阅读更多 →
嵌入式C语言手搓UTF-8编解码与工具函数实战

嵌入式C语言手搓UTF-8编解码与工具函数实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:31:05 阅读更多 →

最新新闻

OpenClaw 给了每个人“数字分身”,但企业更需要可靠的 AI 员工:用 TaoToken 统一 Key 打通 Agent 配置

OpenClaw 给了每个人“数字分身”,但企业更需要可靠的 AI 员工:用 TaoToken 统一 Key 打通 Agent 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 13:02:09 阅读更多 →
GLM-5.3本地部署实战:量化、vLLM推理与生产级API集成

GLM-5.3本地部署实战:量化、vLLM推理与生产级API集成

1. 项目概述:为什么是GLM-5.3,又为什么必须本地跑?最近在几个技术群和开源社区里,几乎每天都能看到“GLM-5.3 本地部署”被反复刷屏。不是因为某个新功能发布会,也不是厂商营销推波助澜,而是真实的一线开发…

2026/9/26 13:02:09 阅读更多 →
从0到1搭建AI Agent平台:从Function Calling到业务落地

从0到1搭建AI Agent平台:从Function Calling到业务落地

最近被问得最多的问题,就是AI Agent到底怎么落地。不是那种PPT层面的"我们规划了Agent战略",而是真正动手,从零搭一个能用的Agent平台出来。我自己从最早接触大模型API到现在,前后折腾了大半年,从只会调接口…

2026/9/26 13:02:09 阅读更多 →
老旧管网非开挖检测:声波+AI的真实精度解析

老旧管网非开挖检测:声波+AI的真实精度解析

1. 这不是“听个响”,而是把地下管网变成一张会说话的活地图你有没有见过这样的场景:市政人员蹲在井盖边,手里捏着一个巴掌大的探头,往管道口一塞,几秒钟后平板上就跳出“DN300铸铁管,距井口4.2米处存在环向…

2026/9/26 13:02:09 阅读更多 →
鸿蒙状态管理深度解析:LocalStorage与AppStorage选型与实战

鸿蒙状态管理深度解析:LocalStorage与AppStorage选型与实战

1. 状态管理怎么分层:LocalStorage和AppStorage到底解决了什么问题写鸿蒙UI,不管你是刚入门的新手,还是已经做过几个完整项目的老手,都会碰到一个绕不开的问题:多个组件、多个页面之间的数据,到底怎么共享、…

2026/9/26 13:02:09 阅读更多 →
AI重构Obsidian知识库:从四千条乱笔记到可检索资产

AI重构Obsidian知识库:从四千条乱笔记到可检索资产

1. 先别急着整理:几千条笔记乱成一团,根子不在懒而在系统设计 说个我自己的真实场景:上个月我想用Obsidian找几条关于"项目复盘"的资料,搜索框敲下去,直接跳出两百多条结果,其中几十条标题都是&q…

2026/9/26 13:01:09 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →