⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ieclib.c

📁 在Unix平台下完成的电力系统广发使用的IEC103规约的程序
💻 C
字号:
/***************************************************************
 *
 * File Name  :  ieclib.c
 *
 * First Date :  May 30, 2001.
 *
 * Programmer :  NARI BSJ-2200
 *
 * Makefile   :  make.sco
 *
 ***************************************************************/

#include "iec103.h"
#include "device.h"

int fd;
extern unsigned port,RcvTimeOut;
extern IECDEF *pIECDEF[MaxIECNum];
extern SENDDEF SendDef;
extern RCVDEF RcvDef;
extern char hostname[],diag_tag[];
extern SysDef *pSysDef;

void IEC10dsp();
void IEC68dsp();

void alarm_handler()
{
   fprintf(stderr,"s: Send Alarm TimeOut\n");
}

void ralarm_handler()
{
   RcvTimeOut=1;
   fprintf(stderr,"Rcv Alarm TimeOut\n");
}

void open_device()
{

   fd = open(port_def[port].file, O_RDWR);
   if (fd < 0)  {
      printf("open device fail\n");
      exit(-1);
   }

}

void exit_exe()
{
     msg_delete();
     TerminateSharedMemory();
     exit(0);
}

void init_device()
{
struct termio TermBuf;
extern int errno;
extern char *sys_errlist[];

   if (ioctl(fd,TCGETA,&TermBuf) < 0) {
      close(fd);
      fprintf(stderr," get ioctl fail\ncode = %d...%s\n",
              errno,sys_errlist[errno]);
      exit(-1);
   }
   TermBuf.c_iflag &= ~IFLAG;
   TermBuf.c_oflag &= ~OFLAG;
   TermBuf.c_cflag  =  CFLAG;
   TermBuf.c_lflag &= ~LFLAG;
   TermBuf.c_cc[4]  = 0;
   TermBuf.c_cc[5]  = 2;
   if (ioctl(fd,TCSETAF,&TermBuf) < 0) {
      close(fd);
      fprintf(stderr," set ioctl fail\ncode = %d...%s\n",
              errno,sys_errlist[errno]);
      exit(-1);
   }

}

HEX_BCD(x)
unsigned x;
{
    if (x<=8) return (x+16);
    if ((x>=9)&&(x<=16)) return (x+24);
}

unsigned char sum(data,length)
unsigned char data[];
unsigned short length;
{
unsigned short i;
unsigned char result;

   result=0;
   for (i=0;i<length;i++)
      result += data[i];
   return (result);
}

rFoundPointer(pData,pStr)
long  *pData;
char  *pStr;
{
   int i,offset;
   offset=0;
   for (i=0;i<*pData-1;i++)
      while (*(pStr+offset++) != '\0');
   *pData=(long)(pStr+offset);
}

void IEC10dsp(dir,code)
unsigned char dir,code;
{
char str[80];

if (dir=='r')
  switch (code & 0x0f)
  {
     case M_CON_NA :  strcpy(str,"M_CON_NA");   break;    /*  0 */
     case M_BSY_NA :  strcpy(str,"M_BSY_NA");   break;    /*  1 */
     case M_NV_NA  :  strcpy(str,"M_NV__NA");   break;    /*  9 */
     case M_LKR_OK :  strcpy(str,"M_LKR_OK");   break;    /* 11 */
     case M_LKR_HT :  strcpy(str,"M_LKR_HT");   break;    /* 14 */
     case M_LKR_FT :  strcpy(str,"M_LKR_FT");   break;    /* 15 */
     default       :  strcpy(str,"????????");   break;
  }
else if (dir=='s')
  switch (code & 0x0f)
  {
     case C_RCU_NA :  strcpy(str,"C_RCU_NA");   break;    /*  0 */
     case C_SND_AK :  strcpy(str,"C_SND_AK");   break;    /*  3 */
     case C_RFB_NA :  strcpy(str,"C_RFB_NA");   break;    /*  7 */
     case C_RLK_NA :  strcpy(str,"C_RLK_NA");   break;    /*  9 */
     case C_PL1_NA :  strcpy(str,"C_PL1_NA");   break;    /* 10 */
     case C_PL2_NA :  strcpy(str,"C_PL2_NA");   break;    /* 11 */
     default       :  strcpy(str,"????????");   break;
  }
else strcpy(str,"????????");

printf("%c%2x: %s -- ",dir,HEX_BCD(port),str);

}

void IEC68dsp(dir,code)
unsigned char dir,code;
{
char str[80];

  switch (code)
  {
     case M_TTM_TA :  strcpy(str,"M_TTM_TA");  break;        /*   1 */
     case M_TMR_TA :  strcpy(str,"M_TMR_TA");  break;        /*   2 */
     case M_MEI_NA :  strcpy(str,"M_TEI_NA");  break;        /*   3 */
     case M_TME_TA :  strcpy(str,"M_TME_TA");  break;        /*   4 */
     case M_IDI_NA :  if (RcvDef.Buf[11]==2)
                      strcpy(str,"M_IRF_NA");
                      else if (RcvDef.Buf[11]==3)
                      strcpy(str,"M_IRC_NA");
                      else if (RcvDef.Buf[11]==4)
                      strcpy(str,"M_IRS_NA");
                      else if (RcvDef.Buf[11]==5)
                      strcpy(str,"M_PO__NA");
                      else
                      strcpy(str,"========");  break;        /*   5 */
     case C_SYN_TA :  if (dir=='s')
                      strcpy(str,"C_SYN_TA");
                      else
                      strcpy(str,"M_SYN_TA");  break;        /*   6 */
     case C_IGI_NA :  strcpy(str,"C_IGI_NA");  break;        /*   7 */
     case M_TGI_NA :  strcpy(str,"M_TGI_NA");  break;        /*   8 */
     case M_ME2_NA :  strcpy(str,"M_ME2_NA");  break;        /*   9 */
     case C_GD_NA  :  if (dir=='s')
                      strcpy(str,"C_GD__NA");
                      else
                      strcpy(str,"M_GD_NTA");  break;        /*  10 */
     case M_GI_NTA :  strcpy(str,"M_GI_NTA");  break;        /*  11 */
     case C_GRC_TA :  strcpy(str,"C_GRC_TA");  break;        /*  20 */
     case C_GC_NA  :  strcpy(str,"C_GC__NA");  break;        /*  21 */
     case M_LRD_TA :  strcpy(str,"M_LRD_TA");  break;        /*  23 */
     case C_ODT_TA :  strcpy(str,"C_ODT_NA");  break;        /*  24 */
     case C_ADT_NA :  strcpy(str,"C_ADT_NA");  break;        /*  25 */
     case M_RTD_TA :  strcpy(str,"M_RTD_TA");  break;        /*  26 */
     case M_RTC_TA :  strcpy(str,"M_RTC_TA");  break;        /*  27 */
     case M_RTT_TA :  strcpy(str,"M_RTT_TA");  break;        /*  28 */
     case M_TOT_TA :  strcpy(str,"M_TOT_TA");  break;        /*  29 */
     case M_TOV_TA :  strcpy(str,"M_TOV_TA");  break;        /*  30 */
     case M_EOT_TA :  strcpy(str,"M_EOT_TA");  break;        /*  31 */

     default       :  strcpy(str,"????????");   break;
  }
  printf("%c%2x: %s -- ",dir,HEX_BCD(port),str);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -