首页/新闻资讯/正文详情

CITECT数据库说明:SCADA实时库、标签归档与SQL Server对接实战

发布时间:2026/9/25 6:32:08 来源:云帆数科 栏目:资讯中心
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 数据落地项目先跑通一个点的端到端链路再批量复制。一个点通了后面就是体力活一个点不通后面全是坑。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

广联达网络锁节点清理与信任链重置实战指南
广联达网络锁节点清理与信任链重置实战指南

简介:本资源是一套面向广联达加密锁开发人员的网络锁节点扩展工具包,适用于需对深思S4加密锁进行二进制文件写入与调试的中高级开发者。资源核心为可直接运行的单机锁开发测试环境(含DevTest工具),支持向网络锁dat文件… · 2026/9/25 6:32:02

DeskcommCRM部署与落地实战:字段、自动化与权限配置经验
DeskcommCRM部署与落地实战:字段、自动化与权限配置经验

DeskcommCRM接触过几个客户管理系统之后,我最大的感触是:很多团队缺的并不是管理客户的软件,而是一个能让大家真正愿意用起来的客户协作工具。上个月我们团队开始评估要落地一套CRM,试了一圈大厂销售云、开源老牌项目,… · 2026/9/25 6:32:02

X-Scan v3实战指南:老牌漏洞扫描器的内网安全评估正确用法
X-Scan v3实战指南:老牌漏洞扫描器的内网安全评估正确用法

简介:X-scan-v3是由国内安全焦点团队开发的免费网络扫描工具,面向网络管理员、安全研究人员及具备合法授权的渗透测试者,用于快速定位主机开放端口、服务类型、已知漏洞、弱口令及配置缺陷。工具采用免安装设计,解压即用&#xff… · 2026/9/25 6:32:02

Atlas 300V部署YOLOv5/YOLOv8:从ONNX到OM全流程
Atlas 300V部署YOLOv5/YOLOv8:从ONNX到OM全流程

先交代一下背景。不少人在搜“atlas部署yolo”和“atlas 300v 24g 是运算加速卡吗”这类词,说实话,这两个问题指向的是同一件事:你想在昇腾Atlas平台上面把YOLO检测模型跑起来,但不确定这块卡到底能不能干这个活、干起来麻不麻烦。… · 2026/9/25 7:54:28

OpenCodex Windows 服务控制台窗口问题全解析:从根因调查到“无窗口后台服务“的完整修复路径
OpenCodex Windows 服务控制台窗口问题全解析:从根因调查到“无窗口后台服务“的完整修复路径

【免费下载链接】opencodex Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code 项目地址: https://gitcode.com/gh_mirrors/ope/opencodex 点击… · 2026/9/25 7:54:28

Atlas 300V 24G部署YOLO全流程:从环境搭建到推理调优
Atlas 300V 24G部署YOLO全流程:从环境搭建到推理调优

如果你最近在搞AI推理,肯定绕不开"Atlas"这个名字。特别是Atlas 300V 24G这张卡,网上问得最多的一句就是:它到底是不是运算加速卡?答案是肯定的——这是一张标准的专用AI推理加速卡,24GB显存,专为… · 2026/9/25 7:54:28

深度拆解iMessage附件后门及辅助模块的完整分析链路
深度拆解iMessage附件后门及辅助模块的完整分析链路

我最早接触“三角测量”(Triangulation)这个代号,是在处理一部iPhone异常发热、流量飙升的排查任务里。查了一整天日志,最后在一个不显眼的iMessage消息附件目录里翻出了一个伪装成图片的二进制文件,当时就觉得不对劲。… · 2026/9/25 7:54:22

酷狗KGG文件解密原理与六种实操方法详解
酷狗KGG文件解密原理与六种实操方法详解

1. 这不是“破解”,而是对本地音频文件格式的合规技术解析酷狗音乐的.kgg和.kgm文件,本质上是经过封装加密的音频容器,不是传统意义上的“盗版保护”或“DRM版权锁”,而是一种客户端级的资源打包机制——它把原始音频(… · 2026/9/25 7:54:22

Atlas 300V 24G部署YOLO全流程:从推理加速卡到模型优化
Atlas 300V 24G部署YOLO全流程:从推理加速卡到模型优化

1. 从热搜问题说起:Atlas 300V 24G到底是不是运算加速卡最近好几个群都在讨论Atlas 300V 24G,问的最多的就是“这玩意是不是运算加速卡”。我先直接给结论:是加速卡,但准确点说,它是AI推理加速卡,不是训练卡… · 2026/9/25 7:54:16

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* 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 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* 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 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* 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 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码