跳到主要内容

3.1 命名空间介绍

3.1.1 命名空间概念

  • 命名空间是一种把其他语言元素结合到一个组合体的语言元素。一个命名空间中声明的一个语言元素的名字,可以用在其他命名空间中。
  • 命名空间的元素可以在命名空间外部访问,通过前面添加命名空间名的方法。在相同名称空间中这种方式不是必需的,但允许此方法访问。

3.1.2 命名空间意义

  • 命名空间可以避免变量、函数等标识符命名冲突的问题

3.1.3 命名空间的使用

  • 具体的UI使用可参照使用手册

  • SYS为系统库命名空间,默认用户可缺省访问。编译时默认引用SYS。

  • 用户编写STRUCT、GVS、PU需要写入命名空间名称

  • 对PRG变量,PRG名称是子命名空间;完全访问路径是“.命名空间.PRG名称.变量名称”本PRG内访问可直接用变量名称

  • 对GVS变量,完全访问路径是“.命名空间.变量名称”

  • 对STRUCT类型,完全访问路径是“.命名空间.STRUCT名称”

  • 对FB类型,完全访问路径是“.命名空间.FB名称”

  • 对FB实例访问

    • 如果FB实例在GVS声明的,完全访问路径是“.命名空间.FB实例名称”;
    • 如果FB实例在其他FB声明的,该FB实例只能在当前FB实例变量声明的FB中访问,直接使用“FB实例名称”
  • 对FC调用,完全访问路径是“.命名空间.FC名称”

  • 同一命名空间下引用,命名空间可缺省,但是缺省模式下如果相关名称在SYS中存在,编译会出错。这时命名空间不可缺省。

3.1.4 命名空间重构

序号对象标识符仅修改本对象标识符重构所有引用对象
1默认命名空间仅修改默认命名空间名称,不对其他对象重构
2GVS的命名空间名称仅修改GVS命名空间名称重命名本GVS命名空间+重构本GVS名称下所有全局变量的引用(包括:IO映射表,监控表)
3PRG的命名空间名称仅修改PRG的命名空间名称,同步修改为文件名重命名本PRG命名空间+重构本PRG所有引用,含PRG所有变量的引用;包括监控表
4FC的命名空间名称仅修改FC的命名空间名称,同步修改文件名重命名本FC命名空间+重构本FC所有引用(调用)
5FB的命名空间名称仅修改该FB的命名空间名称,同步修改文件名重命名本FB命名空间+重构本FB所有实例声明中的FB类型
6UDT(struct)的命名空间名称仅修改该STRUCT的命名空间名称,同步修改文件名重命名本UDT命名空间+重构本UDT所有实例声明中的UDT类型
注意
  • “.”代表全局命名空间。全局命名空间“.”后面只能跟具体的一级命名空间名称,而不是其他对象标识符(变量名,PU名,UDT名)。换句话说,变量名,PU名,UDT名定义时必须带具体命名空间名称。
  • 一级命名空间名称用户不能用“SYS”,“SYS”为系统库的一级命名空间名称,用户程序单元可缺省访问。系统编译时,会默认引用“SYS”。(“SYS”只是被系统占用的一级命名空间名称,不是关键字。)
  • 同一命名空间下,成员名称不能重复。
  • 变量名,PU名,UDT名如果采用完全访问路径,必须从“.”开始。但是,如果某全局变量的命名空间,是某PU命名空间的子命名空间,该PU中可以用“子命名空间.变量名”访问该全局变量
  • 标识符采用完全限定名访问时,必须以“.”开始
  • 程序单元中的对象名称如果不是“.”开始,系统默认只查该PU当前命名空间及SYS下的成员(含子命名空间)
  • 编译时,程序单元中不是“.”开始的变量的查询,从局部到全局。如果局部和全局都存在优先访问局部变量。