西门子SCL编程:SCL编写的DCS电机块

本文介绍了一种使用S7-300 PLC实现的电机控制功能块,该功能块能够通过WinCC界面进行操作,并支持多种运行模式如手动、自动和模拟。此外,还详细介绍了故障监测及反馈机制。

N年之前,用S7-300做一个小型DCS项目,选用wincc为人机界面。项目中电机、泵、风机类比较多,于是下功夫研究编写这个电机块。功能确实强大,在wincc中自动生成图标,拽出来直接用就可。

FUNCTION_BLOCK MOTOR1DIR_300
NAME:MOTOR1DIR
FAMILY:S7-300 BLOCK
AUTHOR:SDZYG2000
//VERSION:'1.01'
//FB620

// Typical-Attribute
{
  S7_tasklist:='OB100';
  S7_m_c:='true';
  S7_blockview:='big'
}

// Parameterattribute
// S7_visible       visible/unvisible   (default='true')
// S7_m_c           WinCC - Tag         (default='false')
// S7_dynamic       testmode            (default='false')
VAR_INPUT
    LOCK        {S7_dynamic:='true'} : BOOL := FALSE; // Interlock
    ERR_EXTERN  {S7_dynamic:='true'} : BOOL := FALSE; // External Error
    LIOP_SEL    {S7_dynamic:='true'} : BOOL := FALSE; // 0=Operator 1=Linking
    L_AUT       {S7_dynamic:='true'} : BOOL := FALSE; // 0=Manual 1=Automatic
    L_REMOTE    {S7_dynamic:='true'} : BOOL := FALSE; // 0=Lokal 1=Remote
    L_SIM       {S7_dynamic:='true'} : BOOL := FALSE; // 0=Normal 1=Simulation
    L_RESET     {S7_dynamic:='true'} : BOOL := FALSE; // 1=Reset Error Peripherie
    AUT_ON      {S7_dynamic:='true'} : BOOL := FALSE; // 1=CMD ON Automatic
    MAN_ON      {S7_dynamic:='true'} : BOOL := FALSE; // 1=CMD ON Manual
    SIM_ON      {S7_dynamic:='true'} : BOOL := FALSE; // 1=CMD ON Simulation
    FB_ON       {S7_dynamic:='true'} : BOOL := FALSE; // Feedback Motor
    L_MON       {S7_dynamic:='true'} : BOOL := TRUE;  // 1=Monitoring ON
    MON_T       {S7_dynamic:='true'; S7_m_c := 'true'} : REAL := 10.0; // Monitoring Time
    MPS         {S7_dynamic:='true'} : BOOL := FALSE; // 1=Motor Protecting Switch ON
    L_FLOW_MON  {S7_dynamic:='true'} : BOOL := FALSE; // 1=Monitoring Flow
    FLOW        {S7_dynamic:='true'} : REAL := 0.0;   // Current Flow
    FLOW_LL     {S7_dynamic:='true'} : REAL := 5.0;   // Low Level Flow
    FLOW_MT     {S7_dynamic:='true'; S7_m_c := 'true'} : REAL := 10.0;   // Monitoring Time Flow

    SAMPLE_T    {S7_sampletime:='true'} : REAL := 0.0; // Sample Time
END_VAR

VAR_IN_OUT
    OP_dwCmd    {S7_dynamic := 'true'; S7_m_c := 'true'} : DWORD :=0;   // control word wincc
END_VAR

VAR_OUTPUT
    QdwState    {S7_dynamic:='true'; S7_m_c:='true'}: DWORD:=0;     // status wincc
    QabyState AT QdwState : ARRAY [0..3] OF BYTE;                   // look at state byte-wise
    
    QwState     {S7_dynamic:='true'}: WORD:= 0; //0=off, 1=starting, 2=on, 3=stopping
    
    QSTOPPING   {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Stopping
    QSTOP       {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Stop
    QSTARTING   {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Starting
    QRUN        {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Run
    
    QCMD_ON     {S7_dynamic:='true'} : BOOL := FALSE;     // 0=Stop 1=Start
   
    QMON        {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Monitoring Feedback
    QMON_ERR    {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Monitoring Error
    QMON_T      {S7_dynamic:='true'; S7_m_c := 'true'} : REAL := 0.0; // Current Monitoring Time Feedback
    QFLOW_MON   {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Monitoring Flow
    QFLOW_MT    {S7_dynamic:='true'; S7_m_c := 'true'} : REAL := 0.0; // Current Monitoring Time Flow
    QFLOW_ERR   {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Error Flow
    
    QMPS        {S7_dynamic:='true'} : BOOL := FALSE;     // 1=Motor Protecting Switch
    QERR        {S7_dynamic:='true'} : BOOL := FALSE;     // 1=ERROR

    QMAN_AUT   {S7_dynamic:='true'} : BOOL := FALSE;     // 0=Hand 1=Au
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值