📄 subdata.c
字号:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include "include/Iec.h"#include "include/SubData.h"int SUB_AddrToIndex(unsigned char ucAddr){ int iPort, index; for(iPort=1;iPort<=PORT_NUM;iPort++) { if(COM_Para[iPort].Protocol!=0) { for(index=0; index< SubDevice[iPort].SubTotalNum ; index++) { if ( ucAddr == SubDevice[iPort].SubStations[index].sub_address ) { return index; } } } } return SUB_MAX;}int SUB_AddrToPort(unsigned char ucAddr){ int j,k,iPort=0; if(ucAddr == 0xff ) { return 0; } for(k=1;k<=PORT_NUM;k++) { if(COM_Para[k].Protocol!=0) { for(j=0;j<SubDevice[k].SubTotalNum;j++) { if (ucAddr == SubDevice[k].SubStations[j].sub_address) iPort = SubDevice[k].iPort; } } } return iPort;}int GetNextDevice(int ucIndex,int iPort){ int ucNext=ucIndex; int Total_Dev_Number=SubDevice[iPort].SubTotalNum ; ucNext++; if (ucNext ==Total_Dev_Number) ucNext =0; return ucNext; }int SUB_GetNextOnline(int ucIndex,int iPort){ int i; int ucNext = ucIndex; int Total_Dev_Number=SubDevice[iPort].SubTotalNum ; for (i=0 ; i<Total_Dev_Number ; i++) { ucNext++; if(ucNext==Total_Dev_Number) ucNext = 0; if(SubDevice[iPort].SubStations[ucNext].sub_state == SUB_STATE_ONLINE) return ucNext; } return ucIndex; }int SUB_GetNextOffLine(int ucIndex,int iPort){ int i; int ucNext = ucIndex; int Total_Dev_Number = SubDevice[iPort].SubTotalNum ; for(i=0 ; i<Total_Dev_Number ; i++) { ucNext++; if(ucNext == Total_Dev_Number) ucNext = 0; if(SubDevice[iPort].SubStations[ucNext].sub_state != SUB_STATE_ONLINE) return ucNext; } return ucNext; }int SUB_GetOnlineNum(){ int j,k,ret=0; for(k=1;k<=PORT_NUM;k++) { if(COM_Para[k].Protocol!=0) { for(j=0;j<SubDevice[k].SubTotalNum;j++) { if (SubDevice[k].SubStations[j].sub_state==SUB_STATE_ONLINE) ret++; } } } return ret;}int SUB_DeviceOn(unsigned char ucADDR){ int j, k; for(k=1;k<=PORT_NUM;k++) { if(COM_Para[k].Protocol!=0) { for(j=0;j<SubDevice[k].SubTotalNum;j++) { if (ucADDR == SubDevice[k].SubStations[j].sub_address) return 1; } } } return 0;}int VialidSubAddr(unsigned char ucAddr, int iPort){ int j ; for(j=0;j<SubDevice[iPort].SubTotalNum;j++) { if (ucAddr == SubDevice[iPort].SubStations[j].sub_address) return 1; } return 0;}unsigned char SUB_ResetFCB(SUB_Station *pSub){ unsigned char ucFCB =0; if (pSub != NULL) { ucFCB = pSub->sub_FCB; ucFCB ^=_FCB; pSub->sub_FCB =ucFCB & _FCB; } return ucFCB; }unsigned char SUB_SetFCB(unsigned char *pucFrame,unsigned char ucFCB){ unsigned char *p=pucFrame; unsigned char ucSendFCB=ucFCB & _FCB; switch(*p) { case START_CODE1: if(ucSendFCB) { *(p+1) |=ucSendFCB; } else { *(p+1) &= (~_FCB); } ucSendFCB =*(p+1); if (*(p+3)==BROADCAST_ADDR) //BoardCast command { *(p+1) &=(~_FCB); } ucSendFCB =*(p+1); break; case START_CODE2: if(ucSendFCB) { *(p+IEC103_OFFSET_CODE) |=ucSendFCB; } else { *(p+IEC103_OFFSET_CODE) &=(~_FCB); } if (*(p+IEC103_OFFSET_ADDR) == BROADCAST_ADDR) { *(p+IEC103_OFFSET_CODE) &=(~_FCV); } ucSendFCB =*(p+IEC103_OFFSET_CODE); break; default : break; } return ucSendFCB;}unsigned char SUB_GetFCB(unsigned char ucADDR){ int index = SUB_AddrToIndex(ucADDR); int iPort = SUB_AddrToPort(ucADDR); if ((index >=0)&&(iPort>=1)) { return SubDevice[iPort].SubStations[index].sub_FCB; } return 0;}unsigned char SUB_GetFUN(unsigned char ucADDR){ int index =SUB_AddrToIndex(ucADDR); int iPort = SUB_AddrToPort(ucADDR); if ((index >=0)&&(iPort>=1)) { return SubDevice[iPort].SubStations[index].sub_FUN; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -