Excel Code Generator for TIA Portal Openness
Excel Code Generator for TIA Portal Openness 专业教程
本教程基于西门子官方应用示例 109770550,旨在为TIA Portal Openness用户提供一份专业、清晰的Excel代码生成器使用指南。
法律信息 (Legal Information)
应用示例的使用
应用示例通过文本、图形和/或软件模块的形式,展示了多种组件交互的自动化任务解决方案。这些应用示例是西门子股份公司(Siemens AG)和/或其子公司(“Siemens”)提供的一项免费服务。它们不具有约束力,且不保证配置和设备的完整性或功能性。应用示例仅为典型任务提供帮助,不构成客户特定的解决方案。您有责任根据所有适用法规正确、安全地操作产品,包括检查和自定义应用示例以适配您的系统,并确保仅由经过培训的人员使用,以防止财产损失或人身伤害。
免责声明
西门子不承担任何法律责任,包括但不限于应用示例的可用性、完整性和无缺陷性,以及相关信息、配置、性能数据和任何由此造成的损害。此规定不适用于强制性责任的情况,例如根据德国产品责任法,或在故意、重大过失、生命伤害、身体伤害或健康损害、未遵守担保、欺诈性未披露缺陷或违反重大合同义务的情况下。因违反重大合同义务而产生的损害赔偿应限于合同典型的、可预见的损害,除非存在故意或重大过失,或因生命、身体或健康损害而产生责任。
网络安全信息
西门子提供具有工业网络安全功能的产品和解决方案,支持工厂、系统、机器和网络的安全运行。为保护工厂、系统、机器和网络免受网络威胁,必须实施并持续维护一个全面的、最先进的工业网络安全概念。西门子的产品和解决方案仅构成此概念的一部分。客户有责任防止对其工厂、系统、机器和网络的未经授权访问。
1. 引言 (Introduction)
1.1. 功能 (Functionality)
此 TIA Portal Add-In 允许您通过一个Excel文件,在现有的TIA Portal项目中创建程序块 (blocks)、标签表 (tag tables) 和 PLC data types。

