SPC报警记录

Navigation:  C++ > SPC管理接口 >

SPC报警记录

Previous pageReturn to chapter overviewNext page

spc3_query_group_child_tags

spc3_acknowledge_alarms

spc3_query_snapshots

spc3_register_alarm_record_info

spc3_query_tag_records

spc3_query_tags_all_all_records

spc3_query_group_records

spc3_comment_alarms

SPC alarm record

 

 

///*SPC Alarm Record Function

 

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <time.h>

 

void spc_record_callback(HD3_AM_CHANGE nType, const HD3SpcRecord* spcAlarm)

{

 printf("spc alarm occer, nType %d, tag id %d, time %d\n", nType, spcAlarm->nSPCTagID, spcAlarm->tvStartTime.nSec);

}

 

int32 main()

{

 int32 nRet = RD_SUCCESS;

 HD3Connection conn;

 HD3PtTagProp normalTag;

 HD3StatsTagProp statsTag;

 HD3SpcTagProp spcAlarmTagSave;

 int32 nRecNum = 4;

 const int32 SPC_ALARM_TAG_NUM = 4;

 uint32 nSPCTagIDs[SPC_ALARM_TAG_NUM];

 HD3SPCQuery queryCond;

 HD3Record snapshot;

 HD3HANDLE hIter = NULL;

 HD3SpcRecord spcAlarmRec;

 HD3SpcRecord snSPCAlarms[SPC_ALARM_TAG_NUM];

 int32 nErrorCodes[SPC_ALARM_TAG_NUM];

 HD3Time alarmTimes[SPC_ALARM_TAG_NUM];

 int32 i = 0;

 uint32 nSrcTagID = 0;

 uint32 nUCLTagID = 0;

 uint32 nCLTagID = 0;

 uint32 nLCLTagID = 0;

 

 //connect

 strcpy(conn.szAddress, "127.0.0.1");

 conn.nPort = 5673;

 conn.nTimeout = 3;

 nRet = nt3_connect(&conn);

 if (nRet != RD_SUCCESS)

 {

         printf("connect to server failed, error code[%d]!\n", nRet);

         return -1;

 }

 

 //login

 nRet = sc3_login("admin", "admin");

 if (nRet != RD_SUCCESS)

 {

         printf("login failed, error code[%d]!\n", nRet);

         return -1;

 }

 printf("login successful!\n");

 

 // add normal tag

 strcpy(normalTag.szTagName, "szNormalTag");

 normalTag.nTagType = HD3_TAG_TYPE_INT32;

 HD3Mask mask;

 mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

 mask.nExtMask = 0;

 nRet = pt3_add_tag(&normalTag, &mask, "", &nSrcTagID);

 if (nRet != RD_SUCCESS)

 {

         printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

         nt3_disconnect();

         return -1;

 }

 printf("add tag[%s] successful!\n", normalTag.szTagName);

 

 //add statistics tag

 strcpy(statsTag.szTagName, "szStatsTag");

 strcpy(statsTag.szSourceTagName, normalTag.szTagName);

 statsTag.nScanPeriod = 1;

 statsTag.nStatsType = HD3_STATS_TYPE_ARITH_MEAN;

 statsTag.nSampleMode = HD3_STATS_SAMPLE_MODE_INTERVAL;

 statsTag.nSampleInterval = 1;

 statsTag.nSampleStartDate = 1;

 statsTag.bBeginTimeStamp = true;

 statsTag.nSampleType = HD3_STATS_SAMPLE_TYPE_RAW;

 statsTag.nCalcPeriod = 0;

 HD3Mask smask;

 smask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

 smask.nExtMask = HD3M_ST_EXT_PROP_SOURCE_TAG_NAME | HD3M_ST_EXT_PROP_SCAN_PERIOD

         | HD3M_ST_EXT_PROP_STATS_TYPE | HD3M_ST_EXT_PROP_SAMPLE_MODE

         | HD3M_ST_EXT_PROP_SAMPLE_INTERVAL | HD3M_ST_EXT_PROP_SAMPLE_START_DATE

         | HD3M_ST_EXT_PROP_BEGIN_TIMESTAMP | HD3M_ST_EXT_PROP_SAMPLE_TYPE | HD3M_ST_EXT_PROP_CALC_PERIOD;

 

 nRet = st3_add_tag(&statsTag, &smask, "", &statsTag.nTagID);

 if (nRet != RD_SUCCESS)

 {

         printf("add stat tag[%s] failed, error code [%d]!\n", statsTag.szTagName, nRet);

         nt3_disconnect();

         return -1;

 }

 printf("add tags[%s] successful!\n", statsTag.szTagName);

 

 //add one normal tag as spc tag ucl tag

 strcpy(normalTag.szTagName, "szUCLTag");

 normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

 nRet = pt3_add_tag(&normalTag, &mask, "", &nUCLTagID);

 if (nRet != RD_SUCCESS)

 {

         printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

         nt3_disconnect();

         return -1;

 }

 printf("add tag[%s] successful!\n", normalTag.szTagName);

 

 //add one normal tag as spc tag cl tag

 strcpy(normalTag.szTagName, "szCLTag");

 normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

 nRet = pt3_add_tag(&normalTag, &mask, "", &nCLTagID);

 if (nRet != RD_SUCCESS)

 {

         printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

         nt3_disconnect();

         return -1;

 }

 printf("add tag[%s] successful!\n", normalTag.szTagName);

 

 //add one normal tag as spc tag lcl tag

 strcpy(normalTag.szTagName, "szLCLTag");

 normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

 nRet = pt3_add_tag(&normalTag, &mask, "", &nLCLTagID);

 if (nRet != RD_SUCCESS)

 {

         printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

         nt3_disconnect();

         return -1;

 }

 printf("add tag[%s] successful!\n", normalTag.szTagName);

 

 //add spc alarm tag

 for (i = 0; i < SPC_ALARM_TAG_NUM; i ++)

 {

         memset(&spcAlarmTagSave, 0, sizeof(spcAlarmTagSave));

         sprintf(spcAlarmTagSave.szTagName, "szSPCAlarmTag_%d", i);

         strcpy(spcAlarmTagSave.szSourceTagName, "szStatsTag");

         spcAlarmTagSave.nCtrlChartType = HD3_SPC_CTRL_CHART_TYPE_XBAR;

         strcpy(spcAlarmTagSave.szUCLTagName, "szUCLTag");

         strcpy(spcAlarmTagSave.szCLTagName, "szCLTag");

         strcpy(spcAlarmTagSave.szLCLTagName, "szLCLTag");

         spcAlarmTagSave.dUCLDefaultValue = 200;

         spcAlarmTagSave.dCLDefaultVaule = 100;

         spcAlarmTagSave.dLCLDefaultValue = 50;

         spcAlarmTagSave.bJudgeContinuous = true;

         spcAlarmTagSave.bRule1 = true;

         spcAlarmTagSave.nRule1M = 1;

 

         HD3Mask spcmask;

         spcmask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

         spcmask.nExtMask = HD3M_SPC_EXT_PROP_SOURCE_TAG_NAME | HD3M_SPC_EXT_PROP_CTRL_CHART_TYPE

                 | HD3M_SPC_EXT_PROP_RULE;

         nRet = spc3_add_tag(&spcAlarmTagSave, &spcmask, "", &nSPCTagIDs[i]);

         if (nRet != RD_SUCCESS)

         {

                 printf("add spc tag[%s] failed, error code [%d]!\n", spcAlarmTagSave.szTagName, nRet);

                 nt3_disconnect();

                 return -1;

         }

         printf("add spc tag[%s] successful!\n", spcAlarmTagSave.szTagName);

 }

 

 //reg spc alarm callback

 nRet = spc3_register_alarm_record_info(spc_record_callback);

 if (nRet != RD_SUCCESS)

 {

         printf("register spc alarm call back failed, error code [%d]!\n", nRet);

         nt3_disconnect();

         return -1;

 }

 printf("register spc alarm call back successful!\n");

 

 Sleep(30000);

 snapshot.value.fFloat32 = 200;

 snapshot.nSec = 1;

 snapshot.nMsec = 0;

 snapshot.nQuality = 192;

 snapshot.nTagType = HD3_TAG_TYPE_FLOAT32;

 nRet = sn3_save_snapshot(nUCLTagID, &snapshot);

 if (nRet != RD_SUCCESS)

 {

         printf("save snapshot failed, error code [%d]!\n", nRet);

         nt3_disconnect();

         return -1;

 }

 

 snapshot.value.fFloat32 = 50;

 snapshot.nSec = 1;

 snapshot.nMsec = 0;

 snapshot.nQuality = 192;

 snapshot.nTagType = HD3_TAG_TYPE_FLOAT32;

 nRet = sn3_save_snapshot(nLCLTagID, &snapshot);

 if (nRet != RD_SUCCESS)

 {

         printf("save snapshot failed, error code [%d]!\n", nRet);

         nt3_disconnect();

         return -1;

 }

 

 snapshot.value.fFloat32 = 100;

 snapshot.nSec = 1;

 snapshot.nMsec = 0;

 snapshot.nQuality = 192;

 snapshot.nTagType = HD3_TAG_TYPE_FLOAT32;

 nRet = sn3_save_snapshot(nCLTagID, &snapshot);

 if (nRet != RD_SUCCESS)

 {

         printf("save snapshot failed, error code [%d]!\n", nRet);

         nt3_disconnect();

         return -1;

 }

 

 //save snapshots generate spc alarm

 //for (i = 0; i < nRecNum; i++)

 for (i = 0; i < 10; i++)

 {

         snapshot.nSec =  (int32)time(NULL) + i + 1;

         snapshot.nMsec = 0;

         snapshot.nQuality = 192;

         snapshot.value.nInt32 = 300;

         snapshot.nTagType = HD3_TAG_TYPE_INT32;

         nRet = sn3_save_snapshot(nSrcTagID, &snapshot);

         if (nRet != RD_SUCCESS)

         {

                 printf("save snapshot failed, error code [%d]!\n", nRet);

                 nt3_disconnect();

                 return -1;

         }

         printf("save snapshot successful!\n");

         Sleep(10);

 }

 

 Sleep(3000);

 

 //query alarm snapshot

 nRet = spc3_query_snapshots(SPC_ALARM_TAG_NUM, nSPCTagIDs,

         HD3M_ALL, snSPCAlarms, nErrorCodes);

 if (RD_SUCCESS == nRet)

 {

         printf("query alarm snapshots successful!\n");

 }

 else if (EC_HD_API_AM_QUERY_SNAPSHOTS_FAILED == nRet)

 {

         for (i = 0; i < SPC_ALARM_TAG_NUM; i ++)

         {

                 if (nErrorCodes[i] != RD_SUCCESS)

                 {

                         printf("query alarm tag[%d] snapshot failed, error code [%d]!\n", nSPCTagIDs[i], nErrorCodes[i]);

                 }

         }

 }

 else

 {

         printf("query alarm snapshots failed, error code[%d]!\n", nRet);

         nt3_disconnect();

         return -1;

 }

 

 //ack alarms

 for (i = 0; i < nRecNum; i++)

 {

         alarmTimes[i].nSec = snSPCAlarms[i].tvStartTime.nSec;

         alarmTimes[i].nMsec = snSPCAlarms[i].tvStartTime.nMsec;

 }

 

 nRet = spc3_acknowledge_alarms(SPC_ALARM_TAG_NUM, nSPCTagIDs, alarmTimes, &nErrorCodes[0]);

 if (nRet != RD_SUCCESS)

 {

         printf("acknowledge alarms failed, error code [%d]!\n", nRet);

         nt3_disconnect();

         return -1;

 }

 printf("acknowledge alarms successful!\n");

 

 //comment alarms

 nRet = spc3_comment_alarms(SPC_ALARM_TAG_NUM, nSPCTagIDs, alarmTimes, "this is a comment", &nErrorCodes[0]);

 if (nRet != RD_SUCCESS)

 {

         printf("comment alarms failed, error code [%d]!\n", nRet);

         nt3_disconnect();

         return -1;

 }

 printf("comment alarms successful!\n");

 

 //query tag alarm records

 queryCond.tvStart.nSec = 1;

 queryCond.tvStart.nMsec = 0;

 

 queryCond.tvEnd.nMsec =0;

 queryCond.tvEnd.nSec =100;

 

 queryCond.nAckMask = HD3M_AM_REC_ACK_STATE_NO | HD3M_AM_REC_ACK_STATE_YES;

 queryCond.nRestoreMask = HD3M_AM_REC_RESTORE_STATE_NO | HD3M_AM_REC_RESTORE_STATE_YES;

 

 nRet = spc3_query_tag_records(nSPCTagIDs[0], &queryCond, HD3M_ALL, &hIter);

 while (true)

 {

         nRet = ut3_get_item_step(hIter, &spcAlarmRec);

         if (RD_SUCCESS == nRet)

         {

                 printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", spcAlarmRec.nSPCTagID,

                         spcAlarmRec.tvStartTime.nSec, spcAlarmRec.tvStartTime.nMsec);

         }

         else if (EC_HD_API_QUERY_END == nRet)

         {

                 printf("query tags records complete\n");

                 nRet = RD_SUCCESS;

                 break;

         }

         else

         {

                 printf("query tags all records failed, error code [%d]\n", nRet);

         }

 }

 ut3_free_handle(hIter);

 

 //query group alarm records

 nRet = spc3_query_group_records(0, &queryCond, HD3M_ALL, &hIter);

 while (true)

 {

         nRet = ut3_get_item_step(hIter, &spcAlarmRec);

         if (RD_SUCCESS == nRet)

         {

                 printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", spcAlarmRec.nSPCTagID,

                         spcAlarmRec.tvStartTime.nSec, spcAlarmRec.tvStartTime.nMsec);

         }

         else if (EC_HD_API_QUERY_END == nRet)

         {

                 printf("query group all records complete\n");

                 nRet = RD_SUCCESS;

                 break;

         }

         else

         {

                 printf("query group records failed, error code [%d]\n", nRet);

         }

 }

 ut3_free_handle(hIter);

 

 //query tags alarm records

 nRet = spc3_query_tags_all_records(SPC_ALARM_TAG_NUM, nSPCTagIDs,

         &queryCond, HD3M_ALL, &hIter);

 while (true)

 {

         nRet = ut3_get_item_step(hIter, &spcAlarmRec);

         if (RD_SUCCESS == nRet)

         {

                 printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", spcAlarmRec.nSPCTagID,

                         spcAlarmRec.tvStartTime.nSec, spcAlarmRec.tvStartTime.nMsec);

         }

         else if (EC_HD_API_QUERY_END == nRet)

         {

                 printf("query tags all records complete\n");

                 nRet = RD_SUCCESS;

                 break;

         }

         else

         {

                 printf("query tags records failed, error code [%d]\n", nRet);

         }

 }

 ut3_free_handle(hIter);

 

 //reg spc alarm callback

 nRet = spc3_unregister_alarm_record_info();

 if (nRet != RD_SUCCESS)

 {

         printf("unregister spc alarm call back failed, error code [%d]!\n", nRet);

         nt3_disconnect();

         return -1;

 }

 printf("unregister spc alarm call back successful!\n");

 

 //disconnect

 nt3_disconnect();

 

 return 0;

}

 

//*/