三、程序功能说明
模块信息
CPU模块信息主要包括CPU的名字、Mac地址、Ip地址、子网掩码以及网关地址等等,在数据类型中的名字为CPUInfo。
由于CPU的相关信息配置好后,这些数据就不会改变,这些信息只会在CPU启动的第一个循环周期读取。
当设备信息读取成功或读取出现故障,CPU启动后的第一个循环的标志位FirstScan(默认值为TRUE)会被复位。若读取出现故障,设备信息的读取需通过引脚i_ManualReadInfo手动读取。
3.2日期信息
CPU日期信息主要包括各种格式的日期和时间,以及基于日期时间变化的对应的脉冲信号,在数据类型中的名字为Date&TimeInfo和NewDate&TimeInfo。
Date&TimeInfo是各种格式的日期信息;
NewDate&TimeInfo是年、月、日、小时、分钟、秒的脉冲信号,即对应的每一个新的日期或时间发生时候,这些变量会保持一个周期,即对应的脉冲信号。
日期和时间以及对应的脉冲信号,都是基于CPU提供的系统指令RD_LOC_T读取并处理而来。
3.3时钟信息
CPU时钟信息主要包括0.5Hz到10Hz的波形信号以及对应的时间脉冲信号,0.5Hz到10Hz信号对应的脉冲时间基数分别为0.05到1.0秒,在数据类型中的名字为ClockInfo和OnePulse。
时钟信息的处理在程序块的输入引脚中已经有对应的说明,详细请见程序块的说明。
3.4运行信息
CPU运行信息主要包括常开信号、常闭信号、CPU启动后的第一个循环以及当前周期的运行时间,在数据类型中的名字为RunInfo。
常开(AlwaysTrue)/常闭信号(AlwaysFalse)在程序中没有处理,保持变量的默认值即可。
CPU启动第一个循环周期信号(FirstScan)在CPU设备信息读取中也有说明,就是在程序的Zui后将firstScan的默认值(TRUE)复位为FALSE,这样改变量为TRUE的时候即CPU启动的第一个循环周期。
当前循环周期分为Int和Real两种数据类型,通过PLC提供的系统指令RUNTIME读取当前循环周期时间,并将其转换为不同的数据类型。
四、功能块的使用
由于数据类型中有CPU的第一个扫描周期信号(FirstScan),该功能块建议放在主循环程序(OB1)末端调用。
放置在Zui后调用,其他程序中必须在第一个启动周期调用的程序就可以通过全局数据块SystemInfo中的变量"SystemInfo".RunInfo.FirstScan来处置。
当然,对于设备程序,也可以在功能块中建立一个静态变量FisrtScan处理,程序和上述类似,将该变量默认值设置为TRUE,在功能块的末端之处将其复位为FLASE,这样就可以通过FirstScan变量处理。
五、功能块的意义
该程序块处理的信息的用处是十分丰富的,这些信息作为整个CPU系统的基本信息,为工控程序中的各种需要提供了便利的处理方式。
CPU模块信息可以直接跟MES系统交换,用于自动表明当前设备系统的身份。当HMI连接多个PLC系统的时候,也可以通过该信息选择对应的PLC操作。
时钟信息可以用于对应的延时处理,默认提供了8种时钟信息及脉冲信号,也可以在输入引脚中设置Zui多32种时钟信息及脉冲信号。
时钟信息还可以用于不同频率的指示需求,现场指示灯以及HMI上人机交互的状态指示。
日期信息和运行信息,只要在程序中有需求,只要将该类信息赋值给对应的变量即可,不需要再行处理。
对于工控编程,不管是否需要上述信息,都可以把FB_SystemInfo当成一个标准功能块放置在主程序末端,结构化、模块化、标准化,便于程序的使用及效率的提高。
六、后续拓展
上述内容在Sicar的标准架构程序中是初始化程序中实现的功能,但由于汽车行业的特殊性,Sicar中的信息繁多且不便于使用。
上述内容既是Sicar中内容的也是面向对象的架构程序中的基础程序块。对公众号中以往内容有过阅读的话,可以发现基于CPG的面向对象的标准架构程序中一直有FB_SystemInfo的程序块。但该程序块当时只对系统时钟和日期处理过,基于Sicar中的内容,现基本形成了一个新版本的可以实用的FB_SystemInfo的程序内容。
以上只是一个基本信息处理,但由于各个行业的特殊性,西门子PLC还提供了更多的诊断信息用于系统信息的读取。
比如如下的GetClockStatus读取CPU时钟状态,可以读取时钟同步等信息。
比如如下的RT_INFO读取运行系统统计,可以指定不同OB的运行时间、读取OB的当前运行时间、Zui长Zui短运行时间等信息。
基于各个行业的特殊性及需要,FB_SystemInfo的内容可以自我定义并形成行业的标准功能块。