# LIB319 **Repository Path**: zhigangli2020/lib319 ## Basic Information - **Project Name**: LIB319 - **Description**: 基于WinCC OA 3.19版本的轻量低代码SCADA模板库 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 14 - **Forks**: 5 - **Created**: 2023-06-07 - **Last Updated**: 2025-08-08 ## Categories & Tags **Categories**: lowcode **Tags**: None ## README # WinCC OA通用低代码库LIB319(及中文包) # 0. 前言 WinCC OA通用低代码库LIB的目的是可以通过简单的几步工作,实现如下的只有专业监控软件才能具备的功能: ![](source/media/0734ebb72c5245410f8dae50231c7776.png) 当报警发生,右侧导航将能在导航按钮观察到“一级报警”、“二级报警”、“三级报警”不同位置的红色警示点。点击后追寻到报警设备,继续点击弹开设备面板,显示设备详细数据,读、写、报警三个栏是分离的。报警位置可以进行确认。同时,弹窗弹出报警信息,语音播报出来。10s后自动弹窗关闭。 支持被控设备的模型及模型面板 - 点位信息导入(PLC地址、单位、权限、描述、上下限) - 画面拓扑、导航、导航菜单、导航框架的自动生成 - 软件运行环境模板 - 数值设定、操作的二次弹窗 - PLC写数据过程的反读校验 - 操作日志 - 设备面板的历史数据曲线、历史操作记录、简单数据报表 - 实时报警、历史报警、报警条 - 历史事件查询 - 动态趋势、固定趋势配置 - 语音报警、报警弹窗、报警画面 - 样式表 - 支持中英文环境 - 支持后期扩展到冗余、分布式、web客户端等架构 - 支持最新的WinCC OA 3.19特性,如趋势图的动态采样 - 自动历史归档配置 同时,支持数据看板功能,可实现对服务器、交换机网络、历史数据库(influxDB)等运行工况进行监视。 ![](source/media/fc6ef2c274b05386585a6227c93cf74b.png) 图:历史数据库influxDB运行监控 ![](source/media/3565ad7ced214ef96cee403764bc6cd6.png) 图:系统主机(Windows或Linux)进行监控 # 1. 准备 ### 1.1 LIB319库的下载和版本同步 需要具有第三方免费代码托管网站 https://www.gitee.com 账号。请先注册。 不注册的情况,可以拷贝已经下载了的上述的两个zip,但不确保是最新版本。 基础库LIB319的下载同步 新建路径: > C:\\WinCC_OA_Proj\\LIB319 检出LIB319 ![](source/media/checkout.png) 检出后如下图: ![](source/media/checkout_filesystem.png) ### 1.2 中文包CN319的下载和版本同步  新建文件夹: > C:\\WinCC_OA_Proj\\CN319 检出最新版本的CN319 ![](source/media/checkout_cn319.png) ![](source/media/checkout_cn319_filesystem.png) 从文件中,可以看到有README_P011.txt, 说明当前的汉化的版本是基于WinCC OA 3.19 P011 如果与当前的安装的WinCC OA的版本不同,请注意将当前安装和CN319的版本号保持完全一致! 可以用更新到...的功能,更新到某一个特定的版本。 ### 1.3 config文件的配置 `config`文件举例 host文件存储位置是: > [Windows] C:\\windows\\system32\\drivers\\etc\\hosts > [Linux] /etc/hosts 如果没有此文件,需要手工创建。 服务器主机、备机、客户端、其他与WinCC OA之间相互通讯的主机(如远程驱动的主机等)均需要使用hosts文件,集中存储不易记住和识别的IP地址信息。 `hosts` 文件的规范: ``` 127.0.0.1 localhost SVR01 ::1 localhost SVR01 \# 以下为服务器的IP(举例) 192.168.100.219 SVR01 SVR01-1 192.168.101.219 SVR01-2 192.168.100.220 SVR02 SVR02-1 192.168.101.220 SVR02-2 192.168.100.221 Client01 Client01-1 192.168.101.221 Client01-2 ``` 第一行的 `localhost`之后,请追加填写当前的主机的名称。(注,每个主机都不一样,请自行修改)。 冗余网络的情况,请将SVR01当作主访问域名,第一个网卡命名SVR01-1当作别名1,第二个网卡SVR01-2当作别名2. 需要将客户端的IP地址也填入。格式如上的Client01 尽量使用TAB键(制表符,\t),不要使用空格。 ## 2. 新建项目 ### 2.1 新建项目 ![](source/media/92c0d21b3809cca11de95931aabf8d94.png) 勾选`Legacy Standard project` (经典标准项目) ![](source/media/newproject_2.png) > 1. 输入项目名称。如PEX > 1. 按住Ctrl键,多选语言(2 selected) - en_US.utf8 - zh_CN.utf8 > 1. 项目路径(请务必选择固态硬盘所在的磁盘分区!!!): > 如`C:/WinCC_OA_Proj/` > 1. 勾选 Runnable、Use NGA 、Use SQLite ![](source/media/b6391d0f4fbf9ff13d216886f2eb2f2c.png) 选择经典图标模式 ![](source/media/8e21ba95a36f03a26f028a5802adbd5d.png) 不创建root项目管理密码。 注册CN319中文库 ![](source/media/6ea51ecaf53e10c82e2600b56bdbc3e3.png) > 1的位置注册项目 > 2的位置打开路径 > 3的位置确认即可 注册LIB319基础库 ![](source/media/b2d16731b7511787785459ef30bd54f4.png) > 1的位置选择注册项目。 > 2的位置打开文件夹选择按钮,选择基础库LIB319的文件夹。 > 3的位置选择文件夹。Runable应该是灰色。 注册完后的基础库,只有基本素材,不含有数据库,不能当作项目来运行。项目管理器应该看不到。 ### 2.2 集成基础库 将基础库LIB319加入到子项目 ![](source/media/c3002eaab2063167c8b3bb5657f228a1.png) 打开项目管理器, > 1的位置管理项目配置。 > 2的位置配置子项目集成 > 3的位置将CN319,LIB319选择到右侧。 注意:PEX项目的Gedi运行之后,项目管理器应当如下 ![](source/media/de31ce6d808a23b7c5e5462c7990a124.png) 运行项目后,可以在项目管理路径下,发现CN319, LIB319已经被集成当作子库。 项目的`config`文件应该是这样 ![](source/media/75ae6a0e9af66914deef4bdd46a484d1.png) ### 2.3 初始化LIB参数 DP点清理 ![](source/media/aac20305f1310fd05312b02eafe4d55d.png) 进入到Gedi开发环境,展开项目后,找到2的位置。 > 2的位置找到“删除DP.xml”的按钮 其功能为:将执行“清除全部DP” 将清除现有的所有DP。(不清除_为前缀的内部DP)。自动“创建DP” 创建_Ui,_Driver等内部需要的DP。 点击运行画面。执行上面的步骤。 ![](source/media/5c6b41df9ce9994fb87553fe4a00aa86.png) 观察系统自带的点位已经被清空 ### 2.4 创建占位的S7驱动 参数 `-num 3` ![](source/media/161aab4a4b878806d104c71ad39471c6.png) > 1的位置选择添加Manager > 2的位置选择S7 Driver > 3的位置输入 -num 3, 注意有空格 > 4的位置确认 > 5的位置应当看到运行起来状态是绿色的2. 注意: 若是危险品、重大资产的调试操作,应当先建立`-num 3`的simulation driver,不要直接在实际的驱动进行操作! 手工创建占位连接`SIEMENSPLC01` (不可以是其他字串!) ![](source/media/f16635fcf842600ae7812b3d4cf546a9.png) 只是为了占位。不激活。 > 1的位置打开系统管理。 > 2的位置找到S7驱动 > 3的位置创建,输入`SIEMENSPLC01`,*此名称有重要的占位作用,不得起其他的名称。* > 4的位置确认 不要激活驱动,直接点击4,确认即可。 ### 2.5 新建一个PLC连接 新建实际项目中要用的PLC驱动 确保-num 3号驱动是S7 Driver Manager,已经在运行(可以是simulation driver) ![](source/media/148a66df8087ef9aa268eb3c20eba271.png) 新建的某个PLC名称:F1_CUB_1_PEX_PLC01 ![](source/media/8f81cbc2caca87d9218f82d4eae10334.png) > 1的位置找到S7驱动管理 > > 2的位置点击新建,输入PLC名:F1_CUB_1_PEX_PLC01。 > > 3的位置输入隶属的驱动的num号,本例为数字3。 > > 4的位置激活“Set Invalid bit”激活无效位 > > 5的位置如果是冗余PLC,S7-400H则勾选冗余设备(如400H). 如果是单机PLC,不需要勾选。 > > 6的位置输入IP地址。可以是DNS名称或纯IP > > 7的位置选择“Other”。“其他”指的是S7 PLC具有更多的通讯的资源连接数量。 > > 8的位置为冗余的备机PLC进行设置IP地址等参数。 > > 9的位置激活PLC通讯,同时在State可以查看连接状态是否正常。 新建对应的模拟驱动 ![](source/media/0efd42631aaddf71d05e082d7a34d0e4.png) 如上图所示:应当在控制台,在 > 1的位置S7 Driver 具有相同的-num 号`-num 3`。 > > 2的位置同时建立一个`Simulation Driver` > | 必读的重要提示: 导入点位的过程,应当使用`Simulation Driver`,测试和通讯PLC的过程及生产过程,应当使用`S7 Driver`;或者将PLC的激活勾选项设置为禁用。 这是因为导入点位的过程,很可能会将DO, AO等执行指令下发给PLC,导致PLC的设备动作,这是极其危险的,应当不能用真实的S7 Driver,而是替代`Simulation Driver`来实现。`Simulation Driver`将只是用于配置地址信息等数据,不会做出任何与PLC的读写通讯。 | |------| ## 3 导入点位 ### 3.1 导入 LIB.dpl 点表基础模型 将LIB319的`C:\WinCC_OA_Proj\LIB319\dplist\LIB.dpl`用notepad++打开,替换里面的`DUMMY`字段,本例替换为项目名称`PEX`。 ![](source/media/b9c5a70ac023df4a3ca56d0099aff407.png) 然后再导入LIB.dpl, ![](source/media/7b2f5cb6b9148daa9a0011180c18f0d3.png) > 1的位置打开ASCII manager导入工具 > > 2打开按钮,浏览文件。 > > 3的位置,选择库LIB319的dplist文件夹 > > 4选择修改了的LIB.dpl > > 5勾选自动更新DP 类型、导入报警属性。 ### 3.2 拷贝点位模板 拷贝库点位原始模板的文件夹 > LIB319\\data\\dp\\DUMMY\\ 到项目文件夹的对应路径下。 应当有如下例子的文件路径: > C:\\WinCC_OA_Proj\\PEX\\data\\dp\\**PEX**\\F1_CUB_1_**PEX**_PLC01\\01_VFD.txt 将其中文件夹路径、PLC命名、文本文件里面的`DUMMY`全部替换为`PEX`. ![](source/media/e0b7885bef7b3bd13810741be4c8b7ca.png) 项目路径下,如1的位置、 > 2的位置,都把`DUMMY`换成了`PEX` ### 3.3 编辑点位 示例01_VFD.txt存储的是用于某个PEX项目的变频调节器(如变频泵等)模板。 用notepad++打开。 可以复制文本粘贴到Excel编辑。Excel必须在使用前,对全部单元格进行格式化成text纯文本格式。否则将自动进行格式化,再进行粘贴操作,否则会出现一些不可预知的错误。 | 项目 | 描述 | 单位 | 格式 | 量程L | 量程H | 报警死区 | 高高报警限值设定 | 高报警限值设定 | 低报警限值设定 | 低低报警限值设定 | 高高报警使能 | 高报警使能 | 低报警使能 | 低低报警使能 | 仪表下限 | 仪表上限 | 过程值 | 仪表故障 | 高高报警 | 高报警 | 低报警 | 低低报警 | 占位 | |-------------------------|--------------------------------------|------|-------|-------|-------|--------------|------------------|----------------|----------------|------------------|----------------|----------------|----------------|----------------|-------------|-------------|---------------|-----------------|-----------------|-----------------|-----------------|-----------------|------| | 字段1 | | | | | | CMD | CMD | CMD | CMD | CMD | CMD | CMD | CMD | CMD | CMD | CMD | STATE | ERROR | ERROR | ERROR | ERROR | ERROR | 占位 | | 字段2 | | | | | | DEADBAND | HH_SP | H_SP | L_SP | LL_SP | HH_EN | H_EN | L_EN | LL_EN | LOW_SPAN | HIGH_SPAN | VAL_IN | ALM | HH_ALM | H_ALM | L_ALM | LL_ALM | 占位 | | 数据类型 | | | | | | AO | AO | AO | AO | AO | DO | DO | DO | DO | AO | AO | AI | DI | DI | DI | DI | DI | 占位 | | 报警等级 | | | | | | | | | | | | | | | | | | 二级报警 | 一级报警 | 二级报警 | 二级报警 | 一级报警 | 占位 | | 操作权限 | | | | | | 6 | 7 | 7 | 7 | 7 | 6 | 6 | 6 | 6 | 7 | 7 | | | | | | | 占位 | | F1_CUB_1_1_102_XF_TIT01 | CUB_1_1_102_XF_TIT01消防泵房温度检测 | ℃ | %4.2f | 0 | 100 | DB2395.DBD68 | DB2395.DBD72 | DB2395.DBD76 | DB2395.DBD80 | DB2395.DBD84 | DB2395.DBX96.0 | DB2395.DBX96.1 | DB2395.DBX96.2 | DB2395.DBX96.3 | DB2398.DBD8 | DB2398.DBD4 | DB2395.DBD142 | DB2395.DBX114.0 | DB2395.DBX156.0 | DB2395.DBX156.1 | DB2395.DBX156.2 | DB2395.DBX156.3 | 占位 | | F1_CUB_1_CUB_RO_FQIT01 | CUB西南侧纯水流量检测 | m³/h | %4.2f | 0 | 100 | DB1554.DBD68 | DB1554.DBD72 | DB1554.DBD76 | DB1554.DBD80 | DB1554.DBD84 | DB1554.DBX96.0 | DB1554.DBX96.1 | DB1554.DBX96.2 | DB1554.DBX96.3 | DB1557.DBD8 | DB1557.DBD4 | DB1554.DBD142 | DB1554.DBX114.0 | DB1554.DBX156.0 | DB1554.DBX156.1 | DB1554.DBX156.2 | DB1554.DBX156.3 | 占位 | | F1_CUB_1_WT_CW_FQIT01 | CUB市政补水流量检测 | m³/h | %4.2f | 0 | 100 | DB1586.DBD68 | DB1586.DBD72 | DB1586.DBD76 | DB1586.DBD80 | DB1586.DBD84 | DB1586.DBX96.0 | DB1586.DBX96.1 | DB1586.DBX96.2 | DB1586.DBX96.3 | DB1589.DBD8 | DB1589.DBD4 | DB1586.DBD142 | DB1586.DBX114.0 | DB1586.DBX156.0 | DB1586.DBX156.1 | DB1586.DBX156.2 | DB1586.DBX156.3 | 占位 | | F1_CUB_1_WT_CWS_FQIT01 | CUB冷却塔补水泵流量检测 | m³/h | %4.2f | 0 | 100 | DB1546.DBD68 | DB1546.DBD72 | DB1546.DBD76 | DB1546.DBD80 | DB1546.DBD84 | DB1546.DBX96.0 | DB1546.DBX96.1 | DB1546.DBX96.2 | DB1546.DBX96.3 | | | DB1546.DBD142 | DB1546.DBX114.0 | DB1546.DBX156.0 | DB1546.DBX156.1 | DB1546.DBX156.2 | DB1546.DBX156.3 | 占位 | 按上述格式,填写数据,修改地址等。参见`导入dp点的标准格式.xlsx` - 蓝色部分是手工填入的点位汉字描述。 - 橙色部分是手工填入的PLC地址。允许为空。 Excel编辑点位设计规范: - 字段1的规范:只允许 CMD,STATE,ERROR这三种 - 字段2的规范:只允许大写字母与下划线 - 数据类型的规范:只允许AI,AO,DI,DO,WORD,DWORD,PULSE_OPEN,PULSE_CLOSE这几种。 - 报警等级规范:只允许一级报警、二级报警、三级报警这三种 - 操作权限:只允许填写6,7 这两个;6代表一般操作启停控制;7代表参数修改。 - 最后一列必须是“占位”单元格。 - 地址不希望存在、无效、都可用将地址单元格留空。 - 模拟量的格式:%4.2f 代表4个整数,2个小数。 - DP设备点命名只允许有大写,下划线。 - 暂不支持“AI报警”点位的快速导入。需要手工建立。 修改完后,将字段拷贝重新贴回到01.VFD.txt ### 3.4 导入S7点位 ![](source/media/171e7b6db48def6174507b19f3ec6189.png) 在GEDI环境修改基础库LIB319路径下的`panels/tools/导入点位工具.xml`的源码,适配这个01.VFD.txt 打开“自动创建 DP TYPE”按钮,修改main函数之前的几行,如VFD的设备,改完之后如下: ``` c string path = getPath( DATA_REL_PATH ) + "dp/PEX/F1_CUB_1_PEX_PLC01/01_VFD.txt"; // !!! 读取文件路径 string dpType = "FMCS_PEX_VFD"; // !!! 改DP类型的名称 string SubSystemPrefix = "PEX"; // ATOM 点位的前缀,组合后应当为:LIB_ATOM_MEP_AI_S7, LIB_ATOM_MEP_DI_S7 string PLCType= "S7"; // 可能选项: S7, MODBUS, AB,OMRON... ``` 主要是文件路径,DP类型,子系统前缀名称(MEP,CR,UPW,WWT…), PLC类型(S7,MODBUS,AB…) 复制两个按钮出来,进行修改代码。分别执行两个按钮,将会在日志有所提示。 > 2. 自动创建DPTYPE. > 3. 自动创建DP 注意:按钮一旦修改代码完成并导入数据,最好不要删除,以便将来再次复查修改和追踪原因。 ![](source/media/24172d326a3ceb88ffe91cb196ad3157.png) > 1的位置点击右键,编辑类型, > > 2的位置查看结构是否与TXT文本文件定义的结构完全一致。 > > 3的位置检查是否正确引用了ATOM的类型。 ![](source/media/7624604264a2a4a01b40ebd9e3e5f0a1.png) 如果DP TYPE创建正常,则执行 > 4,5。。。自动创建该类型的DP点位。 ![](source/media/563be85ac0d3c77c194e5332ab34ef7f.png) 若提示导入的点位是“OK”,则证明导入的点位、地址和txt文本文件的校验是基本上没有问题的,但也必须要辅助进行人工复查多次检验,进行最后的确认。 ### 3.5 导入Modbus点位 示例表格: > C:\\WinCC_OA_Proj_319\\LIB319\\data\\dp\\DUMMY\\Mod_Plc_1\\06_AI.txt 拷贝到项目路径,示例:`<项目路径>\data\dp\PEX\Mod_Plc_3\06_AI.txt`, 用Notepad++打开,拷贝全部字符,到Excel粘贴。Excel表格在使用前,需将全部单元格格式化为字符,否则地址信息带有.0后缀的会出错。 按前文所述,编辑字段1,字段2,地址表。地址表的格式: `M.3.3.68.0` `M.PLCId.FunctionCode.ReferenceAddress.Offset` PLCId: 在WinCC OA中建立的modbus驱动的ID号。一般一个driver可以带若干个Modbus PLC(`PLCId`), 用不同的PLCId进行区分。 `PLCId`: Modbus PLC的ID号,一般是1开始的数字,在配置Modbus PLC IP地址的界面来获得。 `FunctionCode`:功能码,如3代表读4x0000区的寄存器地址。 `ReferenceAddress`:基准地址。 `Offset`:偏移的bit位,仅对只读的bool量有意义。其他类型都写0 上述地址不得缺失信息,必须包含四个”.”。 将`LIB319/dplist/LIB_MODBUS.dpl`通过ASCII manager导入到系统。 ![](source/media/0a36dd9102aa710209555d6f6a2835bb.png) > 1,2的位置选择LIB_MODBUS.dpl > 3的位置勾选自动更新类型和导入报警属性。 然后观察是否已经导入了ATOM类型的Modbus基础类型点位: ![](source/media/793dd249a5f76863fc10a3ab1681f8b0.png) 然后,编辑完点位清单,打开`LIB319/tools/LIB_DPImportTool_Modbus.xml`,对DPTYPE, DP导入的按钮进行适配。 ![](source/media/0e8aa7873b7d1c173593e770a696b5c0.png) 如上图,DP TYPE按钮的修改,将路径、dpType名称,SubSystemPrefix,PLCType进行匹配。执行后即可得到 FMCS_PEX_AI_MODBUS的类型。继续下一步导入点位。 ![](source/media/a093c4959aac8c701ec3a14f9f526568.png) > 1的位置调整路径。 > > 2的位置调整位PEX对应的dpType > > 3的位置调整PLC的PLCId的序号。 > > 4的位置输入驱动 -num 的号码。通常Modbus从13开始比较好。(1,2预留。3\~10预留给S7 驱动,11,12,是Modbus仿真和测试的驱动号)。 > > 5的位置如果是true,则完全重新建立DP,进行地址覆盖(会丢失历史数据)。如果是false,将不对现有的dp进行覆盖。 ## 4 编辑开发画面对象 ### 4.1 设备建模设计 以这个设备对象FMCS_CR_PUMP为例 点位点表规划: ![](source/media/eaf6b4772bb92012a4b046eb52d7dbca.png) 工程师将点表转换为设备数据模型: ![](source/media/f4dc5148d5d8531a992793e1f2dbc8c2.png) 配置各个点位的参数、属性。 将模型进行实例化。相同的属性,设置为继承自设备模型的配置,无需再次编辑。不同的属性,如地址,配置成可修改的模式,后期进行批量修改。 ![](source/media/73628573ed3920b610e0e529533ff590.png) ![](source/media/e6acaacb9098635cb4cbdc0abac6f08b.png) 上图描述了实例化和自动继承的关系。 ## 4.2 导航制作教程 ### 4.2.1 画面的文件夹命名 画面文件夹/panels路径下,每个子系统应当用不同的文件夹存储画面的路径。 命名规范: ``` <系统名>_SYS ``` 如 `MEP_SYS`、`CR03_SYS` `MEP_SYS`:存放MEP子系统的系统工艺流程图画面 `MEP_M`:存放MEP子系统的设备模版 `MEP_tools`:存放MEP子系统的导点工具 `para` :拓扑模版 目的是保证各个系统包开发画面路径全局绝对唯一。 禁止在MEP_SYS文件夹下存储除了工艺流程图之外的其他文件。 注意: 1. 文件夹就是自动生成的导航的拓扑! 1. 只能在当前项目中的panels文件夹。不支持库的panels文件夹。 1. 只支持*.xml格式的panel文件。( *.pnl格式无法解析 ) ### 4.2.2 修改`PT.xml`拓扑生成工具 将`LIB/panels/PT.xml`文件存储到`<项目>/panels/<系统名>_Tools/PT.xml`,用于项目的拓扑生成工具。 打开画面的scopelib脚本(画面的全局脚本),修改如下的几个变量 ```c // !!!此处填写一级子系统文件夹,如 "MEP_SYS" const string gs_sys_path = "MEP_SYS"; // !!!此处填写二级导航文件夹,如"F1" const string gs_navi_foldername = "F1"; // !!!此处填写一级子系统文件夹下的忽略文件夹名称数组 const dyn_string gs_ignore_foldername = makeDynString("MEP_M", "MEP_PUBLIC"); ``` 如下图: ![](source/导航制作教程/p1.png) MEP_SYS文件夹下有唯一的文件夹:F1,用于代表MEP一期的工艺画面。 ### 4.2.3 一键生成画面拓扑 如下图,点击“LIB_画面拓扑生成器”按钮,将自动生成拓扑导航文件。 ![](source/导航制作教程/p4.png) 同时,会生成一个`导航.xml`的导航文件。 ![](source/导航制作教程/p2.png) 生成过程中,会自动解析(*.xml) 文件中包含的报警点位的dpe,并将画面绑定到含有报警的dpe属性_alert_hdl.._panel中。  ![](source/导航制作教程/p3.png) "清理导航文件"按钮,点击后会自动清理上述自动生成的xml拓扑文件(也会清理 导航.xml)。 ### 4.2.4 部署`导航.xml` 生成的导航.xml文件可直接拖拽到对应模板的 `naviPanel_1920_1080_MEP.pnl` ![](source/导航制作教程/p5.png) ### 4.2.5 拓扑及报警汇总 打开拓扑编辑器,查看报警等级范围是否如下,如果不是,需要进行编辑符合下图。 ![](source/导航制作教程/p6.png) 依次点击"全部树节点“和保存,及检查按钮。 ![](source/导航制作教程/p7.png)  运行进行测试。 ### 4.3 拓扑模板 ![](source/media/72f3b7087978edad2d0edbce3d10031f.png) > 1的位置编辑默认的模板。 > > 2选择LIB(或其他已经定义好的模板) > > 3选择高级配置 > > 4选择手动,1920x1080 > > 5 确认。 ### 4.4 修改模型的REFERENCE 如果前面步骤尚未使用Notepad++批量对PEX_SYS文件夹里面的文件出现MEP的地方进行替换成PEX,可以手动进行如下的步骤: 拷贝库的`LIB319/MEP_SYS/MEP_M`文件夹到项目的PEX_SYS路径下。 ![](source/media/fe3690c40676f103a207989483679ff6.png) 1打开`icon_AI/REFERENCE.xml`, 双机3的位置, ![](source/media/b7f2be9489ce820375ed39694ce7f8d7.png) 修改为这个点位的DPTYPE Name:`FMCS_PEX_AI` ![](source/media/17bdebde67c18131e12f7a29e06e6ed5.png) > 1的位置打开AI.xml > > 2的位置空白位置点击后,找到属性“参考文件”,打开,找到项目路径下的REFERENCE.xml,上个小节已经修改过该文件。 保存。 其他的PUMP,VALVE,FAN, PID, VFD….等所有的设备画面,都照此方法调整和保存。 ### 4.5 编辑开发画面 ![](source/media/79a5134ce78e90f3bd21f3c63f81b667.png) > 1的位置找到AI.xml, 代表模拟量仪表监控的设备对象。 > > 拖放到2的位置。 > > 3观察是否为设定的FMCS_PEX_AI的设备模型 > > 4自动拆分字段,快速找到分组 > > 5选择DP点位。 > > 6确定保存画面 > ### 4.6 导航配置及拓扑自动报警汇总 > ![](source/media/b84b7a61bc23e2cb62870bec76a9acd0.png) > > 1的位置打开CUB_1.xml, > > 2的位置若没有导航按钮,就复制一个。 > > 双机后,3的位置选择被索引的画面节点。 然后: ![](source/media/82e4a4987ca9ce439b77815a23331999.png) 当每次将画面、拓扑文件夹自动创建之后,都需要按步骤生成自动汇总报警 > 1的位置打开拓扑编辑 > > 2的位置点击全部树节点 > > 3,4的位置保存和检查 ### 4.7 自定义模板 #### 4.7.1 拷贝模板LIB 从下面的路径拷贝一组模板文件夹 `LIB319\panels\para\PanelTopology\templates\LIB` 到工程项目的 `<工程项目路径>\panels\para\PanelTopology\templates\<特定模板文件夹>` 如, `C:\WinCC_OA_Proj_319\FMCS_MEP_DEMO\panels\para\PanelTopology\templates\MEP` 修改其中四个画面的文件名为: - basePanel_1920_1080_MEP.pnl - infoPanel_1920_1080_MEP.pnl - menuPanel_1920_1080_MEP.pnl - naviPanel_1920_1080_MEP.pnl 其中,1920_1080 是分辨率,可以修改。修改了之后,需要在GEDI里面调整画面的分辨率,以便于适配到不同的显示器的画面。 MEP是模板文件夹的名,必须要和模板文件夹(MEP)保持一致 #### 4.7.2 修改模板画面 打开 infoPanel_1920_1080_MEP.pnl, ![](source/media/template_alertrow.png) 双击报警条,对报警条的属性 $SCREENTYPE修改配置参数。默认是LIB_AlertRow的筛选过滤条件,需要修改为下文中指定的某个新的筛选条件: #### 4.7.3 筛选条件 打开系统管理,设置,A&E Row/Scrren配置窗口,配置报警条。 ![](source/media/template_alertrow_config.png) > 1 的位置打开A&E ROW/SCREEN 配置报警与事件的筛选配置 > 2 的位置点击“编辑报警条” > 3 的位置可以发现预定义的LIB_AlertRow的配置项目。 > 4 的位置点击新建一个配置报警条。 配置 MEP_AlertRow 在属性页面新建一个新的筛选条件:MEP_propAlertRow 编辑MEP系统所应当具备的筛选的条件,例如:子系统应该是MEP,筛选等级是40-250, 等与MEP这个模板对应的筛选的条件。 保存后,与MEP_AlertRow配套一起保存。 #### 4.7.4 改写模板 将配置好的新的报警条的筛选 MEP_AlertRow写入到LIB_AlertRow的位置。保存。 ### 4.8 导航的汉化 汉化翻译文件: `PanalTopologyChinese_.cat` 如某个子系统PEX, 汉化应当新建一个汉化翻译文件: `PanalTopologyChinese_PEX.cat` 将拓扑用到的文件夹、文件的名称的中文字段填入。 HAVC,空调 F1_CW_EPT_R0_EF,EPT R0房间 F1_CW_R,CW顶楼 运行时候, 将自动显示汉字。 ### 4.9 语音播报的汉化 `PanalTopologyChinese_.cat` 添加 MEP, 一般机电 UPW,纯水系统 来实现可以工程师可以配置的系统名汉化。 注意,系统名不带冒号。 LIB319需更新到v426版本以上。 ## 5 客户端、冗余、分布式系统及工程项目配置 ### 5.1 冗余服务器系统配置 冗余主机、备机文件夹路径、项目文件名通常完全100%的一致。首次部署冗余备机时候可以手动复制项目文件。 **config文件添加:** ``` data = "SVR01-1,SVR01-2$SVR02-1,SVR02-2" event = "SVR01-1,SVR01-2$SVR02-1,SVR02-2" ``` **console控制台添加:** ``` Redundancy Manager Split Mode Manager ``` **influx.conf配置** config/influxdb.conf文件,将回环地址修改为未指定的IP地址: ``` bind-address = "127.0.0.1:8088" 修改为: bind-address = ":8088" ``` ### 5.2 冗余客户机的配置: 前提条件:配置好客户端hosts、计算机名、IP地址,搭建好SVN的库版本管理客户端。 与服务器一样,将CN319,LIB319拷贝或同步到客户端的项目文件夹。不建议合并此两个文件夹。 建议将项目的其他的项目的静态的画面、颜色、图片、程序脚本、建成一个**SVN的库**,使用SVN同步来完成,实现版本管理。 通过拷贝文件方式 将`/source/客户端项目模板`文件夹改名(如 OS1),拷贝到客户端的项目文件夹下。 ![](source/media/ui_client.png) 注册到WinCC OA,并配置CN319,LIB319库,项目库的依赖,注意顺序不要反。 修改\<客户端项目\>/config/config文件,配置 ``` data = "SVR01-1,SVR01-2$SVR02-1,SVR02-2" event = "SVR01-1,SVR01-2$SVR02-1,SVR02-2" ``` 使得能够通过网络连接到服务器。此时即可启动 如果客户机有contrl 脚本用ctrl Manager运行,需要在config文件添加 > [ctrl_2] > connectToRedundantHosts=1 其中ctrl_2代表`-num 2` 的contrl manager。 ### 5.3 分布式系统配置 在子节点(或分布式中央节点)修改项目config文件 ``` [dist] maxSystemsToInitialize = 0 # 0,unlimit maxUpdateMsgCount = 400000 requestIdDelay = 100 distPeer = "SVR01-1,SVR01-2\$SVR02-1,SVR02-2" 3 ``` 修改红色字体适配到实际项目。 在console添加`Distribution Manager` 在`LIB319/SYSTEM_ID.bat`,用记事本打开里面的代码行, > C:\\Siemens\\Automation\\WinCC_OA\\3.19\\bin\\WCCOAtoolSyncTypesSQLite.exe -system 1 MEP -proj "FMCS_MEP_319" 修改上面的变量参数适配到实际项目。 ### 5.4 重新设定报警筛选条件 实时报警、历史报警的筛选 ![](source/media/ca465f0d92f5a408b7f6e010e4246de1.png) > 1的位置打开报警、事件、画面配置与编辑 > > 2的位置选择预配好的,如LIB_OnlineAlert > > 3的位置选择设定 ![](source/media/b26a38b85d0251c794e8fa2170cde248.png) 在弹窗中,找到过滤系统,找到要显示的分布式系统,点击“显示”,激活此系统的显示。或者点击“所有可用的系统”。 ### 5.5 报警条的筛选 ![](source/media/ce024f6020621d26d494215b9be6b30b.png) > 1的位置点击“编辑报警条”,在设定页面与上文相同进行参数设定。 ## 6 版本管理SVN 通常是运行在版本管理服务器上做版本管理服务的软件。 主机、备机、OS客户端、工程师站都与版本管理服务器做版本同步。 地址格式举例:https://SVR01:10443/svn/MEP/ 集成到Gedi 将`/config/config.level` 用文本工具打开,拷贝下面这段 ``` [ui] versionControl = "SVN" \# 默认使用SVN进行版本管理 versionControlDiff = "C:/Program Files/TortoiseSVN/bin/TortoiseUDiff.exe" \# 默认使用SVN进行版本管理,客户端的默认路径 ``` 到项目的config 文件,以便于Gedi可以使用SVN的环境。否则只能在Windows文件夹进行SVN管理。 集成到运行系统 ![](source/media/1aac3d120619fa962b0b93f0a58797c0.png) 使用LIB的库模板,会在下方的工具栏多一个“自动版本更新”的切换开关。 鼠标悬停后,可以弹出窗口显示当前的项目(支持多个层级)的库的版本信息。当切换到自动更新模式,将会在后台以10s为周期自动更新SVN服务器的项目版本到本地硬盘,会将工程路径下的LIB319,CN319,集成整合的若干项目,客户端工程项目等这些文件夹遍历一遍并执行下载同步到本地硬盘的动作。 这样的目的:客户端工程在开启的情况下,会自动下载SVN服务器的版本管理好的画面,实现自动更新的功能。 ## 7 influxDB的备份与恢复 ### 7.1 备份 > C:\\Siemens\\Automation\\WinCC_OA\\3.19\\data\\NGA\\InfluxDB\\sql\>backupInfluxDB.cmd --help ``` Usage: backupInfluxDB.cmd [\ \] \ The commands are: \--database The name of the database (default is "winccoa") \--host Host and port of the database (default is "127.0.0.1:8088") \--max-backup-count Number of backups kept (default is 3) ``` 示例: > C:\\Siemens\\Automation\\WinCC_OA\\3.19\\data\\NGA\\InfluxDB\\sql\>backupInfluxDB.cmd --database winccoa --host localhost:8088 d:\\influxdb_backup > > 2023/07/15 00:33:37 backing up metastore to d:\\influxdb_backup\\20230715-003337\\meta.00 > > 2023/07/15 00:33:38 backing up db=winccoa > > 2023/07/15 00:33:38 backing up db=winccoa rp=ALERT shard=3 to d:\\influxdb_backup\\20230715-003337\\winccoa.ALERT.00003.00 since 0001-01-01T00:00:00Z ### 7.2 恢复 > C:\\Siemens\\Automation\\WinCC_OA\\3.19\\data\\NGA\\InfluxDB\\sql\>restoreInfluxDB.cmd --help ``` Usage: restoreInfluxDb.cmd [\ \] \ \ The commands are: \--database The name of the database (default is "winccoa") \--host Host and port of the database (default is "127.0.0.1:8088") \--backup The backup folder name (e.g. 20211021-133236) inside \ (default is the newest backup) \--password The password for the InfluxDB authentication, no further password prompt is shown (only ASCII characters are allowed in passwords when using this command) \--username The username for the InfluxDB authentication, no further username input prompt is shown (only ASCII characters are allowed in username when using this command) \--silent The user will not be asked to confirm that the current database will be overwritten (This command is a switch and needs no argument) \--timeout The timeout after the influxd restore operation (default is 10 seconds) ``` 举例: > C:\\Siemens\\Automation\\WinCC_OA\\3.19\\data\\NGA\\InfluxDB\\sql\>restoreInfluxDB.cmd FMCS_MEP_DEMO d:\\influxdb_backup > > The database "winccoa" has to be dropped from InfluxDB before restoring from d:\\influxdb_backup. All data in "winccoa" will be lost! > > Do you want to continue [y/n]? y > > Username: etm > > Password: \*\*\*\*\*\*\*(密码etm\#123) > > Starting up influxd -config C:\\WinCC_OA_Proj\\FMCS_MEP_DEMO\\config\\influxdb.conf > > Dropped database "winccoa" from InfluxDB > > Restoring database "winccoa" from backup 20230715-003337 > > 2023/07/15 00:39:30 Restoring shard 44 live from backup 20230714T163337Z.s44.tar.gz > > 2023/07/15 00:39:30 Restoring shard 8 live from backup 20230714T163337Z.s8.tar.gz ### 7.3 数据库界面管理 ![](source/media/a11862f71a93bd646e6dc028bc34708e.png) >1的位置,找到DB,DB_2,DB_R,DB_R_2,四个本机历史库的参数, > >2的位置,填写 > >Database wincc_oa > >backupPath 空(空的意思是默认存储到\/db/wincc_oa/influx/backup) > >backupHostConnectionString 127.0.0.1:8088 > >backupHostConnectionString是influxdb的config文件中全局参数bind-address=":8088"定义的。 中央历史库的参数界面 ![](source/media/ae36021b26a7c461571e05504bd49a71.png) > 在1 的位置,找到中央历史库HIS,HIS_2,HIS_R,HIS_R_2, > > 在2的位置,填写如下参数: > > database winccoa > > backupPath C:/influx/db2/backup > > influxBinPath C:/Siemens/Automation/WinCC_OA/3.17/bin > > dpNameFilterSplitSize 100 > > backupHostConnectionString H5:9088 > > databaseStartupTimeout 2 > > 其中,backupPath指的是将中央历史库的数据,存储到本地硬盘的路径。 > > InfluxBinPath指向本地的influxd程序 > > backupHostConnectionString是中央历史库的连接符。本例中的中央库的influx的conf配置文件中应当为:bind-address=":9088" ### 7.4 历史归档操作界面 ![](source/media/c74bb02659a495c1feb9d3b4f6574597.png) > 1的位置选择本地(或中央)的历史归档组。 > > 2 的位置选择时间段 > > 3 的位置点击备份按钮,即可自动调用备份程序进行备份。 同时,在备份路径下,可以观察自动生成的一系列备份历史库的文件。 ![](source/media/95b7b0523455dbbb07b0a61992ec8bcc.png) 1的位置观察,已经变化为状态“在线和备份” ![](source/media/71afd7ecff8e4d469461d629fe3f4b49.png) 在备份路径下,已经生成了对应的归档组的备份文件。 备注:备份文件夹的内容可以直接手工删除,此时,归档组的状态又会变化为“在线”。 如果点击删除按钮,将会删除中央历史库实时在线的历史库。 ![](source/media/321314b443e2e6d294d4262188e39772.png) 点击offline and backed-up(离线并已经备份),可以对备份的历史再次恢复 ## 8 系统运维与诊断(Windows系统、influxDB数据库) 针对主机(或备机)安装influxDB(8086)历史库运行influxDB的情况。 下载三件套: - https://github.com/influxdata/influxdb/releases - https://github.com/influxdata/telegraf/releases - https://github.com/influxdata/chronograf/releases 例如版本: * chronograf-1.10.1_windows_amd64.zip * influxdb-1.8.10_windows_amd64.zip * telegraf-1.28.2_windows_amd64.zip ### 8.1 安装telegraf [windows] **生成telegraf config配置文件** > telegraf --input-filter system:mem:swap:disk:diskio:nstat:cpu:processes:kernel:filesystem:influxdb --output-filter influxdb config \> telegraf.conf 修改生成的配置文件。 或者直接用附件的配置文件:`telegraf.conf` 测试 > telegraf -config "C:\\software\\telegraf\\telegraf.conf" **安装windows开机服务** > telegraf --service install --config "C:\\software\\telegraf\\telegraf.conf" > > telegraf.exe --service install \#安装服务 > > telegraf.exe --service uninstall \#删除服务 > > telegraf.exe --service start \#启动服务 > > telegraf.exe --service stop **安装 chronograf** > nssm install chronograf 填写必要的参数,注册成功名为`chronograf`的windows服务。 在服务中,找到`chronograf`,启动。 用浏览器`http://:8888` 进行访问 配置chronograf 的 dashboard 配置influxdb的连接 - 1\. 新建数据源,填写LOCAL8086, 代表主机INFLUXDB_SVR,开放端口8086的influxDB,诊断(主)服务器信息。 - 2\. 》仪表盘》导入dashboard》导入json文件》 Windows系统.json,实现对CPU , 内存,网络等基本信息诊断; - 3\. 》仪表盘》导入dashboard》导入json文件》 InfluxDB.json,实现对influxDB运行参数基本信息诊断; 局域网使用`http://:8888` 进行访问。 ## 9 系统运维与诊断(Linux系统、influxDB历史数据库) 针对同一个主机安装两个端口(8086,9086)两台历史库同时运行influxDB的情况。 下载三件套: > > https://github.com/influxdata/influxdb/releases > > https://github.com/influxdata/telegraf/releases > > https://github.com/influxdata/chronograf/releases > 例如版本: - influxdb-1.8.10.x86_64.rpm - telegraf-1.28.1-1.x86_64.rpm - chronograf-1.10.1.x86_64.rpm 安装telegraf ``` [windows] scp telegraf\*.rpm chronograf\*.rpm chronograf\*.rpm root@\:/opt ``` ``` [Linux] su - root # 修改执行权限: chmod 755 /etc/rc.d/rc.local # 安装telegraf dnf install /opt/telegraf\*.rpm # 生成config配置文件 telegraf --input-filter system:mem:swap:disk:diskio:nstat:snmp:cpu:processes:kernel:interrupts:linux_sysctl_fs:filesystem:influxdb --output-filter influxdb config \> telegraf.conf # 修改生成的配置文件。 # 或者直接用附件的配置文件:telegraf.conf # 将配置文件拷贝到/etc/telegraf/telegraf.conf # 生成服务telegraf.service rm -rf /lib/systemd/system/telegraf.service touch /lib/systemd/system/telegraf.service echo [Unit] \>\> /lib/systemd/system/telegraf.service echo Description=Telegraf Service \>\> /lib/systemd/system/telegraf.service echo After=multi-user.target \>\> /lib/systemd/system/telegraf.service echo [Service] \>\> /lib/systemd/system/telegraf.service echo WorkingDirectory=/opt \>\> /lib/systemd/system/telegraf.service echo User=root \>\> /lib/systemd/system/telegraf.service echo Type=idle \>\> /lib/systemd/system/telegraf.service echo ExecStart=/usr/bin/telegraf -config /etc/telegraf/telegraf.conf \>\> /lib/systemd/system/telegraf.service echo Restart=always \>\> /lib/systemd/system/telegraf.service echo [Install] \>\> /lib/systemd/system/telegraf.service echo WantedBy=multi-user.target \>\> /lib/systemd/system/telegraf.service # 启动telegraf systemctl daemon-reload systemctl enable telegraf.service systemctl start telegraf.service systemctl status telegraf.service # 重启 systemctl restart telegraf.service systemctl status telegraf.service # 创建用户与数据库 influx -host localhost -port 8086 -execute "CREATE DATABASE telegraf" influx -host localhost -port 8086 -execute "CREATE USER "telegraf" WITH PASSWORD 'telegraf' WITH ALL PRIVILEGES" influx -host localhost -port 9086 -execute "CREATE DATABASE telegraf" influx -host localhost -port 9086 -execute "CREATE USER "telegraf" WITH PASSWORD 'telegraf' WITH ALL PRIVILEGES" influx -host localhost -port 8086 -execute "CREATE DATABASE winccoa" influx -host localhost -port 8086 -execute "CREATE USER "etm" WITH PASSWORD 'etm\#123' WITH ALL PRIVILEGES" influx -host localhost -port 9086 -execute "CREATE DATABASE winccoa" influx -host localhost -port 9086 -execute "CREATE USER "etm" WITH PASSWORD 'etm\#123' WITH ALL PRIVILEGES" # 安装 chronograf dnf install /opt/chronograf\*.x86_64.rpm chronograf systemctl daemon-reload systemctl enable chronograf.service systemctl start chronograf.service systemctl status chronograf.service # 重启 systemctl restart chronograf.service systemctl status chronograf.service ``` 用浏览器`http://:8888` 进行访问 配置chronograf 的 dashboard 配置influxdb的连接 > 1\. 新建数据源,填写LOCAL8086, 代表主机INFLUXDB_SVR,开放端口8086的influxDB,诊断(主)服务器信息。 > > 2\. 仪表盘导入dashboard》导入json文件》 Linux系统.json,实现对CPU , 内存,网络等基本信息诊断; > > 3\.仪表盘导入dashboard》导入json文件》 InfluxDB.json,实现对influxDB运行参数基本信息诊断; 局域网使用`http://:8888` 进行访问。 ## 10 influxDB Rest API直接访问历史数据库 sql语句格式 ```sql SELECT 语法: SELECT \[,\,\] FROM \.\.\ WHERE \ [(AND\|OR) \ [...]] GROUP BY time(\),[tag_key] [fill(\)] ORDER BY time [asc \| desc] fill() LIMIT number SLIMIT N OFFSET number tz('\') ``` 解释: `SELECT`后面查询显示字段必须至少有一个field key,否则会抛异常ERR: at least 1 non-time field must be queried。还可显示tag keys、time,或者\*显示所有字段。支持类型转换算符::,如:::float `FROM` 返回完全合格测量的数据。通过指定度量的数据库和保留策略来完全限定度量。 `WHERE` 查询条件可为tag keys和time,field keys 也可作为查询条件但是不常用,因为不是索引,查询效率比较低。tag keys条件操作符支持=、!=、\<\>、正则,field keys支持=、!=、\<\>、\>、\>=、\<、\<=、正则。*Tag key 用双引号,字符串用单引号。* `GROUP BY`只能对tag keys和time进行合分组,可以多字段排序,如group by tag1,tag2,time,也可一个\*对所有的tag进行分组聚合,支持time时间分组聚合(前提是对SELECT 使用统计函数进行检索)。time(0 函数支持的单位:"ns" \| "u" \| "µ" \| "ms" \| "s" \| "m" \| "h" \| "d" \| "w"。 `Fill() `如果values结果集中有null的情况,可在查询语句中加fill(0),遇到null用0来填充。fill()中只能填数字和previous(用前值替代)。 `ORDER BY`只能对time进行排序,asc升序,desc降序。 `LIMIT`分页,LIMIT后面的数字是查询显示多少条, `SLIMIT` \ , SLIMIT \返回指定测量值中 \ 系列中的每个点。 `OFFSET`后面数字代表偏移量(从0开始代表第一条),如limit 10 offset 10意思为从第11条开始往后10条。 `tz`('\') 指定时区(仅Linux) 举例: ```sql SELECT original_value_float FROM AI_FAST.AI_FAST WHERE "name" = 'MEP:F1_CUB_1_1_102_XF_TIT01.STATE.VAL_IN.VALUE' AND time \> '2023-07-14T15:00:00Z' AND time\<'2023-07-14T20:00:00Z' ``` python访问历史库 ```js import requests # 定义InfluxDB的主机和端口 influx_host = 'aigowifi' influx_port = '8086' # 定义数据库名称和测量名称 database_name = 'winccoa' measurement_name = 'AI_FAST.AI_FAST' field = 'original_value_float' # 定义用户名和密码 username = 'etm' password = 'etm#123' dpe='MEP:F1_CUB_1_1_102_XF_TIT01.STATE.VAL_IN.VALUE' t0='2023-07-14T15:00:00Z' t1='2023-07-14T20:00:00Z' # 构建查询语句 url = f"http://{influx_host}:{influx_port}/query" query = f"SELECT {field} FROM {measurement_name} WHERE \"name\" = '{dpe}' AND time > '{t0}' AND time<'{t1}'" # 发送HTTP请求并获取响应 response = requests.get(url, params={'q': query, 'db': database_name}, auth=(username, password)) # 检查响应状态码,并解析JSON数据 if response.status_code == 200: data = response.json() # 打印结果 print(data) print(query) else: print(f"Error: {query},{response.text}") ``` 示例程序在`/data/webservice/winccoa.py` curl命令访问 ``` curl -G "localhost:8086/query?db=winccoa" --user etm:etm#123 --data-urlencode "q= SELECT original_value_float FROM AI_FAST.AI_FAST WHERE \"name\" = 'MEP:F1_CUB_1_1_102_XF_TIT01.STATE.VAL_IN.VALUE' AND time > '2023-07-14T15:00:00Z' AND time<'2023-07-14T20:00:00Z' LIMIT 10" ``` Javascript访问 ```html WinCC OA influxDB RestAPI For jQuery ``` 执行结果: ![](source/media/693266606e187aa484d41512b6903453.png) 示例程序在`/data/webservice/index.html` ## 11 工具与相关设置 ### 11.1 报警声音 ![](source/media/85d8a8f8b14e25659f5280b6adb952c2.png) 在运行后的画面点击语音管理。 > 1的位置激活Cortana语音助理(支持LTSC版本Windows). > > 6的位置输入系统名称的汉字。如洁净室系统。 > > 2的位置激活报警弹窗功能。 > > 3的位置选择报警条。 > > 4的位置选择三级报警(40)及以上。 > > 5的位置选择播放的声音文件。 > 应用并关闭。 ### 11.2 不显示内部报警 ![](source/media/b0e2b6b7fbf99eea95ee1878cfe81c2b.png) 去除1,2,3的勾选。保存。 ## 12 开机自启动与配套的项目管理 #### 12.1 修改var.bat 用记事本打开var.bat ```bat set PROJECT_NAME=FMCS_MEP_DEMO set WINCCOA_VERSION=3.19 set WINCCOA_PATH=C:\Siemens\Automation\WinCC_OA\3.19 ``` > `PROJECT_NAME` 注册的工程项目名称。 > `WINCCOA_VERSION` WinCC OA的版本号 > `WINCCOA_PATH` WinCC OA的安装路径。注意3.19 ### 12.2 修改项目的配置 将WinCC OA的console中与UI相关的进程都设置成手动启动模式。 服务启动的模式不支持自动启动UI。 请不要对项目的打开、关闭进行加密保护(因为要设置成自动开机启动) ### 12.3 注册成Windows的服务 用管理员权限运行CMD,cd到当前的路径,执行 `registerService.bat` ``` C:\software\batchRunup>registerService.bat C:\software\batchRunup>call var.bat C:\software\batchRunup>set PROJECT_NAME=FMCS_MEP_DEMO C:\software\batchRunup>set WINCCOA_VERSION=3.19 C:\software\batchRunup>set WINCCOA_PATH=C:\Siemens\Automation\WinCC_OA\3.19 C:\software\batchRunup>C:\Siemens\Automation\WinCC_OA\3.19\bin\WCCILpmon.exe -install -set C:\WinCC_OA_Proj\FMCS_MEP_DEMO\config\config 1 Service "WCCILpmon" registered with configFile "C:\\WinCC_OA_Proj\\FMCS_MEP_DEMO\\config\\config" and autostart set to 1 Service "WCCILpmon" installed. ``` 表示安装完成。 已经设置成开机自启动。但此时Windows的服务: WCCILpmon 是停止的状态。可以手动启动这个服务来启动项目。 ### 12.4 项目管理 由于设置成了开机自启动模式,无法在console里面运行UI相关的进程。 ### 12.5 服务中启动、停止工程 在Windows服务中,启动WCCILPmon的服务项,就可以启动WinCC OA的工程项目。 ### 12.6 通过批处理指令来启动、停止工程 需要用下面的批处理来处理与UI相关的操作,可以拷贝到桌面手动运行,或放到Windows开机启动文件夹路径: `C:\<用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup` ### 12.7 启动人机界面(开发、项目管理、Gedi、UI) 1. console.bat 双击启动控制台 1. gedi_cn.bat 双击运行启动gedi开发环境(中文) 1. gedi_en.bat 双击运行启动gedi开发环境(英文) 1. login_cn.bat 双击启动登录界面(中文) 1. login_en.bat 双击启动登录界面(英文) 1. para_cn.bat 双击启动para点位编辑器(中文) 1. para_en.bat 双击启动para点位编辑器(英文) ### 12.8 移除Windows注册的服务项 先在windows服务项,找到`WCCILpmon`,手动可以进行停止。 或打开console,在界面点击停止项目。然后 用管理员权限运行CMD,cd到当前的路径,执行 `removeService.bat` 删除此Windows服务项 ``` C:\software\batchRunup>removeService.bat C:\software\batchRunup>CALL var.bat C:\software\batchRunup>set PROJECT_NAME=FMCS_MEP_DEMO C:\software\batchRunup>set WINCCOA_VERSION=3.19 C:\software\batchRunup>set WINCCOA_PATH=C:\Siemens\Automation\WinCC_OA\3.19 C:\software\batchRunup>C:\Siemens\Automation\WinCC_OA\3.19\bin\WCCILpmon.exe -remove Service "WCCILpmon" removed. ``` ## 13 冗余通讯服务器(FEP) 功能和部署 ### 13.1 功能描述 实现基于WinCC OA的冗余/负载均衡的FEP(Front End Processor)前置机功能。 兼容LINUX/WINDOWS,兼容中文/英文windows环境 支持在远程运行冗余的驱动、冗余Ctrl等实现动态负载均衡,自动迁移进程。 Console Debug Flag 调试开关:-dbg fepdbg ### 13.2 部署说明 新建远程项目,在config文件配置好data和event及其他与驱动相关的配置。 拷贝fet.ctl 及/libs/fep_lib.ctl 到这个远程项目的主机和备机。 分别在主机、备机进行部署: 第一步:修改fet.ctl 主程序。 ```C global const string FEP_PARTNER_HOSTNAME = "MEP1B"; global const int FEP_PARTNER_PMONPORT = 5000; // 伙伴的PMON端口号 global const int FEP_LOCAL_PMONPORT = 5000; // 本地PMON 的端口号 global const dyn_mapping dmPmonConfig = makeDynMapping( makeMapping("target", "www.winccoa.top", "index", 3, "default", "主机"), makeMapping("target", "www.winccoa.top", "index", 4, "default", "备机") ); ``` `FEP_PARTNER_HOSTNAME` : 在主机的fep.ctl 需填写备机的hostname。在备机的fep.ctl,填写主机的hostname。即对头号。 `FEP_PARTNER_PMONPORT` :对方的pmon端口号 `FEP_LOCAL_PMONPORT`:本地pmon的端口号 `dmPmonConfig`:MAPPING 类型的变量,将驱动对应的index,默认运行的位置,需要ping的target主机复制多份。 第二步: config文件必须具有开放访问的权限,例如: ``` C [pmon] localAddress = "" ip_allow = "-empty list-" ip_deny = "-empty list-" ip_allow = "::1" ip_allow = "127.0.0.1" ip_allow = "localhost" ip_allow = "*" # 默认禁用。开启web服务,远程管理项目状态。 ``` 第三步: 紧挨着pmon进程,新建一个ctrl manager,运行fep.ctl,设置为自动。 ### 13.3 配置举例 主机,备机均配置了modbus 驱动(-num 25),S7驱动(-num 26)两个驱动。其中约定, Modbus 驱动运行在主机,S7驱动默认运行在备机。 配置方法: 两个驱动都设置为手动。 FEP.CTL的Ctrl Manager设置为自动。 主机progs ``` #Manager | Start | SecKill | Restart# | ResetMin | Options WCCILpmon | manual | 30 | 3 | 1 | WCCOActrl | always | 30 | 22 | 2 |FEP.ctl WCCOAui | manual | 30 | 3 | 1 |-m gedi WCCOAmod | manual | 30 | 22 | 2 |-num 25 # 主机 WCCOAs7 | manual | 30 | 2 | 2 |-num 26 # 备机 ``` 主机fep.ctl ```c global const string THIS_HOST = "主机"; // 填写:”主机“, ”备机“。 定义本程序运行的是“主机”还是”备机“, global const string FEP_PARTNER_HOSTNAME = "MEP1B"; global const int FEP_PARTNER_PMONPORT = 5000; // 伙伴的PMON端口号 global const int FEP_LOCAL_PMONPORT = 5000; // 本地PMON 的端口号 global const dyn_mapping dmPmonConfig = makeDynMapping( makeMapping("target", "www.winccoa.top", "index", 3, "default", "主机"), makeMapping("target", "www.winccoa.top", "index", 4, "default", "备机") ); ``` 备机progs ``` #Manager | Start | SecKill | Restart# | ResetMin | Options WCCILpmon | manual | 30 | 3 | 1 | WCCOActrl | always | 30 | 22 | 2 |FEP.ctl WCCOAui | manual | 30 | 3 | 1 |-m gedi WCCOAmod | manual | 30 | 22 | 2 |-num 25 # 主机 WCCOAs7 | manual | 30 | 2 | 2 |-num 26 # 备机 ``` 备机fep.ctl ```c const string THIS_HOST = "备机"; // 填写:”主机“, ”备机“。 定义本程序运行的是“主机”还是”备机“, const string FEP_PARTNER_HOSTNAME = "MEP1A"; const int FEP_PARTNER_PMONPORT = 5000; // 伙伴的PMON端口号 const int FEP_LOCAL_PMONPORT = 5000; // 本地PMON 的端口号 const dyn_mapping dmPmonConfig = makeDynMapping( makeMapping("target", "www.winccoa.top", "index", 3, "default", "主机"), makeMapping("target", "www.winccoa.top", "index", 4, "default", "备机") ); ``` ## 14 一键部署influxDB 冗余历史服务器 ### 14.1 新建程序文件夹 在历史服务器(主机与备机)新建程序文件夹,如:`C:\software\influxDB-1.8.10` ### 14.2 拷贝文件 - 将本文件夹内的全部文件拷贝到历史服务器该文件夹 ### 14.3 拷贝influx程序组 - 拷贝 `C:\Siemens\Automation\WinCC_OA\3.19\bin` 如下 influxDB 数据库核心程序: `influxd.exe` :influxdb服务器(必须) `influx.exe` :influxdb命令行客户端(必须) 到该文件夹 ### 14.4. 配置参数 修改var.bat,指定安装端口和实例的数量。 设置db_path,格式示例:c:\influx, 历史数据库将存储到这个文件夹下 设置influxDB的并发实例数量。 每个分布式系统占用1个实例 设置起始实例,instance_start 1001代表实例开启的实例使用1001端口号。 instance_end 1010代表最后1个实例开启1010端口号。 将自动创建连续的从1001到1010的10个influxDB实例。 端口号设定的范围:[1001,1200], 不支持其他端口号的设定! 历史数据库将开启从1001到1100端口号,注册到Windows服务项100个并发历史库读写访问服务 支持开机自运行 ```batch set db_path=c:\influx set instance_start=1001 set instance_end=1010 ``` ### 14.5 双击install.bat安装 系统将提示是否用管理员权限,点击是。 系统会自动生成一系列的历史数据的文件夹: `c:\influx\db1001` 存储端口1001对应的历史服务器 `c:\influx\db1002` 存储端口1002对应的历史服务器 ... 完成安装。 ### 14.6 在WinCC OA一侧,添加一个NGA的backend,名称为 `HIS` 将`HIS`的类型设置为influx_dual,此时自动生成四个influxdb的归档组: 1. HIS WinCC OA 主机连接到历史服务器主机 1. HIS_2 WinCC OA 主机连接到历史服务器备机 1. HIS_R WinCC OA 备机连接到历史服务器备机 1. HIS_R_2 WinCC OA 备机连接到历史服务器主机 将某个分布式节点syste ID为5对应的influxDB的服务地址填写为: `HIS: http://:1005` `HIS_2: http://:1005` `HIS_R: http://:1005` `HIS_R_2: http://:1005` 数据库填写为: `HIS: winccoa` `HIS_2: winccoa` `HIS_R: winccoa` `HIS_R_2: winccoa` ### 14.7 手动新建几个归档组: `HIS__AI_FAST` 对应于 `_AI_FAST`的中央历史归档并行归档 `HIS__AI_SLOW` 对应于 `_AI_FAST`的中央历史归档并行归档 `HIS__DI_DO_AO` 对应于 `_DI_DO_AO`的中央历史归档并行归档 如: `HIS_MEP_DI_DO_AO`归档组,对应于 `MEP_DI_DO_AO`归档组 ### 14.8 批量设置并行归档 运行 `LIB319\panels\tools\LIB_NGA同时归档到本地和远程.xml` 修改第一行的代码: string subSystemID = "MEP03"; 保存,执行。结束。 ### 14.9 全部删除历史库的方法(包括历史数据文件!) `deinstall.bat`