技术论坛

 【分享】“高大上”的电机图标

返回主题列表
作者 主题
宁超
至圣

经验值:11565
发帖数:1009
精华帖:39
楼主    2016-06-05 16:29:13
主题:【分享】“高大上”的电机图标 精华帖 

    QabStatePLC[0]  := QSTOP;       // 1=Stop

    QabStatePLC[1]  := QSTARTING;   // 1=Starting

    QabStatePLC[2]  := QRUN;        // 1=Run

    QabStatePLC[3]  := QSTOPPING;   // 1=Stopping

    QabStatePLC[4]  := 0;

    QabStatePLC[5]  := QCMD_ON;     // PLC output 

    QabStatePLC[6]  := 0;

    QabStatePLC[7]  := 0;   

    QabStatePLC[8]  := QMON;        // 1=Feedback Monitoring ON

    QabStatePLC[9]  := QMON_ERR;    // 1=Error Feedback Monitoring

    QabStatePLC[10] := 0;   

    QabStatePLC[11] := 0;   

    QabStatePLC[12] := QMPS;        // 1=Motor Protecting Switch

    QabStatePLC[13] := 0;

    QabStatePLC[14] := 0;

    QabStatePLC[15] := 0;

    QabStatePLC[16] := QMAN_AUT;    // 0=Manual 1=Automatic

    QabStatePLC[17] := QREMOTE;     // 0=Local 1=Remote

    QabStatePLC[18] := SIM_ON;      // 0=Process 1=Simulation 

    QabStatePLC[19] := 0;

    QabStatePLC[20] := QFB_ON;      // Feedback Running

    QabStatePLC[21] := 0;

    QabStatePLC[22] := 0;

    QabStatePLC[23] := 0;

    QabStatePLC[24] := QERR;        // 1=Error

    QabStatePLC[25] := QERR_EXT;    // 1=External Error

    QabStatePLC[26] := QLOCK;       // 1=Motor Locked;

    QabStatePLC[27] := LOCK;        // 1=INTERLOCK

    QabStatePLC[28] := 0;  

    QabStatePLC[29] := 0;  

    QabStatePLC[30] := 0;

    QabStatePLC[31] := 0;

以上是我的电机的状态双字,电机图标显示了电机的运行状态(停止,运行,正在启动,正在停止,故障),电机的操作模式(手动,自动,远程,仿真),下面是成品图标式样。

(1)

(2)

(3)

(4)

(3)停止

(2)/(3)交替闪烁为正在启动

(2)/(1)交替闪烁为正在停止

(1)运行

(4)故障

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

这么“高大上”的电机图标的原材料:

1个IO域,

1个文本,

1个圆圈。

还有一个多边形小箭头!~

然后组成自定义对象,添加属性

- IO添加Output value属性,用于连接PLC上传的电机状态双字

- 文本添加text属性,用于显示“M”“A”“L”“S”手动/自动/就地/仿真

- 圆圈添加背景色,填充色,填充色闪烁,背景色闪烁开颜色,背景色闪烁关颜色,对应的英文为BackColor,FillColor,FlashBackColorOff,BackFlashColorOn


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

然后就是状态显示的脚本

WinCC在状态双字的变化时执行以下脚本:

#include "apdefap.h"

void OnPropertyChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,  double  value)

{

#define  BIT(i,status)  (((DWORD)(double)status&1<<i)!=0)

BOOL show1,show2,show3,show4;

DWORD szStatus;


show4 = FALSE;

show4 = BIT (24,value) ; //ERROR位为Bit24

szStatus = (DWORD)value&0xF; //获取电机的运行状态Bit0~3,1=Stop,2=Starting...


switch(szStatus)

/*颜色代码 灰(808080),浅灰(D3D3D3D3),白(FFFFFF),浅绿(00FF00),绿(008000),红(FF)*/

{

case(1): //Stop

SetPropDouble( lpszPictureName, lpszObjectName, "BackColor",0x808080);

SetPropDouble( lpszPictureName, lpszObjectName, "FillColor",0xFFFFFF);

SetPropBOOL( lpszPictureName, lpszObjectName, "FlashBackColor",0);

break;

case(2)://Starting

SetPropBOOL( lpszPictureName, lpszObjectName, "FlashBackColor",1);

SetPropDouble( lpszPictureName, lpszObjectName, "BackFlashColorOn",0x00FF00);

SetPropDouble( lpszPictureName, lpszObjectName, "BackFlashColorOff",0x808080);


break;

case(4)://Run

SetPropDouble( lpszPictureName, lpszObjectName, "BackColor",0x008000);

SetPropDouble( lpszPictureName, lpszObjectName, "FillColor",0x00FF00);

SetPropBOOL( lpszPictureName, lpszObjectName, "FlashBackColor",0);

break;

case(8)://Stopping

SetPropBOOL( lpszPictureName, lpszObjectName, "FlashBackColor",1);

SetPropDouble( lpszPictureName, lpszObjectName, "BackFlashColorOff",0x008000);

SetPropDouble( lpszPictureName, lpszObjectName, "BackFlashColorOn",0xD3D3D3);

break;

  }


if (show4) //故障,显示红色

{

SetPropDouble( lpszPictureName, lpszObjectName, "BackColor",0xFF);

SetPropDouble( lpszPictureName, lpszObjectName, "FillColor",0xFFFFFF);

SetPropBOOL( lpszPictureName, lpszObjectName, "FlashBackColor",0);

}

      show1 = FALSE; 

      show2 = FALSE;

      show3 = FALSE;


      show1 = BIT (17,value) ; //就地,优先显示

      show2 = BIT (16,value) ; //手自动

      show3 = BIT (18,value) ; //仿真,最优先显示


 if (show3)

             SetPropChar( lpszPictureName, lpszObjectName, "MotorMode","S"); //Simulation   on     

 else 

{

             if (!show1)

             SetPropChar( lpszPictureName, lpszObjectName, "MotorMode","L"); //local mode

            else

           {

                   if (show2)

                       SetPropChar( lpszPictureName, lpszObjectName, "MotorMode","A"); //automatic mode

                  else

                      SetPropChar( lpszPictureName, lpszObjectName, "MotorMode","M"); //manual mode

           }

}

}











您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。