简介:施耐德Vijeo Citect 6.1是一款SCADA上位机软件安装包,面向工业自动化工程师与系统集成人员,用于完成生产线的可视化组态、实时数据监控和设备控制,并适配多种主流PLC通信协议。压缩包内共有三百一十一个文件,整体约四百八十三兆,以可执行程序、动态链接库、配置文件、组件包及说明文档为主要类型,同时包含示例图片、批处理等辅助材料,可满足离线安装部署与工程组态配置需求。已有五百七十八人学习下载,包内涉及数据库接口、报警事件管理、脚本语言和网络安全模块,有助于理解Vijeo Citect的工程结构,并快速搭建具备实时监控和报警通知功能的上位机界面。对于需要学习SCADA组态或维护施耐德自动化项目的技术人员,可从这些文件中获取界面设计、变量绑定、历史数据存储、权限控制等关键知识点的参考素材。结合随包文档与示例文件,能有效缩短从软件安装到完成一个简单监控项目的上手周期,适合作为工业现场或培训环境的备选资料。
1. 老牌上位机 Vijeo Citect 6.1:看着像组态,其实是一套分布式系统
Vijeo Citect 6.1 就是常说的施耐德上位机软件,业内更习惯叫它 Citect——一套从上世纪活到现在的 SCADA/HMI 平台。很多一线工程师第一次拿到这个压缩包时,以为它就是"画画面 + 绑变量"的组态小工具,结果装完才发现它是一套带 Kernel、IO Server、Alarm Server 的分布式框架,光理解组件关系就要花掉一整天。这套软件的价值在于:单机模式可以当普通触摸屏上位机用,分布式模式能扛住多站点、多 PLC、多客户端的产线监控。它适合你正在维护老产线,或者想用真实工程环境搭一套仿真验证平台的人。本文从安装到热备,把这条路完整走一遍,并标出最容易翻车的几个位置。
2. 从安装到跑起第一个工程:组件选型、授权和编译链路
2.1 组件构成:Studio、Kernel、Server 与 Client 的分工
Vijeo Citect 6.1 不像普通组态软件那样只有一个编辑器加一个运行环境。它的核心分四块:
- Citect Studio:开发环境,负责画面、变量、报警、通信的配置和编译。
- Kernel:运行时内核,是整个系统的"大脑",所有数据交换都经过它。
- 各类 Server:IO Server(采集 PLC 数据)、Alarm Server(处理报警)、Trend Server(存历史趋势)、Report Server(报表)。
- Client:显示端,连到 Kernel 上看画面、操作按钮,本身不做采集。
这四块在物理上可以装在一台电脑上(单机模式),也可以拆到多台电脑上(分布式模式)。我一般建议:只要你是在做现场项目而不是临时演示,就把 Kernel 和 Client 分开装。原因很直接——Citect 的 Kernel 承担了几乎所有实时计算,一旦客户端画面上某个脚本卡死,最坏情况是把整个 Kernel 拖垮,全产线监控全部变灰。分开部署后,客户端崩了只需要重新打开 Client,不会影响数据采集。
组件选型有个原则:IO Server 的数量基本等同于你接的 PLC 协议种类。例如同时接西门子 S7 和 Modbus TCP 的仪表,那就要配两个 IO Server 名称,分别指定不同的驱动。后面第 3 章会细讲。
2.2 安装落地:操作系统兼容性、路径与授权狗
Vijeo Citect 6.1 是十多年前的版本,对现代 Windows 的兼容性是第一个坑。它设计上支持 Windows 7 32/64 位,但很多人在 Windows 10/11 上装完后,Studio 双击没反应,或者编译时数据库连接失败。我踩过的有效做法是:
用 Windows 7 虚拟机做开发机,或者安装时右键安装包选择"兼容模式:Windows 7",并以管理员身份运行。安装路径不要带中文,也不要带空格,建议直接装到默认路径或者 D:\Citect61 这种极简路径。注意安装过程中会要求选数据库组件,这是 Citect 6.1 用来存工程配置和报警/趋势历史数据的底层库。这一步大概率会要求你重启一次,别跳过。
授权方面,Vijeo Citect 6.1 使用加密狗(Hardlock / USB 狗)或者授权文件。安装完成后先不要急于建工程,打开授权管理工具确认狗已经被识别。没有授权时,系统会进入演示模式,运行大约两小时会自动关闭,而且报警、趋势这些功能会被锁掉。这个限制在真实项目里够你喝一壶的,所以拿到压缩包后先验授权,别等画面组好才排查。
2.3 最小工程:创建项目、写一个 Tag、编译并启动
打开 Citect Studio,左上角新建工程,工程名必须用英文,比如 Demo_Plant。工程目录下会自动生成 Graphics、Cicode、Database、Alarms 等子目录。这一步很多人会忽略一个概念:Citect 工程的源码是文本和表格文件,但运行时读的是编译后的二进制 .dat 文件。所以每次改完配置,必须在 Build 菜单里执行 Compile,否则运行起来的还是上一次的编译结果。
最小可用工程只需要三步。第一步,在 Studio 的变量表里新建一个 Tag,类型选 ANALOG,名字随意,比如 $TANK_LEVEL。第二步,新建一个空画面,放一个显示数值的文本对象,把它链接到这个 Tag。第三步,编译,然后在开始菜单里打开 Citect Explorer,选择该工程和本机 Kernel 启动。画面上如果能看到实时数值(哪怕是 0),说明整条链路已经通了。
编译这一步有个高频报错值得先说:Output 窗口报 "无法找到内核" 或者 "工程编译失败,检查系统数据库"。多数原因是数据库组件装失败了,或者安装路径有中文导致连接串错乱。解决方式是修复安装,或者把工程文件拷到默认 Citect 工程目录下重编译。这个我在第 5 章还会展开。
3. 把 PLC 数据拉进画面:IO Device、驱动配置与批量点表
3.1 数据链路的三层结构:IO Server、IO Device 与 Tag
如果 Citect 只有画面组态,那它跟普通 HMI 没区别。它真正的核心是那条三层数据链:
IO Server 是内核里跑的一个通信服务实例,每种驱动协议对应一个 IO Server。IO Device 是挂在 IO Server 下面的具体设备对象,代表一个真实的 PLC 或仪表。Tag 则是变量,它通过 IO Device 的地址映射到 PLC 内存区。
一个常见误区是只建了 Tag,忘了定义 IO Device,然后在 Tag 地址里随便填一个寄存器号。结果编译能通过,运行时数据永远不动,为什么?因为 Citect 根本不知道该从哪个设备去读这个地址。我的习惯是先建 IO Device,再建 Tag,确保地址能下拉选择到设备。
IO Device 的配置页里有几个关键参数:协议类型、设备 IP、端口、轮询周期、超时时间。轮询周期决定数据实时性,默认建议 1 秒左右。如果你有几十个 Tag,可以相对加大轮询周期来降低总线负载,代价是画面数值刷新变慢。超时时间默认 1000ms,如果你的网络链路不稳定,比如走无线,建议加大到 3000ms 以上,否则设备会频繁被判定为掉线。
3.2 以 S7 为例:IP、机架号和槽号怎么填
接了西门子 S7,IO Device 的驱动选择 "Siemens S7",通信模式选 TCP/IP。这里有两个参数是新手必踩的雷:机架号(Rack)和槽号(Slot)。S7-300 的 CPU 一般插在 0 号机架的 2 号槽,S7-400 的 CPU 一般在 0 号机架的 3 号槽,具体以你硬件配置为准。很多人只填了 PLC 的 IP,Rack/Slot 随意填 0/0,结果数据一动不动。翻车现象很典型:IP 能 ping 通,PLC 编程软件也能连,就是 Citect 读不到。
我一般会先用 PLC 编程软件的在线视图确认 CPU 所在槽位,再去填 Citect。如果现场有多个 CPU 做扩展机架,还需要在 IO Device 里对每个机架单独建设备,填各自的 Rack 号。另外,S7 通信连接数是有上限的,如果同时有几台上位机在连同一个 PLC,新连接的 Citect 可能挤不进去。这时要看 PLC 侧诊断缓冲区的连接数错误,把不用的连接释放掉,或者换用 S7 TCP/IP 驱动而不是 ISO-on-TCP,后者在连接稳定性上有时候更容易被 PLC 拒绝。
Tag 地址格式上,S7 的输入输出区按 "IW100"、"QW20" 这种格式写,数据块按 "DB1.DBD12" 或 "DB1.DBW20" 格式写。注意数据类型要对上:REAL 对应 DBD,INT 对应 DBW,很多工程师在这里把地址类型写错,编译不报错但数据变成离谱的乱数。
3.3 批量导入点表:从 Excel/CSV 到 Tag 的落地路径
大项目里不可能手动一条一条敲变量。常见的做法是拿 Excel 维护点表,然后导入 Citect Studio。Studio 支持从 CSV 或 Excel 文件导入变量,我一般用 CSV 最省事,格式如下:
tagname,type,iod,variableaddress,description T_1001_TEMP,ANALOG,PLC_S7_1,DB1.DBD12,反应釜温度 M_1001_RUN,DIGITAL,PLC_S7_1,IW100.0,电机运行反馈 F_1001_SP,ANALOG,PLC_S7_1,DB2.DBW20,流量设定值逻辑说明:第一列 tagname 是变量名,type 决定数据类型(ANALOG 模拟量、DIGITAL 数字量、TEXT 文本),iod 必须对应已经建好的 IO Device 名称,variableaddress 是设备地址,description 只是备注。
参数说明:导入前要保证 iod 列里的设备名和 Citect 里完全一致,一个字母都不能差,否则整行导入失败。另外变量的 type 如果漏填或填错,运行时画面会不断报类型不匹配。我习惯在 Excel 里用数据有效性把 type 列限制成三个选项,导入后错误能少一半。导入完成后,从变量表里随机抽几个 Tag,打开属性确认 IO Device 和地址都正确。
4. 画面组态与事件逻辑:动画链接、Cicode 和报警趋势
4.1 页面与图形对象:动画链接的价值
画面组态最核心的不是画画,而是让图形对象跟着实时数据动。Citect 的图形编辑器里,一切对象都可以绑定"动画链接"。比如画面里画一个矩形表示液位,选中矩形,在属性里找到 Fill 相关的动画链接,选择变量 $TANK_LEVEL,设置填充方向为垂直向上,范围 0~100 对应 0%~100% 填充高度。运行后这个矩形的高度就会实时跟随液位变化。
链接类型分几类:Fill(填充变化)、Color(颜色随条件变,比如越限变红)、Visibility(变量满足条件才显示)、Orientation(仪表指针旋转)、Motion(对象移动)、Text Display(显示数值字符串)、Touch(点击触发事件)。我常用的组合是:电机图标用 Color 链接显示启停状态(绿色运行/红色停止/灰色故障),用 Visibility 让故障指示灯只在故障位置时出现,再用 Touch 把图标绑到弹窗操作页面。一套下来,比贴静态图加一堆文本框清晰得多。
有个细节值得注意:Color 链接和 Fill 链接都能做"状态变色",但机理完全不同。Color 是根据变量数值范围切换颜色,Fill 是根据数值大小填充面积或高度。液位画面用 Fill,电机状态用 Color,这个区分能帮你少走很多弯路。
4.2 Cicode 脚本:按钮、切换画面与掉线恢复
Cicode 是 Citect 的脚本语言,挂在按钮的 Touch/OnClick 事件里执行。我的原则是:能写进 Cicode 的逻辑就不要堆在画面上,方便后续统一维护。下面是最基础的例子:
FUNCTION ShowCtrlPage() Display("CTRL_PAGE_01"); END FUNCTION ConfirmStartMotor() INT nRC; nRC = Question("确认启动 1# 电机?", 1, 2); IF nRC = 1 THEN $MOTOR_1_START = 1; Message("1# 电机启动指令已发出"); END END逻辑说明:ShowCtrlPage 负责画面切换,Display 函数接收画面名,只要编译时画面存在就能跳转。ConfirmStartMotor 先弹一个确认对话框,Question 返回 1 表示确认、2 表示取消,确认后才把 $MOTOR_1_START 这个数字量 Tag 置 1,向 PLC 发出启动指令。
参数说明:$MOTOR_1_START 这种写法是 Citect 在 Cicode 里直接引用 Tag 的标准方式。注意 Cicode 里变量名和函数名都区分大小写,Question 的第二个参数 1 代表默认按钮、第三个参数 2 代表显示按钮数量,如果你只需要一个确定按钮,可以传 1, 1。
Cicode 还有一个实用场景是设备掉线自恢复。前面讲 IO Device 断线后不一定自动恢复,你可以写一个定时巡检脚本,周期检查设备状态,发现掉线就自动重启 IO Device。示例:
FUNCTION AutoRestartDevice() INT nState; nState = DeviceState("PLC_S7_1"); IF nState = 0 THEN DeviceRestart("PLC_S7_1"); END END这里 DeviceState 返回当前设备运行状态,0 表示未运行,DeviceRestart 执行设备重启。注意在 6.1 中不同驱动对 DeviceRestart 的支持不完全一样,通信卡类驱动可能需要重新初始化硬件,最稳妥的办法是把它放在定时器里周期执行,并在现场试运行阶段观察重启是否真的能恢复通信。
4.3 报警和趋势:给 HMI 接上"后视镜"
报警配置分三块:报警变量、报警类别、报警显示。在 Studio 的变量表里,选中一个 Tag 可以打开它的报警属性,对模拟量可以设置低低、低、高、高高四个限值,对数字量可以设置状态为 1 时报警或 0 时报警。建议每个报警都指定类别和优先级,类别用于运行时报警窗口按颜色和声音区分,优先级用于过滤。
运行时报警窗口是一个内置画面,它由 Kernel 里的 Alarm Server 服务统一管理,无论你连了多少个客户端,报警记录都集中在一处。如果你发现运行后报警窗口不弹任何信息,先检查 Alarm Server 是否启动、变量是否已经定义了报警限值,而不是急着查画面。
趋势同样依赖独立的服务。实时趋势直接在画面放 Trend 控件,选要看的 Tag 和曲线颜色;历史趋势则需要在 Trend Server 里配置存储路径和采样周期。历史趋势是一个很容易被低估的部分——它等于给 HMI 装了后视镜,事故发生后去翻曲线,往往比看报警记录更能定位问题。我在新建 Trend 时,采样周期一般设 1 秒,存储保留 30 天,基本能满足月报和事故追溯。
5. 避坑专章:Vijeo Citect 6.1 最常见的六个翻车现场
5.1 现象一:Studio 打不开,或编译即崩
现象:安装完成之后,双击 Studio 图标没有任何反应,或者打开后一到编译就闪退,Output 窗口还没打出信息就没了。
原因:绝大多数是 Windows 兼容性问题。Vijeo Citect 6.1 的 Studio 依赖早期运行库,在 Windows 10/11 上运行时权限不够,或者系统数据库组件连不上,导致编译进程崩溃。
解决:右键 Studio 快捷方式,勾选"以兼容模式运行",下拉选 Windows 7 或 Windows XP SP3,同时勾选"以管理员身份运行"。如果还不行,就把工程放到虚拟机里的 Windows 7 上编译。从那以后我只要装老版本上位机,第一件事就是建一台 Windows 7 虚拟机,省去后面所有关于环境的排查。
5.2 现象二:PLC 能 ping 通,但点位数据不动
现象:IO Device 状态显示在线,画面上的 Tag 数值全是不变化的初值,或者干脆是灰的。
原因:这类问题有个著名排查死角——S7 驱动的 Rack 和 Slot 填错。你 IP 地址写得再对,槽号错了,握手也建立不了。另一个常见原因是 PLC 侧连接数满了,编程软件占着一个连接,Citect 挤不进去。
解决:打开 IO Device 属性,核对 CPU 的机架号和槽号,S7-300 绝大多数是 Rack 0 Slot 2,S7-400 一般是 Rack 0 Slot 3。如果确认无误但依然连不上,去 PLC 侧看诊断缓冲区,把闲置编程连接断开再试。用我的话讲,这种问题八成是"IP 治好了,Rack/Slot 又翻车"。
5.3 现象三:中文全是问号
现象:画面上输入的中文注释,运行时全变成 ??????????,英文数字则正常。
原因:Vijeo Citect 6.1 的运行时字库存量问题。如果你的 Windows 系统区域不是"中文(简体,中国)",或者工程里指定的字体不是中文字体,文本显示就会回退到西文字符集,中文全部变成问号。
解决:控制面板把非 Unicode 程序的语言改成中文并重启,同时在工程属性里把默认字体改成宋体或微软雅黑,编译重新运行。注意这两步缺一不可——只改区域不换字体,中文仍然是豆腐块。如果项目已经做完才发现乱码,别慌,改完字体后重新编译会批量更新所有画面文本,不需要逐页改。
5.4 现象四:IO 设备掉线后,恢复不了
现象:现场拔了网线或 PLC 断电重启,设备断线后被标记为 Offline,网络恢复后 Citect 一直不自动重连,必须手动重启 Kernel 才能恢复。
原因:IO Device 的重试与恢复参数没有配置。Citect 默认在设备无响应后按固定周期重试,但如果重试次数用尽或处在某种挂起状态,它不会无限次重试,而是停在那里等你干预。
解决:打开 IO Device 的通信属性,把"重试次数"加大,把"重试间隔"调短到 10 秒以内,同时把轮询周期从 1000ms 放宽到 2000ms,让设备有足够喘息时间。更稳的办法是写一段 Cicode 周期性巡检设备状态,发现掉线自动 DeviceRestart,我在 4.2 节已经给过例子。这类问题表面上是通信问题,实际是"配置没给重活一条命的机会"。
5.5 现象五:授权狗明明插着,License 找不到
现象:加密狗插在 USB 口上,授权管理工具里却看不到任何授权,启动运行环境时提示演示模式或者直接拒绝运行。
原因:授权狗的驱动服务没有安装成功,或者被安全软件禁用了。USB 加密狗的老版本驱动在插拔之后,服务不会自动重启,需要手动把它拉起来。
解决:先检查设备管理器里有没有未识别的加密狗设备,有就重新安装狗驱动。然后打开服务管理工具,找到授权相关服务,确认它处于"自动启动"状态,手动启动后不必重启系统,直接在授权管理工具里刷新。这个坑看着玄学,实际大多数时候就是"驱动装好了,服务没起来"。
5.6 现象六:重启服务器后,画面全灰
现象:服务器因为停电或维护重启,Kernel 起不来,客户端连上之后整屏是灰色,按钮全部失灵,Operate 状态消失。
原因:Kernel 没有注册为系统服务并设为自动启动,重启后必须人工打开 Citect Server 端程序,客户端自然连不上。另外客户端组的服务器指向如果写的是 IP,而现场网络环境变化导致 IP 变更,同样会出现连不上。
解决:把 Kernel 相关服务全部设为"自动启动",并确保服务登录账号有本地管理员权限。客户端那边,我的习惯是在 Citect.ini 里用服务器机器名而不是 IP 来指定 Kernel 节点,机器名在局域网里相对稳定,IP 变了也能解析。重启后第一件事是确认 Kernel 进程存在、IO Device 全部在线,再开客户端,顺序反了容易让客户看着灰屏慌神。
6. 把项目做扎实:热备集群和发布前验证
6.1 热备配置要点
Vijeo Citect 6.1 支持双机热备,这是规模稍大的产线几乎必做的功能。热备结构是两台机器组成一个 Cluster,一台 Primary,一台 Standby,客户端只认集群名。Standby 机器保持和 Primary 同步的工程版本,Primary 出现故障时 Standby 接管运行,操作画面会自动切到后备节点。
配置时有两个关键参数值得单独说:心跳时间和切换条件。心跳是两台机器之间的"互相喊话"机制,间隔太短容易误判故障,太长故障切换时间又会变长。我一般设 3~5 秒心跳。切换条件建议保守一点,不要在通信卡顿一下就直接切机,否则会出现主备反复抢权,比不切还要难受。
热备验证不能省。我在现场做验证时,最狠的一招是直接把 Primary 的网线拔掉,看切换时间是否在几十秒以内,再插回去,观察 Standby 是否把控制权交还。注意:恢复后不一定自动切回 Primary,很多项目故意要求"故障后保持当前节点运行",避免切换抖动。这个策略需要和甲方提前确认,把它写进验收报告,否则到验收时两边说法不一致会非常被动。
6.2 发布前的最小验证清单
我对每个 Citect 项目在交付前强制走一遍这个清单:第一,编译输出无错误和警告,这条放在所有步骤之前。第二,Kernel 启动后 IO Device 全部在线,用 DeviceState 巡检一遍所有设备。第三,随机挑几个模拟量做越限报警,确认报警窗口弹出和确认流程正常。第四,趋势页面能看到历史曲线出现,而不仅是实时一条线。第五,客户端连集群名能正常操作,关掉一台服务器后自动切换成功。
这五条跑完,我不敢保证项目零问题,但至少能保证"现场运行不会出现第二天早上灰屏"这种灾难。热备这东西平时用不到,出故障时就是后悔药,没有它就只能开机写检讨。从那以后,每次在现场部署完 Citect,我都会把服务器重启一遍,强制走完整个热备切换和恢复流程再签字。这个习惯帮我挡掉过不止一次"半夜掉线全厂画面全灰"的求助电话。项目做多了,你会发现稳定不玄学,稳定靠的是一遍一遍把流程跑死。希望帮到你。
本文还有配套的精品资源,点击获取