条件和说明的适当缩进控制结构体中的每个指令都必须缩进, 如果单行过长,布尔表达式将在下一行继续。IF语句中的多行条件缩进两个空格,THEN 新的一行中与 IF 是相同的缩进级别。 当IF 条件适用于单行时,可以将 THEN放在同一行的末尾。 在嵌套深度较深的情况下,THEN 指令单独放一行。 单个右括号指示嵌套条件的结束,操作符总是在行的开头。这些规则适用于其他类似控制结构的条件(例如,CASE,FOR,WHILE,REPEAT)。可重用性本章描述了为确保程序元素的重复使用而建立的规则和建议。RU001规则:提供可以仿真的块通过项目属性激活仿真功能。说明: 通过此设置,程序块可以用在仿真环境中。注意:请注意在仿真环境中的专有技术保护会受影响。RU002 规则:完全使用库进行版本控制版本控制必须完全执行。这意味着必须记录对块的任何更改,并且必须维护版本号。 每次更改版本时,都会在适当的位置进行调整,例如,在 LAD块的描述标题中。使用库和块类型时,块版本由 TIA 博途集中管理。 在这种情况下,无需在块属性中手动维护版本。更改历史记录不受影响。将库升级到Zui新的 TIA 博途版本不会更改程序块,不影响库的版本。注意:在将块插入库之前,所有必要的设置,如自动进行编号,专有技术保护,仿真功能(通过项目属性)。一旦块成为库的一部分,上面提到的设置就很难再更改。在软件单元中的“发布”属性可在以后进行调整无需要修改类型。版本号说明及使用第一个发布的版本总是从1.0.0 开始(参见表6-1)。第一个数字为Zui左边的数字。软件版本号中的第三个数字的更改对功能或文档不受影响,例如错误修复。若对库中的功能进行扩展,第二个数字将递增,第三个数字将重置。对于新重大版本,如包含新功能或对以前版本不兼容的更改,增加第一个数字并重置第二个和第三个数字。FC,FB和 PLC 数据类型的类型概念的使用用户不必或可能不会调整的可重用函数、函数块和 PLC数据类型作为类型存储在库中。说明:只有这样,才能充分受益于 TIA 博途的类型概念。RU004规则:只使用局部变量在可重用块中,只能使用局部变量,不允许从 FC 或 FB 内访问全局数据。全局数据可以通过块接口的形参传入。将全局数据传递到 FC 可以用于:• 访问全局 DB 和使用单实例 DB•全局计时器和计数器的使用• 全局常量的使用• 访问 PLC 变量当满足上述要求时,TIA博途会在块标题中以状态“对象满足库一致性”自动表示这一点。 可以很容易地使用此状态来验证是否符合此规则。RU005规则:使用本地符号常量为了封装块,可以使用局部常量。 当需要使用全局常量时,必须通过块接口的形参将它们传递到块中。全局常量应在其自身的 PLC 变量表中定义。注意: 当在块中使用全局常量时,更改其值需要重新编译该块。对于专有技术保护的块,需要知道设置的密码。禁止出现“魔数”当代码中的变量做比较,或被赋值不是编程是完全符号化的,即程序中没有使用ANY 指针等物理地址。说明:由于符号化,这增加了程序的可读性和可维护性。注意: ANY 指针的替代方法是 VARIANT数据类型,也可以是 REF_TO 引用。 数据类型 VARIANT 可以提前检测类型错误并提供符号寻址。(实数/长实数)、TRUE或FALSE时,应为此数值使用符号常量。说明:通过这种方式调整该数值要容易得多,因为它集中在块接口中,而不是代码中的多个位置。RU007建议:独立于硬件编程为了保证不同系统之间的兼容性,建议仅使用与硬件无关的数据类型。全局变量及系统变量的使用不能支持可重用性及硬件独立性。这包括系统提供的定时器和计数器,如S5-Timer。 鼓励使用符合 IEC 标准的类型,例如IEC_Timer,它也可以用于多重实例中。整个用户程序所需要的数据必须存储在全局数据块中。RU008建议:使用模板使用模板可以是所有程序员实现统一的基础。模板提供的函数可以被认为是经过验证的,并且可以显著地减少开发时间。另一个优势是,由于块提供相同的基本功能,统一的块使得更容易使用及改进。例如,参考PLCopen 标准。引用对象(分配)本章介绍了内存管理和访问的规则和建议。AL001规则:使用多重实例而不是单个实例在程序中,zuihao使用多重实例而不是单个实例。说明:使用这种方法,可以将函数块做成封装的形式,在上层结构或全局结构中不需要额外的实例,从而减少了对象的数量。AL002 建议:定义从 0到常数值的数组边界数组边界从 0 开始,以一个符号常量作为数组的上边界结束。• 对于块内部的数组,必须在块接口的本地数据中定义常量•对于全局数据块和 PLC 数据类型中的数组,用作上限的常数必须在 PLC 变量表中定义•常量以及用于访问数组元素的索引的数据类型,从性能方面的原因应使用DINT说明: 数组索引以 0开头有几个好处:(1)某些系统指令和数学运算是基于零开始工作的,例如模函数,通过这种方式,索引可以直接用于此类函数而无需进行任何调整。(2)WinCC(Comfort,Advanced,Professionaland Unified)可以处理脚本中基于零的数组。在数组边界不能以零为基础的情况下,则应将符号常量用于上限和下限。AL003建议:将数组参数声明为数组[*]如果必须将数组作为形参传入,建议将其作为未指定大小的数组传入。可通过系统函数“UPPER_BOUND和“LOWER_BOUND”可以确定大小和限值。AL004 建议:指定所需的字符串长度“String”和“WString”总是保留存储254 个字符所需的内存。 一个“String”Zui多可以包含 254 个字符,一个“WString”Zui多可以包含 16382 个字符。建议使用符号常量将字符串限制在所需要的长度。说明: 此过程可防止系统分配过多的内存。当传入每个形参赋值的字符串时,它还提供了性能优势。安全本章介绍了创建尽可能强壮且安全的程序所需要的规则和建议。SE001规则:验证实际值应验证传入的所有实际值,以避免不受控制和意外的程序执行和状态。如果实际值不可信或无效,则必须向用户提供指示,请参见“DA013规则:通过“status”/“error”报告状态/错误。SE002规则:初始化临时变量块中使用的每个临时变量都必须在首次使用之前进行初始化,直接赋值,运算输出赋值,或使用数据类型中的常量赋值。另请参阅“NF012规则:以对应的格式初始化变量“说明: 由于系统只初始化基本数据类型,剩余其他未定义的值可能导致意外的程序行为。SE003 规则:处理ENO在启动输出 ENO 的帮助下,可以检测运行时错误。以下指令的执行取决于 ENO 的信号状态。说明: EN/ENO机制的使用避免了意外程序的中断。 块状态以 Bool 变量的格式传递。为了提高 PLC 的执行性能,可以取消自动 EN/ENO 机制。这样做的结果是,不能再使用 ENO 值来响应运行时错误,激活以下指令必需手动实现。在任何情况下,对 ENO的赋值都应出现在程序中。 Zui简单的形式是:ENO := TRUE;SE004 规则:有选择地激活 HMI/OPC UA/Web API数据访问默认情况下,应禁用对每个变量的 HMI/OPC UA/Web API 访问,不允许访问FB的静态变量,必须创建用于读或写访问的变量。通常,通过 HMI/OPC UA/Web API 的可访问性必须至少在 PLC数据类型编辑器中激活,以允许访问。 当使用 PLC 数据类型时,必须在块接口中相应地调整对它的访问。SE005规则:评估错误代码如果使用的 FC,FB或系统函数向程序提供错误代码错误,则必须对它们进行评估。用户程序无法处理的错误,则必须向用户提供明确的错误消息,以便定位错误原因。注意:有关“错误处理”主题的信息,请参阅“DA013 规则:通过“status”/“error”返回状态/错误”。SE006规则:用评估逻辑写错误 OB如果 OB组织块用于处理错误,那么它们将完成特定的任务。Zui低要求是在用户程序中评估错误,并报告和处理错误。设计指南/体系架构本章描述程序设计和程序体系架构的适用规则和建议。DA001规则:对项目/库进行结构化和分组将程序拆分成逻辑单元,系统提供了几种不同的方法:• 将相关的程序块合并到一个文件夹/组中•将工艺机械零件组成软件单元• 将程序结构化为逻辑功能单元-FC/FB• 将相关的数据整理成 PLC 数据类型•通过网络(NETWORK)或区域(REGEON)结构化程序注意: SCL 中的区域(REGION)相当于 LAD/FBD中的程序段(NETWORK)。区域(region)名称和网络(network)标题类似,应同样编写。区域提供了几个好处:•所有区域的概述在编辑器的左边• 在概述的帮助下快速浏览代码,并在代码内部链接• 代码片段可折叠•通过概览和代码同步,借助导航快速折叠和展开DA002建议:使用适当的编程语言使用适合编程任务的编程语言。标准块-结构化文本(SCL/ST)标准块的shouxuan编程语言是 SCL。SCL提供了所有编程语言中Zui紧凑的形式和zuihao的可读性,支持程序员的选定某一代码元素,该元素在同一程序块中出现了的所有位置自动高亮显示。调用环境-图形化/面向块(LAD,FBD)如果几个块应该互连,例如在OB 调用环境中,那么编程语言 LAD 或 FBD 是Zui合适的。 在块中包含大部分二进制逻辑判断的情况下,应使用 LAD 或FBD,可以更容易的诊断,并为提供更快的预览。顺序控制-面向流(GRAPH)当涉及顺序控制编程时,GRAPH 是shouxuan语言。使用 GRAPH,可以快速地对顺序步编程,并且可以很容易地跟踪执行。 该系统已经提供了“互锁”和“监控”的功能。DA003规则:设置/评估块属性必须在块属性中激活以下设置:• 自动编号:块(OB,FC,FB,DB,TO)应该在发布之前启用自动分配编号。请注意,组织块的执行取决于其序号/优先级• IEC 检查:为确保符合 IEC 编程,IEC 检查必须 打开。 只有这样才能确保类型兼容和类型安全编程• 优化访问:若想要完全符号化编程得到Zui大性能必须激活对块的优化访问在块属性中,应检查以下属性:• ENO: 请参阅 “SE003 规则:处理ENO”。• 多重实例功能: 如果块内部使用多重实例而不是全局单实例,勾选多重实例能力该块才能正常运行。• 库一致性: 请参阅“RU004 规则:只使用局部变量”DA004 规则:使用 PLC 数据类型PLC 数据类型应用于用户程序的结构化。在本地数据中,当变量作为一个整体传送时,也使用 PLC数据类型。结构体(STRUCT)只在块的本地数据中声明,以更容易理解的方式对变量进行分组,但不能用于数据交换。说明: PLC数据类型的更改将在所有位置自动更新,通过形参简化了多个块之间的数据交换。DA005 规则:只通过形参交换数据如果多个 FB 或 FC中需要数据交换,则只能通过 Input,Output 或 InOut参数进行数据交换。说明:在封装块的意义上,数据与这些可重用的块断开连接,这样解决了可重用块的依赖关系。由于数据是通过形式参数传入的,不需要修改该块。调用者仍然可以控制哪些数据在何处使用。保证了多次访问(可能在程序内的不同地方)情况下的数据一致性。DA006规则:仅从块内访问静态变量函数块的静态数据只能在声明它们的块内使用。说明:通过直接访问实例的静态变量,兼容性无法保证,因为将来的更新会影响到相应的访问。 静态变量的修改对 FB执行的影响无法判断。DA007 建议:形参组当有许多(例如超过十个)参数要传递时,这些参数应被分组到一个 PLC 数据类型中。此参数应声明为 InOut参数,并将作为“引用调用”传递。此类参数的示例是配置数据,实际值,设定点或函数块的诊断数据的输出。请参阅“PE003建议:使用引用传递结构化参数”注意: 在控制变量和状态变量经常变化的情况下,在 LAD/FBD中直接使用这些变量,并将它们声明为基本输入或输出参数可以方便监控。DA008规则:输出参数只写一次每个执行周期只写入一次输出变量和返回值。这应在可能的情况下,在函数块的末端集中进行。不允许读取自己的输出参数或返回值,必须使用临时或静态变量。说明:这样可以确保所有输出值的一致性。