程序是语法和数据的有机组合,数据分为运行时已知的和未知的,分别称之为常量和变量。TIA PORTAL中的常量和变量分为两种,分别称之为全局的和局部的。所谓全局的指的是在PLC Tags文件夹下的变量表中声明的常量和变量以及全局DB中创建的变量。全局的常量和常量可以被该PLC里所有的程序使用。所谓的局部的是指在相应的FB/FC中声明的变量和常量,它们一般只在本FB/FC中使用。当然PLC编程目前还没有像C++、C#等高级语言那么严谨,声明的局部变量也可以在FB/FC外使用,但通常不建议这么做。
所谓的常量是指在程序运行时已确定的、不允许被改变的量,它一般用于储存那些具有固定值的量,比如标准大气压、煤气的热值等。使用常量可以避免在程序中直接使用数值,这可以减少程序出错率,而且一旦在编程中发现需要调整该值就不需要在程序中再一一修改了,只需在声明中修改这个常量的值即可。
在SCL中常量不占用存储区,在定义常量时即可为其赋值,若在编程中不小心试图修改该常量的值,则编译时会报错,如下图所示。

图 3.1.2.1 声明常量
从上图中我们可以看到cBuff是一个定义的实数型常量,初始值是5.0,它并没有被分配任何地址。在程序中,我们试图给这个常量赋值,可以发现编译器提示有错误,cBuff下面出现了红色波浪线。
变量是存储数据的单元,它的值在程序运行中是可以被修改的。声明变量的本质就是向寄存器中申请一块区域用于存储数据。存储单元的大小取决于声明的变量类型,编译器会自动根据声明的变量类型分配相应的存储区,比如一个WORD型的变量占用2各字节,而一个单精度浮点数将占用4各字节。
所有的变量必须先声明才可以使用,使用未声明的变量会导致编译出错。和旧版的SCL不同,TIA的SCL编辑器单独有变量声明栏用于声明变量而不需要在代码编辑区声明,如下面的图3.1.2.2所示。

图 3.1.2.2 变量声明表
在上图的变量声明区,Input、Output和InOut这三种接口类型称之为组件的形参,当此组件被调用时,可以通过传递参数(实参)实现不同的功能,下表列出了这三种不同类型参数的区别。

需要指出的是,Static、Temp和Constant这三种类型的变量是供块内部使用的,它们在使用时会自动带上一个前缀“#”以示区别。如前所述,和高级开发语言不同的是,这些变量无法被保护(在高级语言中,比如可以用关键字“Private”保护),也就是说在外部程序中也可以访问它们,但是一般不建议这样做,因为滥用这种方式容易导致程序质量不可控,影响其稳定性。