最近把西门子SCL编程语言从头到尾学了一遍,发现SCL作为PLC中的高级语言,比T型图和语句表使用起来方便多了,特别适合复杂的算法。使用SCL语言编程,小盒子已经完成有关工艺文件的加载和执行、模拟量采集(含滤波及各种报警输出)、以及模拟量输出(多重背景)、以及一些复杂度不是很高的算法(包括:使用平衡法等),对我来说,使用SCL比使用T型图编程效率要高。呵呵……原因有可能是因为本人有C语言的功底+VB编程的功底+VHDL语言功底,所以可能感觉SCL比较好用吧。
先说一下多重背景的优点:
1.多个实例(实例是指FB)只需要一个DB;
2.在为每个实例创建private数据区时,无需任何额外的管理工作;
3.最大嵌套深度为8级;
4.有效的实现"加密"功能,防止恶意窃取你的劳动成果;
需要注意的问题:
1.实例(FB)内不允许直接访问过程信号(如 I Q);
2.FB只能使用静态变量,不能使用全局的DB或者是位存储器;
PS:目前只知道这些,知道别的再往里加吧;
下面给出来一个SCL的例程:
例如:FB602 实现模拟量输出
源码如下:
FUNCTION_BLOCK FB602
// Block Parameters
VAR_INPUT
// Input Parameters
DIGITAL_IN {S7_m_c := ‘true‘} : DWORD; //预设模拟量输出数值
HI_LIM_IN {S7_m_c := ‘true‘} : REAL := 100.0; //模拟量输出范围上限 默认值:100
LO_LIM_IN {S7_m_c := ‘true‘} : REAL := 0.0; //模拟量输出范围下限 默认值:0
BIPOLAR_IN {S7_m_c := ‘true‘} : BOOL := FALSE; //模拟量极性选择 FALSE:单极性\ TRUE:双极性
END_VAR
VAR_IN_OUT
// I/O Parameters
END_VAR
VAR_OUTPUT
// Output Parameters
ANALOG_OUT {S7_m_c := ‘true‘} : WORD; //实际模拟量输出
ERR {S7_m_c := ‘true‘} : BOOL; //FALSE 转换正确 TRUE转换错误
END_VAR
VAR_TEMP
// Temporary Variables
END_VAR
VAR
// Static Variables
END_VAR
// Statement Section
// 模拟量输出代码
// 略…………
;
END_FUNCTION_BLOCK
FB800实现调用FB602实例两次
FUNCTION_BLOCK FB800
// Block Parameters
VAR_INPUT
// Input Parameters
A1 : WORD;
A2 : WORD;
END_VAR
VAR_IN_OUT
// I/O Parameters
END_VAR
VAR_OUTPUT
// Output Parameters
END_VAR
VAR_TEMP
// Temporary Variables
END_VAR
VAR
// Static Variables
SMALLBOX_1 : FB602;
SMALLBOX_2 : FB602;
END_VAR
// Statement Section
SMALLBOX_1(DIGITAL_IN := A1);
SMALLBOX_2(DIGITAL_IN := A2);
;
END_FUNCTION_BLOCK
这样就通过SCL实现了多重背景的方法,有效的节省了DB的使用。目前例程只适用两次FB602,一旦要是有N次,那样就会大大的节省DB使用。
作者:小盒子
时间:2012.03.05
地点:大连
注:本文属小盒子原创,转载请注明出处,谢谢合作!