commCPU_SUPV/code/protect/demo/protect_61850.c

286 lines
7.1 KiB
C
Raw Permalink Normal View History

2025-04-30 16:24:29 +08:00
/****************************************************************************
<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>: .c
----------------------------------------------------------------------------
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>61850<EFBFBD>Ľӿں<EFBFBD><EFBFBD><EFBFBD>
----------------------------------------------------------------------------
<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־ :
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
----------------------------------------------------------------------------
2014-01-27 hsj create
****************************************************************************/
#include <stdio.h>
#include "protect_61850.h"
#include "shmbuff.h"
#include <string.h>
//#include "gse_clnp.h"
//---------------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>goose<73><65><EFBFBD>ػص<D8BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
//---------------------------------------------------------------------------------
#if 0
#ifdef _WIN32
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
#endif
#define printf inf_shm_printf_write
/**
* <EFBFBD>յ<EFBFBD>goose<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ļص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>gserCtrl<EFBFBD><EFBFBD>ȡgoose<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void protect_callback_receive_goose(GSE_RX_CTRL *gserCtrl, unsigned long err)
{
int i, j;
AS_DA_MAP *da_map;
GOOSE_MAP_CTRL *goose_map = 0;
printf("recved goose appid=%04x, stNum=%d, sqNum=%d\n", gserCtrl
->ini_info.etypeAppid, gserCtrl->stNum, gserCtrl->sqNum);
if (gserCtrl->goose_maps == 0)
{
return ;
}
for (i = 0; i < gserCtrl->numUnits; i++)
{
goose_map = &gserCtrl->goose_maps[i];
for (j = 0; j < goose_map->da_map_num; j++)
{
da_map = goose_map->da_maps[j];
if (da_map)
{
printf(" da_ref=%s, usr_data_info(%s)\n", da_map->da_ref, da_map
->usr_data_info);
}
}
}
}
/**
* gooseͨ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ļص<EFBFBD>
*/
void protect_callback_goose_connected(int eth_index, GSE_RX_CTRL *gserCtrl,
unsigned char con)
{
if (con)
{
printf("goose connected, appid=%04x, eth=%d\n", gserCtrl
->ini_info.etypeAppid, eth_index);
}
else
{
printf("goose disconnected, appid=%04x, eth=%d\n", gserCtrl
->ini_info.etypeAppid, eth_index);
}
}
/**
* gooseͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļص<EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
*/
void protect_callback_goose_allchnl_disconnected(GSE_RX_CTRL *gserCtrl)
{
printf("goose all chnl disconnected, appid=%04x\n", gserCtrl
->ini_info.etypeAppid);
}
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>
*/
void protect_smv2_callback_recv(GSV_SV2RECV_CTRL *pSmv92Data, int svIndex, int
svNum, unsigned int recvTime)
{
printf("smv recv index=%d, num=%d, time=%d.\n", svIndex, svNum, recvTime);
}
/**
* <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>GOOSE<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>61850ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>򣬻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>GOOSEֵ
*/
void protect_init_goose_data(const IEC_GOOSE_SEND_USER_INFO *gseSend_user_list)
{
//<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>gw61850gse_data_value_change
printf(">>Recv protect_init_goose_data().\n");
}
/**************************************************************************/
/* */
/**************************************************************************/
void protect_smv2_callback_initilized(const GSV_SV2RECV_CTRL *pSmv92Data_array,
int number, int accessMode)
{
//<2F><><EFBFBD><EFBFBD>SMV<4D><56>ʼ<EFBFBD><CABC><EFBFBD>󣬵<EFBFBD><F3A3ACB5>ú<EFBFBD><C3BA><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Ҫ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
int iLoop;
for (iLoop = 0; iLoop < number; iLoop++)
{
printf(">>SMV recv %s initilized, appid=%X, index=%d.\n",
pSmv92Data_array[iLoop].svId, pSmv92Data_array[iLoop].appid,
pSmv92Data_array[iLoop].ctrlIndex);
}
}
/**************************************************************************/
/* */
/**************************************************************************/
void protect_goose_recv_callback_initilized(const GSE_RX_CTRL *gserCtrl_list)
{
printf(">>protect_goose_recv_callback_initilized().\n");
}
/**************************************************************************/
/* */
/**************************************************************************/
void protect_callback_init_fail(unsigned int err)
{
//<2F><>ʼ<EFBFBD><CABC>GOOSE SMV <20><><EFBFBD><EFBFBD>
printf(">>protect_callback_init_fail()=%d.\n", err);
}
/*****************************************************************/
/*****************************************************************/
#ifndef CCES_ADI
int main(void)
#else
int main_prog(void)
#endif
{
int ret;
ret = goosesmv_init();
if (0 == ret)
{
printf(">>goosesmv_init() success.\n");
}
while (1)
{
const unsigned char *nRecv = NULL;
#if 0
int len;
unsigned char *buff;
len = 0;
buff = gsv_clnp_recv(1, &len);
if (len > 0)
{
printf("%d: %02X-%02X.\n", len, buff[0], buff[1]);
}
{
//<2F><><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>GOOSE
unsigned char buff[128] =
{
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x2E, 0x4F, 0xFF, 0x55, 0xAB,
0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0xe8,
0x9a, 0x8f, 0x9b, 0xc7, 0x52, 0xc0, 0xa8, 0x01, 0x64, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x02, 0x09, 0xAA, 0X55, 0XAA, 0X55
};
gsv_clnp_send(1, buff, 46); //
//gsv_clnp_send( 0, buff, 46 );
}
#elif 0
//<2F><><EFBFBD><EFBFBD>LP<4C>ķ<EFBFBD><C4B7>ͺͽ<CDBA><CDBD><EFBFBD>
int len;
static unsigned char coun = 0;
unsigned char buff[128];
coun++;
if (0 == coun)
{
coun++;
}
memset(buff, coun, 128);
//gsv_clnp_send( 1, buff, 128 );
len = 0;
nRecv = gsv_clnp_recv(1, &len);
if (0 < len)
{
int iLoop, size0 = 0;
char buff[256] =
{
0
};
printf(">>Recv %d from 1:\n", len);
len /= 4;
for (iLoop = 0; iLoop < len; iLoop++)
{
if (iLoop % 16 == 0)
{
size0 += sprintf(buff + size0, "\n");
printf(buff);
size0 = 0;
}
size0 += sprintf(buff + size0, "%02X ", nRecv[iLoop]);
}
size0 += sprintf(buff + size0, "\n");
printf(buff);
size0 = 0;
//printf("%d: %02X-%02X, %02X-%02X.\n", len, buff[0], buff[1],
// buff[16], buff[16+1] );
}
len = 0;
nRecv = gsv_clnp_recv(2, &len);
if (0 < len)
{
int iLoop, size0 = 0;
char buff[256] =
{
0
};
printf(">>Recv %d from 2:\n", len);
len /= 4;
for (iLoop = 0; iLoop < len; iLoop++)
{
if (iLoop % 16 == 0)
{
size0 += sprintf(buff + size0, "\n");
printf(buff);
size0 = 0;
}
size0 += sprintf(buff + size0, "%02X ", nRecv[iLoop]);
}
size0 += sprintf(buff + size0, "\n");
printf(buff);
size0 = 0;
//printf("%d: %02X-%02X, %02X-%02X.\n", len, buff[0], buff[1],
// buff[16], buff[16+1] );
}
#else
gse_handle(); //GOOSE<53><45>SMV<4D><56><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>(<28><>Ҫ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>)(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A6>)
#endif
protect_simul_handle(0);
#ifdef CCES_ADI
#endif
sMsSleep(10);
}
return 0;
}
/**************************************************************************/
/* */
/**************************************************************************/
#endif