ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Desigo CC工程配置全流程:SMC、HDB与客户端接入避坑指南

Desigo CC工程配置全流程:SMC、HDB与客户端接入避坑指南

简介:《Desigo CC手册-04-Project Configuration-BA-CN(工程配置)》是面向楼宇自控工程师、系统集成与运维人员的西门子Desigo CC工程配置指导文档,聚焦综合楼宇自动化系统的项目落地与日常管理。压缩包内为1个PDF文件,大小2.23MB,按章节组织系统管理控制台(SMC)的工作流程,便于随查随用。内容围绕创建历史数据库、实例化项目、配置项目、备份数据库与SMC操作展开:说明HDB对用户活动、警报事件、故障消息和趋势数据的记录作用,比较恢复项目模板、恢复备份与新建项目三种方式,并强调模板预配置对缩短工程时间、降低出错风险的价值,同时涉及项目文件夹共享、端口与权限设置及定期备份要点。已有559人学习,适合需要理清Desigo CC项目配置路径、补齐HDB与备份操作细节的初、中级技术人员参考。

1. 新机器上做完 Desigo CC 工程配置,最容易卡在打开 SMC 的那一刻

装完 Desigo CC 客户端和服务端组件,桌面双击图标进不去,打开 SMC 一看项目列表是空的——没有历史数据库、没有模板,端口还被上一轮调试残留的项目占着。真正把现场拖住的问题,往往就出在这套 Project Configuration 流程的顺序上,安装包本身反而没那么折腾。楼宇自控的每个站点基本都要走一遍这条顺序:先建 HDB,再实例化项目,然后配共享权限、激活、备份。手册里 BA-CN 这一章只有几页,跳步的后果却会一个接一个出现,例如 HDB 没链接、模板恢复成半截、状态报“已过期”启不来。这篇按工程现场顺序整理,从 SMC 启动一直写到客户端能连上,适合第一次独立做站点的工程师,也适合接手别人做了一半项目的人。

2. 启动 SMC 与创建历史数据库 HDB:先把项目的基础建起来

SMC 是这套系统里唯一能操作项目生命周期的入口,创建项目、恢复模板、升级、加扩展模块、建 HDB,全部由它负责。很多人习惯先恢复项目再补数据库,结果项目恢复完提示找不到 HDB,只能删掉重来。稳妥的顺序是先确认 SQL Server 可用,再建 HDB,最后实例化项目——项目、备份、模板这三类对象在 SMC 里是并列的,但依赖关系是单向的,HDB 是下游。

2.1 SMC 的两个启动入口和启动前的三项检查

SMC 的位置在两个地方:开始菜单里的“所有程序 → 工具 → Desigo CC SMC”,以及桌面快捷方式。两条路径指向同一个可执行文件,但权限不一样:从桌面双击默认用当前登录账户的非提升令牌启动,创建 HDB、写注册表、改服务账户这些动作会失败,报错还很难看出是权限问题。常见的做法是右键“以管理员身份运行”,或者在快捷方式属性里勾上“以管理员身份运行”,一劳永逸。

启动后先别急着点“创建”。SMC 首页能看到系统和服务管理员账户配置、项目列表、扩展模块入口,这三块对应它最核心的职责:配置系统和服务管理员账户、创建或恢复项目与模板并升级项目、添加扩展模块、创建或恢复特定项目的 SQL 历史数据库。第一次上手的机器,我一般先确认下面三件事:

  • SQL Server 实例已经启动,并且允许远程或本地连接;
  • 磁盘上给数据库文件和日志文件留出独立分区,不要和项目文件夹共用系统盘;
  • 运行 SMC 的账户在 SQL Server 上有建库权限,或者至少有 dbcreator 角色。

检查 SQL 服务用一条 PowerShell 命令就够,不用去服务管理器里一个个翻:

# 看本机所有 SQL Server 实例服务和浏览器服务的状态 Get-Service -Name 'MSSQL*' | Select-Object Name, Status, StartType Get-Service -Name 'SQLBrowser' -ErrorAction SilentlyContinue | Select-Object Name, Status # 确认固定端口在监听(命名实例走动态端口,靠 SQLBrowser 解析) Get-NetTCPConnection -LocalPort 1433 -State Listen -ErrorAction SilentlyContinue | Select-Object LocalAddress, LocalPort, OwningProcess

Get-Service -Name 'MSSQL*'的通配会同时匹配默认实例和命名实例,输出里的 Name 就是实例名,后面在 SMC 里扫描到的是同一套名字。SQLBrowser服务(SQL Server Browser)负责把实例名解析成实际端口,命名实例部署里它没起来,SMC 的“扫描网络”就什么都扫不到,这条在排查章里还会再提。最后那句Get-NetTCPConnection -State Listen只查监听态,避免把大量 TIME_WAIT 连接也打出来;-ErrorAction SilentlyContinue是为了在没有 1433 监听的机器上不抛红字,让脚本能继续往下跑。

SMC 里的工作流程可以简化成一条链:启动 SMC → 判断项目类型(新项目 / 项目备份 / 项目模板 / 已过期项目)→ 输入或编辑项目名称 → 定义项目路径 → 链接 HDB → 保存 → 激活启动。可选的分支是“配置系统和默认用户账户”和“添加扩展模块”,这两步不做也能把项目跑起来,但后续补做要停机,所以建议在实例化阶段一次配完。

2.2 扫描、链接 SQL Server 并创建 HDB

HDB 的作用不只是“存点数据”。它记录四类内容:系统中的用户活动(活动日志)、警报及其处理(事件日志)、已发生的故障(批处理消息)、趋势数据值和上传(数值日志)。换句话说,事件回放、报警追溯、趋势曲线这三项现场最常被追问的功能,全部压在 HDB 上。HDB 没建好,项目能启动但历史全是空的,等到验收时才发现就晚了。

操作顺序是固定的:SMC 里点“扫描本地”搜本机,或者“扫描网络”搜网段内的 SQL Server;列表出来后选中目标实例点“链接”;链接建立后再点“添加”,在服务器上创建 HDB。扫描网络时如果实例不在默认端口,扫描会漏,这种情况直接手工填实例名更省时间。

创建 HDB 那一步要填的信息不多,但每一项都影响后面的运维:

参数说明站点常见取值
数据库大小HDB 主数据文件的初始容量中型站点 5~10 GB 起步,按点数和趋势周期估
日志大小事务日志初始容量一般为主数据文件的 20%~50%
恢复方法简单恢复或完整恢复有审计要求用完整恢复,并配日志备份任务
文件位置数据文件落盘目录独立数据盘,避开系统盘和项目文件夹
路径位置备份或辅助文件目录与数据文件分开的物理盘
HDB 所有人和用户数据库归属账户服务账户统一,不要用个人域账户

“恢复方法”这一项被忽略得最多。选简单恢复,日志会周期性截断,出问题只能恢复到最近一次完整备份;选完整恢复,日志不截断,必须配套日志备份任务,否则磁盘会被日志吃满。我一般按站点的验收要求定,没有明确要求就选完整恢复加每日日志备份,磁盘多留一倍空间。

保存后等几分钟,SMC 会给出创建成功的确认。别只看这个界面就结束,最好去 SQL 侧核对一遍文件真实落盘位置:

-- 核对 HDB 的数据文件和日志文件实际落在哪个目录、初始多大 SELECT name, physical_name, size * 8 / 1024 AS size_mb, growth, is_percent_growth FROM sys.master_files WHERE database_id = DB_ID(N'HDB_项目代号');

sys.master_files是实例级视图,不依赖当前连接的数据库,所以哪怕 HDB 处于恢复挂起状态也能查。size * 8 / 1024是把页数换算成 MB,SQL Server 的一页是 8 KB。growth和is_percent_growth用来确认增长方式:按百分比增长在大库上会导致增长越来越慢,常见做法是改成按 512 MB 或 1 GB 固定增长。HDB 名称不要用中文、空格和特殊字符,SMC 界面允许,但后面写脚本、做监控会一路难受。

2.3 系统和服务管理员账户的初始化

SMC 概述里第一条就是“配置系统和服务管理员用户帐户”,位置在项目操作之前。这一步的本质是把“谁能管这套系统”定下来:服务管理员是服务进程运行身份,系统管理员是登录 SMC 做配置的人。两者混用是现场很常见的坏习惯,服务跑在某个人的域账户下,人一调岗,整个项目就起不来,属于典型的不可挽回问题。

常见做法是单独建一个服务账户,设成密码永不过期,只授予项目文件夹和 SQL 实例的最小权限;系统管理员按人头分配,用组来管理,后续增删人只改组。这一步在 SMC 里点几下就完成,但一定要在项目实例化之前做完,项目建好之后再换服务账户,需要停服务、改权限、重新链接 HDB,成本完全不一样。

3. 项目实例化:恢复模板、恢复备份、创建新项目怎么选

到这一步项目还是空的,SMC 提供三种实例化方式:恢复项目模板、恢复项目备份、创建新项目。三者在手册里是并列的按钮,实际工程里选择顺序并不平等——推荐方法是恢复项目模板,不是因为它功能多,而是因为它把大量隐性配置提前做好了。同一个站点,新建项目从零配到能跑,和从模板恢复再改点位,工时差通常在几倍以上。

3.1 模板里预先配置了什么

模板是一个预配置的项目,交付时已经带好了基本设置,目的是减少工程投入和降低出错风险。按手册列出的内容,恢复出来的模板项目里包含:

  • 系统设置和应用程序设置;
  • 已激活的扩展模块;
  • 已创建的图形文件夹、拓扑图形;
  • 已应用的事件架构;
  • 已选择的客户端和用户配置文件;
  • 已导入并按类别分类的报告;
  • 已创建并已启动的驱动程序、已创建的趋势定义;
  • 已创建的网络和已分配的驱动程序;
  • 已创建的逻辑、物理和用户视图;
  • 已创建的用户和安全组,以及已分配的作用域和应用程序权限。

这份清单看着像功能罗列,实际是 Checklist:恢复完模板后,逐项核对一遍,缺哪项就知道是模板版本不对还是恢复过程被打断了。比如图形文件夹为空但拓扑图形在,多半是模板本身裁过;事件架构没应用,事件日志会一条不落全进 HDB,几天就能把库撑大,这属于后面排查章里的高频问题。

模板文件放在安装目录下的GMSProjects\GMSMainProject\ProjTemplates,不同扩展方向(BA、消防、TBS)交付的模板不同,选错模板的后果是扩展模块和点位类型对不上,改起来比重建还慢。选之前先确认项目属于哪条产品线,别看着名字像就点。

3.2 恢复项目模板的完整操作与项目配置项

点“恢复项目模板”后,从上面那个目录里选模板,然后进入项目配置界面。这一步要填四样东西:项目名称、项目路径(可以保持默认)、关联的 HDB、端口号。

项目名称建议带站点代号和日期,例如BA_Site01_202406,别用“新建项目”“test”这类名字。SMC 里项目一多,列表里根本分不清哪个是正式环境。项目路径默认在安装盘的GMSProjects下,如果机器上有独立数据盘,改到数据盘更稳——项目文件夹会随图形、报告、日志持续增长,和系统盘抢空间是常见的磁盘告警来源。

端口号是最容易出问题的一项。只有一个项目实例时,保留默认端口即可;SMC 里存在多个项目时,两个已启动的项目不能使用相同端口号,如果某个项目的端口号和当前活动项目相同,这个项目就无法启动。恢复模板之前,先看看机器上哪些端口被占了:

# 列出当前所有监听端口,恢复模板前用来避开已被占用的端口 Get-NetTCPConnection -State Listen | Where-Object { $_.LocalPort -ge 1024 } | Sort-Object LocalPort -Unique | Select-Object LocalAddress, LocalPort, OwningProcess # 按 PID 反查占用端口的进程,确认是不是上一轮没停干净的项目 Get-Process -Id (Get-NetTCPConnection -LocalPort 8080 -State Listen).OwningProcess

第一段按端口去重,-ge 1024是排除系统保留端口段,避免输出被一堆 135、445 之类的系统服务淹没。第二段用OwningProcess反查进程名,是判断“端口被谁占”的关键一步:占用者是System说明被系统服务或保留段占了,得换端口;占用者是项目进程,说明旧项目没停,去 SMC 里停掉比改端口更合理。这里没有写死具体端口号,是因为不同版本、不同扩展模块的默认端口并不一致,照着现场 SMC 里显示的默认值来判断最准。

填完点保存,恢复流程开始。恢复时间取决于模板大小,期间不要重复点击,也不要中途关 SMC。完成后进入“项目和系统信息”选项卡看状态,这一眼很关键,下一节细说。

3.3 恢复备份与创建新项目的适用场景

恢复项目备份主要用于两类场景:回滚和迁移。升级前备份、改配置前备份、交付前备份,出了问题用它回到上一个可用状态;换服务器时把项目备份恢复到新机器,比重新配一遍快得多。但备份和版本绑得很紧,用旧版本做出来的备份,在新版本 SMC 里恢复后状态通常是“已过期”,必须先升级再启动,不能跳过升级直接启。

创建新项目适合两种情况:一是项目规模很小,模板里的东西大多用不上;二是需要一套完全干净的基线做对比测试。新建的代价是扩展模块、事件架构、驱动、趋势定义、用户和权限全部要手动配,任何一项漏了都会在运行期才暴露。我一般不推荐在正式站点上用新建,除非确认过模板确实不适用。

三种方式对比下来,判断逻辑可以压成一句话:正式项目优先恢复模板,回滚和迁移用恢复备份,只有做实验或极小规模才新建。这个顺序和手册给的推荐一致,也是现场被反复验证过的。

4. 项目配置与客户端接入:共享、权限、事件处理

项目能启动不等于能用。客户端连不上、事件日志爆库、调试端口冲突,这些问题都出在配置阶段没做完。这一章的三块内容——文件夹共享与安全访问、事件处理行为、扩展模块——在手册里分散在不同小节,实际做的时候建议按“先共享、再事件、后模块”的顺序,因为模块一变往往要重新确认事件架构。

4.1 项目文件夹共享与安全访问权限

客户端要连服务器,第一步是能访问项目文件夹。这不是简单开个共享就行,权限给大了是安全风险,给小了客户端连上来就报读写失败,而且报错信息通常只说“无法访问”,不会告诉你是共享权限还是 NTFS 权限的问题。

共享权限和 NTFS 权限是两层,最终生效的是两者的交集。常见做法是共享层按组粗放授权,NTFS 层做精细化,两层用同一批安全组,避免出现“共享给了但 NTFS 拒了”的排查困境:

# 给项目文件夹建共享,按角色分三档权限 $path = 'D:\GMSProjects\GMSMainProject' New-SmbShare -Name 'GMSMainProject' -Path $path ` -FullAccess 'DOMAIN\CC-Engineers' ` -ChangeAccess 'DOMAIN\CC-Clients' ` -ReadAccess 'DOMAIN\CC-Viewers' Get-SmbShareAccess -Name 'GMSMainProject'

-FullAccess给运维组,用于升级、备份、改配置;-ChangeAccess给客户端操作员组,允许读写运行期文件但不给改权限;-ReadAccess给只读查看角色。反引号是 PowerShell 的续行符,路径里有空格时必须这么写。最后一句Get-SmbShareAccess是回读确认,比在图形界面里点属性可靠。

NTFS 层要把继承关掉再授权,否则上级目录的 Everyone 会把共享层的限制全部绕过去:

# 关闭继承并清空继承来的 ACE,再按组重新授权 icacls $path /inheritance:r icacls $path /grant 'DOMAIN\CC-Engineers:(OI)(CI)F' icacls $path /grant 'DOMAIN\CC-Clients:(OI)(CI)M' icacls $path /grant 'DOMAIN\CC-Viewers:(OI)(CI)RX'

/inheritance:r是移除继承并保留已继承的权限条目副本,/inheritance:r配合后面的重新授权,等于把权限基线重置一遍。(OI)(CI)表示对象继承和容器继承,项目文件夹下面层级很深,不加这两项,子目录会全部没权限。F、M、RX分别是完全控制、修改、读取和执行,对应上面的三档角色。授权完成后用icacls $path再读一遍,确认没有残留的 Everyone 条目。

4.2 事件处理行为与事件架构

手册里“配置项目,以控制事件处理的行为”这句话很短,落地时对应的是事件架构(event schema)的选型。事件架构决定了哪些系统活动、报警、故障会写入 HDB 的事件日志,以及写入的字段结构。模板里已经应用了一套默认架构,如果站点有特殊的审计要求,需要在这里调整。

调整的时机很关键:项目未启动时改,配置直接生效;项目运行中改,部分设置要重启服务才加载,重启又会影响在线客户端。所以事件架构的确认放在实例化之后、激活之前,是成本最低的窗口。判断架构是否合适,看两个指标就够:一是事件日志的增长速度,二是报警追溯时能不能查到需要的字段。前者可以在 HDB 里按天统计行数,后者只能靠和运维方对一遍需求清单。

4.3 扩展模块的添加与顺序约束

扩展模块决定项目支持哪些设备类型和功能集,添加入口在 SMC 里。有一个约束必须记住:扩展模块要在项目未启动状态下添加。项目启动着去加模块,SMC 可能允许你点,但模块注册不完整,表现为设备模板里找不到对应驱动,或者驱动起来了但点位加不进去。

添加顺序上,先加基础通信和图形相关的模块,再加业务类模块。原因是后加的模块可能依赖前面模块建立的视图结构,顺序反了会出现视图里缺分类的情况。每加完一个模块,重启一次 SMC 再继续,比一口气全加完更稳——出了问题能定位到具体是哪个模块引入的。

5. 排查:五个在工程配置阶段反复出现的坑

下面五条都是现场遇到过的,按“现象 → 原因 → 解决”记,顺序大致对应前面章节的操作顺序。每条都给出可执行的确认动作,不建议凭印象猜。

5.1 现象:SMC 扫描网络扫不到任何 SQL Server

原因:三种可能按概率排——SQL Server Browser 服务没启动,命名实例无法被解析;服务器防火墙没放行 SQL 的端口和 Browser 的 UDP 端口;扫描用的账户在网络段上没有访问权限。默认实例加固定端口的情况反而最少出问题。

解决:先在数据库服务器上确认服务状态和端口监听,命令在第 2.1 节已经给过;再在 SMC 所在机器上测连通性:

# 测 SQL 实例端口是否可达,命名实例同时测 Browser 的 UDP 端口 Test-NetConnection -ComputerName 'SQLHOST01' -Port 1433 Test-NetConnection -ComputerName 'SQLHOST01' -Port 1434 -InformationLevel Detailed

Test-NetConnection的-Port参数会做一次 TCP 握手,TcpTestSucceeded为 True 才说明链路和防火墙都通。UDP 端口用-InformationLevel Detailed只是拿来做参考,UDP 探测本身不可靠,Browser 服务到底通不通,最直接的办法还是在 SMC 里手工填主机名\实例名链接一次。扫描只是便利功能,手工链接能过就说明实例本身没问题。

5.2 现象:模板恢复完成后状态是红色“已过期”,点启动没反应

原因:模板或备份是在旧版本上生成的,SMC 当前版本对项目结构有更高要求,状态检查不通过就不允许启动。这是版本升级后最常见的一道坎,和模板本身是否损坏无关。

解决:在 SMC 里选中项目执行升级,升级前先做一次项目备份,升级过程不可回退。升级完成后重新看“项目和系统信息”选项卡,状态变成正常再启动。要注意的是,升级只升项目结构,不升 HDB 里的数据;如果 HDB 也是旧版本建的,升级后建议跑一次趋势查询确认读得出来。反过来,如果状态正常但启动报错,就不要再去点升级,往端口和 HDB 链接方向查。

5.3 现象:第二个项目起不来,日志里提示端口被占用

原因:SMC 里有多个项目时,两个已启动项目不能有相同端口号,端口和当前活动项目冲突的项目无法启动。很多人在恢复模板时直接用了默认端口,第一个项目能跑,第二个就卡住。

解决:先在 SMC 里停掉不用的项目,确认活动项目是哪个(标题栏会显示当前活动项目名);再按 3.2 节给的命令查端口占用,给新项目换一个没被监听的端口。换完保存,重新启动。这里有个顺序细节:先停旧项目再改新项目端口,比反过来成功率高,因为部分版本在项目运行中改端口不会立即生效。

5.4 现象:服务器本机一切正常,客户端连不上