图 1-1: 上下文菜单中的Excel Codegenerator Add-In
使用此代码生成器,可以在TIA Portal项目中生成以下内容:
PLC data typesGlobal data blocksPLC tag tablesProgram blocks(程序块) 及其KOP(梯形图) 网络Cyclic organization blocks (OBs)Functions (FCs)Function blocks (FBs)Single-instance data blocksMulti-instances
1.2. 安装 (Installation)
有关如何安装 Add-In 并将其集成到TIA Portal环境中的信息,请参考TIA Portal在线帮助或通用的TIA Add-Ins页面中的“Installation”部分。
1.3. 成功执行的条件 (Conditions for successful execution)
要使用此 Add-In,必须满足以下条件:
- 用户必须在
Openness group(Openness用户组) 中。 - 用户需要管理员权限。
1.4. 兼容性 (Compatibility)
此 Add-In 可用于 TIA Portal V17 及更高版本。
1.5. 系统属性 (System properties)
| 产品 (Produkt) | 版本 (Version) |
|---|---|
| Visual Studio Version | Microsoft Visual Studio Professional 2022 |
| Visual Studio Optionen | Visual C#, .NET Desktop Development |
| .NET Version | Microsoft .NET Framework SDK 4.8.1 |
Add-In 测试环境:
| 产品 (Produkt) | 版本 (Version) |
|---|---|
| Windows Version | Microsoft Windows 10, Version 21H2 |
| TIA Portal Version | TIA Portal V17, Update 3 |
| TIA Portal Version | TIA Portal V18, Update 1 |
| TIA Portal Version | TIA Portal V19 |
| Installierte Software | STEP 7 Professional |
| Installierte Optionen | TIA Portal Openness |
⚠️ 注意:数据丢失风险 (Data loss)
使用此Add-In可能导致数据丢失,并可能导致生产停机。例如,快照 (snapshots)、起始值 (start values,常量除外)、设定值 (setpoints)、Program_Alarm或ProDiag设置的文本将会丢失。在转换时未激活的语言编写的注释也将丢失。用户必须在使用Add-In后定期创建数据备份并检查程序的正确性。
2. 操作指南 (Handling)
2.1. 操作 (Operation)
此 Add-In 有两种启动方式。PLC软件的生成可以从项目导航树中的以下元素触发:
- 单独选择一个
PLC - 单独选择一个程序块文件夹
program block folder - 单独选择一个
PLC tags - 单独选择一个
PLC data type文件夹
注意 (NOTE)
如果在子文件夹上执行Add-In,data blocks和PLC data types不会在此文件夹中生成,而是在系统文件夹中生成。PLC tags,FBs,FCs和OBs会在子文件夹中生成。
2.2. 生成Excel文件 "Database_automatic_Generation.xlsx"
生成PLC软件所需的Excel文件可以通过 Add-in 上下文菜单中的 “Create Database_automatic_Generation.xslx” 条目创建。此文件总是存储在以下路径:
%ProgramData%\Siemens\Automation\Logfiles\ExcelCodeGenerator
2.3. 通过Excel进行配置和参数分配
2.3.1. 一般信息 (General information)
Add-In 需要提供的Excel文件 Database_automatic_Generation.xlsx 来运行。此文件可以存储在任何位置。它也用于参数化代码生成。各个工作表的顺序可以更改,但工作表的名称或列的排序不能更改。此代码生成器可用于将PLC tags, PLC data types, global data blocks 和 program blocks 插入到现有的TIA Portal项目中。
2.3.2. PLC data type
用户自定义的数据类型可以在工作表 PLC_DataTypes 中创建。
新手提示:
PLC Data Type也常被称为UDT(User-Defined Type)。它允许您像打包一样,将多个不同类型的变量(如Bool, Int, Real等)组合成一个自定义的、可重复使用的数据结构。例如,您可以创建一个“电机”UDT,其中包含“启动状态(Bool)”、“运行速度(Int)”、“故障代码(Word)”等变量。
| Name PLC-Datatype | Name | DatatypeName | StartValue | ExternalAccessible | ExternalWritable | ExternalVisible | Setpoint | Comment |
|---|---|---|---|---|---|---|---|---|
| Tank | lvlAct | Dint | 4 | 1 | 1 | 1 | 1 | 高液位指示 |
| volumeHigh | Dint | \ | 1 | 0 | 1 | 0 | 低液位指示 | |
| volumeLow | Dint | \ | 1 | 0 | 1 | 0 |
字段说明:
| 输入字段 (Input field) | 说明 (Instruction) |
|---|---|
Name PLC data type* |
在此列中的一个条目会创建一个新的数据类型,并包含直到此列下一个条目之前的所有元素。 |
Name* |
PLC data type中的变量名称。 |
DatatypeName* |
所有TIA基本数据类型。用户自定义的PLC data types需要用双引号括起来,例如 "dataType"。 |
Start Value |
\ 表示没有起始值。 |
ExternalAccessible* ¹ |
1/0 代表 True/False。如果为 0,则 ExternalWritable 和 ExternalVisible 也必须为 0。 |
ExternalWritable* ¹ |
1/0 代表 True/False。 |
ExternalVisible* ¹ |
1/0 代表 True/False。 |
Setpoint* ² |
1/0 代表 True/False。 |
Comment |
可以为每个条目提供注释。 |
所有标有 * 的字段都是必填项。
¹ 1 为 True。
² 0 为 False。
示例:
上面的表格展示了如何创建一个名为 Tank 的 PLC data type。它由三个 Dint 变量 lvlAct, volumeHigh 和 volumeLow 组成。生成后,此 PLC data type 在TIA Portal中如下图所示:

图 2-3: 在TIA Portal中生成的PLC数据类型
2.3.3. PLC tags
所需的输入/输出和标志可以在 TagTables 工作表中创建。
| Name TagTable | Name | DataTypeName | LogicalAddress | ExternalAccessible | ExternalWritable | ExternalVisible | Comment |
|---|---|---|---|---|---|---|---|
| TagTable_Plant | valveEnable | Bool | %I0.0 | 1 | 0 | 1 | 阀门启用指示 |
| tankEnable | Bool | %I0.1 | 1 | 0 | 1 |
字段说明:
| 输入字段 (Input field) | 说明 (Instruction) |
|---|---|
Name TagTable* |
在此列中的一个条目会创建一个新的标签表,并包含直到此列下一个条目之前的所有元素。 |
Name* |
变量的名称。 |
DataTypeName* |
所有TIA基本数据类型。用户自定义的PLC data types需要用双引号括起来,例如 "dataType"。 |
LogicalAddress* |
TIA Portal中的地址表示法,例如 %I0.0。 |
ExternalAccessible* ¹ |
1/0 代表 True/False。如果为 0,则 ExternalWritable 和 ExternalVisible 也必须为 0。 |
ExternalWritable* ¹ |
1/0 代表 True/False。 |
ExternalVisible* ¹ |
1/0 代表 True/False。 |
Comment |
可以为每个条目提供注释。 |
所有标有 * 的字段都是必填项。
¹ 1 为 True。
示例:
上面的表格创建了一个名为 TagTable_Plant 的变量表。生成后,此 PLC data type 在TIA Portal中如下图所示:

图 2-6: 在TIA Portal中生成的PLC标签表
2.3.4. Data blocks
全局数据块及其内部结构可以在 DataBlocks 工作表中配置。Single instance 和 multi-instance 数据块不需要配置,因为它们在 ProgramBlocks 工作表中命名时会自动生成。
⚠️ 新手注意:全局DB与实例DB的关键区别
- 全局DB (Global DB): 在此
DataBlocks工作表中定义。它们是独立的数据存储区,可以被项目中任何程序块(OB, FC, FB)访问。适合存放全局变量和公共数据。- 实例DB (Instance DB): 不在此处定义。当您在
ProgramBlocks工作表中调用一个FB(功能块) 时,系统会自动为其生成一个关联的背景数据块(实例DB),用于存储该FB的内部状态和参数。
| Name Global DB | Number | Name | DatatypeName | StartValue | ExternalAccessible | ExternalWritable | ExternalVisible | Setpoint | Comment |
|---|---|---|---|---|---|---|---|---|---|
| Db_Tank | 1 | volumeLvl | Int | 0 | 1 | 1 | 1 | 0 | 罐体液位指示 |
| Error | Bool | false | 1 | 1 | 1 | 0 | 罐体错误 |
字段说明:
| 输入字段 (Input field) | 说明 (Instruction) |
|---|---|
Name Global DB* |
在此列中的一个条目会创建一个新的数据块,并包含直到此列下一个条目之前的所有元素。 |
Number |
数据块的编号。 |
Name* |
变量的名称。 |
DatatypeName* |
所有TIA基本数据类型。用户自定义的PLC data types需要用双引号括起来,例如 "dataType"。 |
StartValue |
\ 表示没有起始值。PLC data types不允许有起始值。 |
ExternalAccessible* ¹ |
1/0 代表 True/False。如果为 0,则 ExternalWritable 和 ExternalVisible 也必须为 0。 |
ExternalWritable* ¹ |
1/0 代表 True/False。 |
ExternalVisible* ¹ |
1/0 代表 True/False。 |
Setpoint* ² |
1/0 代表 True/False。 |
Comment |
可以为每个条目提供注释。 |
所有标有 * 的字段都是必填项。
¹ 1 为 True。 ² 0 为 False。
示例:
上面的表格创建了一个名为 Db_Tank 的全局数据块,编号为 DB1,包含两个静态全局变量。生成后,此 PLC data type 在TIA Portal中如下图所示:

图 2-9: 在TIA Portal中生成的Data Block
2.3.5. Program blocks
程序块的调用结构在 ProgramBlocks 工作表中创建。该表从左侧的顶层 Level 1 开始,右侧是下属的 Level 2, 3, 4。顶层必须至少包含一个 OB,否则生成将失败。如果一个块要调用另一个块,必须在前一个块的 Network Number 列中输入一个数字。

图 2-10: 调用结构
💡 新手导读:如何理解调用结构
上图和对应的Excel表格是本工具最核心的部分。让我们把它分解来看,以便理解:
- 起点 (Level 1): 程序总是从
Level 1开始,这里必须是OB(组织块),比如图中的OB1 Main。它相当于程序的主入口。- 调用下一层 (Level 2):
OB1内部的程序按网络号顺序执行。
- 在
Main的Network number= 1 的位置,它调用了Level 2中Network Number= 1 的块,即RCVData [FC2]。- 在
Main的Network number= 2 的位置,它调用了Level 2中Network Number= 2 的块,即Line1 [FB6]。- 层层深入 (Level 3, 4): 这种调用关系可以一直延续下去。
Line1 [FB6](在Level 2) 内部,又按Network number顺序调用了Level 3的块。例如,调用了Tank_FB [FB3]。Tank_FB [FB3](在Level 3) 内部,又可以调用Level 4的块,例如Mtr_FB [FB1]。总结一下:
Level(列): 定义了块的调用层级深度。Level 1是最顶层,Level 2是被Level 1调用的,以此类推。Network Number(行): 将不同Level的块关联起来。Level N中某一行定义的块,会被Level N-1中Network number相同的行所调用。
对于 Function Block (FB),其 single data block 或 multi-instance 的名称必须在 Instance name 列中输入。如果实例应该是 multi-instance,请在名称前加上 # 号。
配置字段说明与示例
1st Level Organisation blocks (第一层:组织块)
字段说明:
| 输入字段 (Input field) | 说明 (Instruction) |
|---|---|
Number* |
Cyclic OB 的编号。 |
Name* |
Cyclic OB 的名称。 |
Network name |
网络的名称。 |
Network Comment |
网络的注释。 |
Network number* |
决定一个块在另一个块的哪个 LAD (梯形图) 网络中被调用。 |
示例:Level 1 表格 (根据图 2-12)
此表示例根据图 2-10,展示了在 Main (OB1) 中定义的网络调用。
| Name | Number | Network Name | Network Comment | Network Number |
|---|---|---|---|---|
| Main | 1 | RCV Data | 1 | |
| Line1 | 2 | |||
| Line2 | 3 | |||
| RCV Data | 4 |
2nd-4th Level program blocks (第二至四层:程序块)
字段说明:
| 输入字段 (Input field) | 说明 (Instruction) |
|---|---|
Type* |
允许 "FC" 或 "FB"。 |
Number¹ |
FB/FC 的编号。 |
Name* |
FB/FC 的名称。 |
Instance name² |
关联实例的名称。对于 multi-instance:# + 实例名称;对于 single-instance data block:仅实例名称。 |
Network name |
网络的名称。 |
Network Comment |
网络的注释。 |
Network number* |
决定一个块在另一个块的哪个 LAD 网络中被调用。 |
所有标有 * 的字段都是必填项。
¹ 如果未输入编号,将自动分配一个。
² 对于 FB 是强制性的。
示例:Level 2 表格 (根据图 2-13)
此表示例展示了被 Level 1 调用的块。
| Network Number (from L1) | Type | Number | Name | Interface ID | Instance Name | Network Name | Network Comment | Network Number (for L3) |
|---|---|---|---|---|---|---|---|---|
| 1 | FC | 2 | RCVData | |||||
| 2 | FB | 6 | Line | 1 | Line1 | Call Tank | first call | 1 |
| Call Tank | second call | 2 | ||||||
| 3 | FB | 6 | Line | 2 | Line2 | Call Tank | first call | 1 |
| Call Tank | second call | 2 | ||||||
| 4 | FC | 2 | RCVData |
示例:Level 3 表格 (根据图 2-14)
此表示例展示了被 Level 2 调用的块。
| Network Number (from L2) | Type | Number | Name | Interface ID | Instance Name | Network Name | Network Comment | Network Number (for L4) |
|---|---|---|---|---|---|---|---|---|
| 1 | FB | 3 | Tank_FB | 3 | #Tank_FB_Instance_2 | |||
| 2 | FB | 3 | Tank_FB | 3 | #Tank_FB_Instance_1 | Call Motor | first call | 1 |
| Call Motor | second call | 2 | ||||||
| Call Valve | first call | 3 | ||||||
| Call Valve | second call | 4 | ||||||
| 5 | ||||||||
| 1 | FB | 3 | Tank_FB | 3 | #Tank_FB_Instance_1 | |||
| 2 | FB | 3 | Tank_FB | 3 | #Tank_FB_Instance_2 |
示例:Level 4 表格 (根据图 2-15)
此表示例展示了被 Level 3 调用的块。
| Network Number (from L3) | Type | Number | Name | Interface ID | Instance Name |
|---|---|---|---|---|---|
| 1 | FB | 1 | Mtr_FB | 4 | #Mtr_FB_Instance_1 |
| 2 | FB | 1 | Mtr_FB | 4 | #Mtr_FB_Instance_2 |
| 3 | FB | 2 | Vlv_FB | 5 | #Vlv_FB_Instance_1 |
| 4 | FB | 2 | Vlv_FB | 5 | #Vlv_FB_Instance_2 |
| 5 | FB | 4 | Msg_Err_FB | 6 | #Msg_Err_FB_Instance_1 |
2.3.6. 接口 (Interface for program blocks)
可以为 FB 和 FC 定义接口;这些接口可以根据需要多次使用。如果在一个块被调用时需要建立连接,可以通过 Connection 指定。
| ID | Interface Type | Name Variable | Datatype | Connection |
|---|---|---|---|---|
| 1 | Input | LineOn | Bool | valveEnable |
| Output | Working | Bool | tankEnable | |
| 2 | Input | LineOn | Bool | tankEnable |
| Output | Working | Bool | valveEnable | |
| 3 | Input | TankEnable | Bool | tankEnable |
| Output | VolumeLvl | Int | Db_Tank.volumeLvl | |
| Input | Error | Bool | Db_Tank.Error | |
| Input | LevelControl | "Tank" | ||
| 4 | Input | MotorOn | Bool | tankEnable |
| 5 | Input | ValveOn | Bool | valveEnable |
| 6 | Output | Error | Bool | Db_Tank.Error |
字段说明:
| 输入字段 (Input field) | 说明 (Instruction) |
|---|---|
ID* |
必须在 Program blocks 工作表的 InterfaceID 下为相应块指定任意数字。 |
Name Variable* |
变量的名称。 |
Data type* |
变量的数据类型。用户自定义的数据类型需用双引号括起来,例如 "Vlv"。 |
Connection |
指定要连接的变量,例如 Db_Tank.Error。 |
所有标有 * 的字段都是必填项。
示例:接线 (Wiring)
上表展示了 Interface 工作表的一个片段。这里创建了六个接口,它们被连接到不同的变量。ID为1和2的接口是相同的,但被连接到不同的变量。
| Block | Call ID | Instance Name | Network Name | Network Comment | Network Number |
|---|---|---|---|---|---|
| FB 6 | 1 | Line1 | Call Tank | first call | 1 |
| Call Tank | second call | 2 | |||
| FB 6 | 2 | Line2 | Call Tank | first call | 1 |
| Call Tank | second call | 2 |
图 2-17: 图 2-13 的片段
块 "Line" 在 OB Main 中被调用了两次,但接线方式不同。

