废话不多说直接上菜(该程序非常简单,可以供入门的朋友参阅)
实现:能够连接PID块在画面生成对应的阀门块(PCS7的PID块能自动生成但是阀门不能生成)

第一步:编写SCL源文件
//#################################################################################
//用于生成PID阀门显示图标
//#################################################################################
FUNCTION_BLOCK ValveICO
TITLE = 'ValveICO'
{ // List of system attributes
//S7_tasklist:= 'OB80,OB100'; // Block is called if there is a time error and at a warm restart
S7_m_c:= 'true'; // Block can be controlled and monitored
S7_alarm_ui:= '1' // Setting for PCS 7 message dialog ('0'=standard message dialog)
}
AUTHOR: EBC_LW
NAME: ValveICO
VERSION: '0.01'
FAMILY: EBC
KNOW_HOW_PROTECT
VAR_INPUT
Status3_IN:DWORD;//PID状态字3
RbkOut_IN
: STRUCT
VALUE: REAL;
ST : BYTE;
END_STRUCT;//PID阀位反馈
VAL_H:REAL:=90.0;//开到位参数
VAL_L:REAL:=10.0;//关到位参数
//RbkOut_Unit:INT:=1342;//单位
END_VAR
// Block Parameters
VAR_IN_OUT
STATUS_TP:DWORD;// I/O Parameters
END_VAR
VAR_OUTPUT
OUT
{
S7_m_c:='true'
}:
STRUCT
VALUE : REAL;
ST : BYTE;
END_STRUCT;//输出反馈值
STATUS
{
S7_m_c:='true'
}: BYTE;//输出状态字
END_VAR
STATUS_TP:=Status3_IN AND DW#16#10000000;//PID状态字3 中取第28位
IF STATUS_TP=DW#16#10000000 THEN
//阀门故障
STATUS:=3;
ELSE
IF RbkOut_IN.VALUE>=VAL_H THEN
//阀门开到位
STATUS:=1;
ELSE
IF RbkOut_IN.VALUE<=VAL_L THEN
//阀门关到位
STATUS:=2;
ELSE
//阀门在中间位置
STATUS:=0;
END_IF;
END_IF;
END_IF;
OUT:=RbkOut_IN;
END_FUNCTION_BLOCK
第二步 制作图标模板
我是直接在@PCS7TypicalsAPLV8.PDL画面中添加图标模板,也可以自己新建开头为@PCS7Typicals*的画面文件将模板放于其中。
这个是我建立好的模板效果如下

制作步骤 复制一个阀门图标块修改 删除图标框内内容

在其中添加:1. 一个状态显示(用于阀门状态显示内容)2.模拟量显示扩展(用于显示阀门开度)3.静态文本“%”
对状态显示进行组态(组态你要的图标,建议使用EMF格式,请使用VISIO制作)

选中图标块“完成编辑”打开组态对话框(关键!!)
删除原有的连接建立如下连接(拖动到链接下方即可)

点击图标块的属性

修改TYPE的属性入图所示(这个和SCL中的名字有关)斜杠后面的1为编号,这个和一般的块使用一致不在讲述。
修改链接中的变量如图

图标制作就算完成了
第三步 编译SCL块并组态
设置属性

PID
连接
;
PID
连接
完毕编译画面就能自动生成你要的图标块了
图标块的模板PCS78.1 SP1版本
附件.rar
//原创程序请多交流 QQ:275578306