原因:按概率排是项目文件夹共享缺失、NTFS 权限不足、防火墙未放行、客户端与服务端版本不匹配。前三个都能在服务器侧查清,第四个只能对比版本。

解决:按顺序做三步确认。第一步在客户端机器上测端口连通:

# 从客户端侧验证服务端口是否可达,替换为项目实际端口 Test-NetConnection -ComputerName 'CCHOST01' -Port 8080

第二步在服务器上回读共享和 NTFS 权限,用 4.1 节的Get-SmbShareAccess和icacls。第三步在服务器上确认防火墙规则只对专用网段放行,不要图省事开成任意来源。三步都过还是连不上,再去比对客户端和服务端版本,版本不一致导致的连接失败通常伴随明确的版本提示,容易识别。

5.5 现象:HDB 建好了,但趋势曲线查不出数据,或者项目提示 HDB 链接丢失

原因:常见三种——SQL 服务账户被改过,HDB 的登录映射失效;磁盘写满导致数据库进入恢复挂起;有人直接还原了 HDB 覆盖现有库,项目侧链接指向的库名或文件路径变了。

解决:先查数据库状态和磁盘余量,再查链接:

-- 查 HDB 当前状态和恢复模式,RECOVERY_PENDING 说明有文件缺失或权限问题 SELECT name, state_desc, recovery_model_desc, log_reuse_wait_desc FROM sys.databases WHERE name LIKE 'HDB%';

state_desc出现RECOVERY_PENDING基本就是文件路径不可达或服务账户没权限,ONLINE才是正常。log_reuse_wait_desc长期是LOG_BACKUP说明完整恢复模式下没配日志备份,日志会一直涨。确认数据库正常后回到 SMC 重新链接 HDB,链接成功再启动项目。磁盘满这条最容易被忽略,做监控时把 HDB 所在分区单独加一条阈值告警,比事后救火省事得多。

6. 装完怎么验证:三步确认这套工程配置真的跑通了

验证不要只看 SMC 里那个绿点,它只代表进程起来了。我习惯按三步走,每一步都有明确的判断依据。

6.1 状态与活动项目确认

打开 SMC,看两处:项目列表里目标项目的状态是否正常、有没有红色“已过期”;标题栏显示的项目名是不是当前活动项目。多个项目并存时,标题栏和列表显示不一致是很常见的误判来源——你以为在配 A 项目,实际活动的是 B。这一步不通过,后面的验证都没有意义。

6.2 HDB 写入与趋势读取

在系统里人为制造一条可追溯的记录——登录一次、触发一次报警、或者手动改一个会进趋势的点,然后去 HDB 里查:

-- 按时间倒序取最近的事件记录,确认写入链路是通的 SELECT TOP 20 event_time, source_name, message_text FROM dbo.t_event_log ORDER BY event_time DESC;

表名以实际 HDB 结构为准,重点是ORDER BY event_time DESC取到的最近记录时间要贴近刚才操作的时间。差几分钟可以接受,差几小时说明写入有延迟;一条都没有就去查事件架构有没有应用、HDB 链接是否还在。趋势数据同理,取一个刚改过的点,看最新值的时间戳。

6.3 客户端连接与备份还原演练

找一台客户端机器实际登录一次,不要用服务器本机代替。登录后能打开图形、能看到实时值、能查历史趋势,三样都过才算通。最后做一次完整备份,包含项目和历史数据库两部分,然后在一个测试目录里恢复验证——只备份不验证,等于没有备份。

下面这张表是我每次交付前会核对的清单:

检查项通过标准不通过先查
项目状态正常,无“已过期”版本升级
活动项目标题栏与列表一致SMC 激活操作
HDB 状态ONLINE,磁盘余量充足文件路径、服务账户
事件写入最近记录时间贴近操作时间事件架构、HDB 链接
客户端连接图形、实时值、趋势均可读共享、NTFS、防火墙
备份项目与 HDB 成对恢复成功备份完整性与版本一致性

那份 2013 年的手册把流程拆得很清楚,但它不会告诉你端口冲突会卡在第二个项目上,也不会告诉你恢复备份后必须先升级。从那以后我每次做完工程配置,都会强制走一遍这三步验证,尤其是备份还原演练——不演练的备份,真出事时大概率是后悔药里最贵的那种。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进