图 2-18: 接线示例
3. 生成 (Generation)
3.1. 常规生成 (General generation)
一旦执行 Add-In,TIA Portal项目将无法操作,直到执行结束。首次在TIA Portal中使用Openness时出现的消息可以用 "Yes, all" 确认。在生成过程中,建议展开项目导航以观察过程。当 "Exclusive access" 结束并且在成功生成后弹出一个窗口时,表示生成结束。

图 2-19: 成功生成后的弹窗
3.2. 通用说明 (General notes)
此 Add-In 不能在 software units 内使用。如果块、PLC data types 和标签表已存在于同一文件夹中,Excel代码生成器将用新文件覆盖它们。
4. 故障排除 (Troubleshooting)
关于TIA Add-Ins的常规故障排除,请参阅通用的 "TIA Add-Ins for TIA Portal" 文档。
消息弹窗 (Message pop-up)
如果在 Add-In 运行时发生错误,会显示一个消息弹窗。可以从消息弹窗中获取特定于错误的修正措施。
撤销更改 (Undo changes)
可以通过选择 "Generate program blocks", "Generate data blocks", "Generate Plc data types" 和 "Generate tag tables" 后点击 "Undo" 按钮来撤销更改。

图 3-1: 在TIA Portal中撤销更改
5. 附录 (Appendix)
5.1. 服务与支持 (Service and support)
- SiePortal: sieportal.siemens.com
- 技术支持: support.industry.siemens.com/cs/my/src
- SITRAIN – Digital Industry Academy: siemens.com/sitrain
5.2. 链接和文献 (Links and literature)
| 编号 | 主题 (Topic) |
|---|---|
| \1\ | Siemens Industry Online Support |
| https://support.industry.siemens.com | |
| \2\ | 本应用示例的条目链接 |
| https://support.industry.siemens.com/cs/ww/en/view/109770550 | |
| \3\ | SIMATIC 使用脚本自动化项目 |
| https://support.industry.siemens.com/cs/ww/en/view/109755218 |
5.3. 变更文档 (Change documentation)
| 版本 (Version) | 日期 (Date) | 修改 (Modification) |
|---|---|---|
| V2.0 | 11/2021 | 首次发布版本 |

浙公网安备 33010602011771号