//编译选项
//Compile options
{
Scl_OverwriteBlocks:= 'y' ;
Scl_CreateObjectCode:= 'y' ;
Scl_OptimizeObjectCode:= 'y' ;
Scl_MonitorArrayLimits:= 'y' ;
Scl_CreateDebugInfo := 'y'
}
FUNCTION_BLOCK MonAn
TITLE='Analog Monitoring'
NAME:MonAn
FAMILY:MyLib
AUTHOR:NC
VERSION:'1.0'
// KNOW_HOW_PROTECT
VAR_INPUT
PV : REAL := 0.0; //Process Value
PV_Unit {S7_m_c:='true'} : INT:=1001 ; // Unit 单位
SimOn: BOOL := FALSE; //Simalation On 仿真打开
SimPV{S7_m_c:='true'} : REAL := 0.0; // Simulation Value 仿真值
PVHR {S7_m_c:='true'} : REAL := 100.0; // high range 过程值量程上限
PVLR {S7_m_c:='true'} : REAL := 0.0; // low range过程值量程下限
HHA {S7_m_c:='true'} : REAL := 95.0; // H limit Alarm 高高报警
HW {S7_m_c:='true'} : REAL := 90.0; // H limit Warning 高警告
LW {S7_m_c:='true'} : REAL := 10.0; // L limit Warning 低警告
LLA {S7_m_c:='true'} : REAL := 5.0; // L Limit Alarm 低低报警
HHA_EN : BOOL := TRUE; // H Alarm Message Enable 高高报警消息使能
HW_EN : BOOL := TRUE; // H Warning Message Enable 高警告消息使能
LW_EN : BOOL := TRUE; // L Warning Message Enable 低警告消息使能
LLA_EN : BOOL := TRUE; // L Alarm Message Enable 低低报警消息使能
Hys {S7_m_c:='true'} : REAL:=0.0; // Hysterese value 滞后
Deadband {S7_m_c:='true'} : REAL:=0.0 ; // Width of Dead band 零点死区
ADCT : REAL:=0.0; // Alarm delay coming time 报警延迟到达时间
WDCT : REAL:=0.0; // Warning delay coming time警告延迟到达时间
ADGT : REAL:=0.0; // Alarm delay going time警告延迟离开时间
WDGT : REAL:=0.0; // Warning delay going time报警延迟离开时间
SAMPLE_T : REAL := 0.2; // Sampletime采样时间
PULSE : BOOL;//脉冲输入
//消息事件ID号
MsgEvID1 {S7_a_type:='alarm_s';S7_server:='alarm_archiv'} :DWORD:=DW#16#0;
MsgEvID2 {S7_a_type:='alarm_s';S7_server:='alarm_archiv'} :DWORD:=DW#16#0;
MsgEvID3 {S7_a_type:='alarm_s';S7_server:='alarm_archiv'} :DWORD:=DW#16#0;
MsgEvID4 {S7_a_type:='alarm_s';S7_server:='alarm_archiv'} :DWORD:=DW#16#0;
SD1 :ANY;
SD2 :ANY;
SD3 :ANY;
SD4 :ANY;
END_VAR
VAR_IN_OUT
OP_dwCmd {S7_m_c:='true'} : DWORD :=16#0; // control word wincc操作命令
END_VAR
VAR_OUTPUT
QdwState{S7_m_c:='true'} : DWORD:=0; // Status WinCC状态字
QabyState AT QdwState : ARRAY [0..3] OF BYTE; // look at state byte-wise
QdwPerm {S7_m_c:='true'}: DWORD :=16#FFFFFFFF; // Permssion word wincc权限字
QabyPerm AT QdwPerm: ARRAY [0..3] OF BYTE;
PV_OUT {S7_m_c:='true';S7_archive:='shortterm'} : REAL := 0.0; // Process Value out
QHHA : BOOL := FALSE; // H Alarm is Active //高高报警到达
QHW : BOOL := FALSE; // H Warning is Active//高警告到达
QLW : BOOL := FALSE; // L Warning is Active//低警告到达
QLLA : BOOL := FALSE; // L Alarm is Active//低低警告到达
QHys : REAL := 0.0; //滞后值
END_VAR
VAR
//操作命令高低字节交换需要,以及AT指令拆分DWORD为32个BOOL变量
OPdwCmdHMI : DWORD := 16#0; // Operator Commands in HMI format
OPabyCmdHMI AT OPdwCmdHMI : ARRAY [0..3] OF BYTE; // look at HMI command byte-wise
OPdwCmdPLC : DWORD := 16#0; // Operator Commands in PLC format
OPabyCmdPLC AT OPdwCmdPLC : ARRAY [0..3] OF BYTE; // look at plc command byte-wise
OPabCmdPLC AT OPdwCmdPLC : ARRAY [0..31] OF BOOL;
//状态字AT指令拆分DWORD为32个BOOL变量
QdwStatePLC : DWORD := 16#0; // State word in PLC format
QabyStatePLC AT QdwStatePLC : ARRAY [0..3] OF BYTE; // look at state byte-wise
QabStatePLC AT QdwStatePLC : ARRAY [0..31] OF BOOL; // look at state bit-wise
//权限字AT指令拆分DWORD为32个BOOL变量
QdwPermPLC : DWORD := 16#FFFFFFFF;
QabyPermPLC AT QdwPermPLC : ARRAY [0..3] OF BYTE; // look at state byte-wise
QabPermPLC AT QdwPermPLC : ARRAY [0..31] OF BOOL; // look at state bit-wise
//警告及报警延时到达或离开计时器
ADCT1 : REAL:= 0.0; // Alarm delay coming time
WDCT1 : REAL:= 0.0; // Warning delay coming time
ADGT1 : REAL:= 0.0; // Alarm delay going time
WDGT1 : REAL:= 0.0; // Warning delay going time
FP_Pulse:BOOL; //脉冲上升沿
FP_1,FP_2,FP_3,FP_4:BOOL;
HHLLA_C,HHLLA_G,HLW_G,HLW_C:BOOL;
// First scan
FstScan : BOOL := TRUE; //首次扫描
RunUpCyc: INT := 5; //运行周期预设值
//Message
MsgEffOld:BYTE:=B#16#0; //消息字节状态存储
MsgEff:BYTE:=B#16#0; //当前消息字节
MsgEff1 AT MsgEff :ARRAY[0..7]OF BOOL;
END_VAR
VAR_TEMP
iRet1,iRet2,iRet3,iRet4:INT;
END_VAR
-
引用 martion 2016/6/3 20:19:16 发表于2楼的内容
-
-
bonbo 发表于 2016/6/5 13:54:39
接口属性介绍:
1. 变量自动上传
PVHR {S7_m_c:='true'} : REAL := 100.0; // high range 过程值量程上限
S7_m_c属性相信大家都知道了,OS编辑的时候被标记该属性接口将会自动上传到wincc
2. 变量自动归档
PV_OUT {S7_m_c:='true';S7_archive:='shortterm'} : REAL := 0.0; // Process Value out
S7_archive:='shortterm'在OS编辑会被自动例进TagLogging的表格里,默认1s的归档速度
3. 报警消息自动生成
MsgEvID1 {S7_a_type:='alarm_s';S7_server:='alarm_archiv'} :DWORD:=DW#16#0;
S7_a_type:='alarm_s';S7_server:='alarm_archiv'其中Alarm_S是报警功能块类型S7-300由于不支持Alarm_8P,所以选择1路报警Alarm_SQ,S7_a_type与S7_server必须配合使用,OS编译后
能将消息上传至AlarmLogging消息列表
引用 bonbo 2016/6/5 13:54:39 发表于3楼的内容
-
-
luck 发表于 2016/6/5 14:44:01
% ,Kpa,m3/h 单位的实现:
单位在模拟量监视块显的比较重要,一个功能块做好后,后面的人尽量无需修改面板和功能块的内容。但是每个项目不同,需要的模拟量单位也不同,怎么办呢?
不可否认,本人是PCS7的爱好者,目前正在学习PCS7,知道PCS7有一个长长的单位与一个int值的对应表,输入int就能在上位机wincc上显示出对应的单位文本。
OK,我复制下来了,并导入了文本库,大概有600多个,一定够用了,不够可以自己创建或修改一个已有的来替代。
文本配有一个唯一的检索号,根据这个检索号使用c脚本就能读出来。
引用 luck 2016/6/5 14:44:01 发表于4楼的内容