📄 redundant.c
字号:
/*
*********************************************************************************************************
* FS_R_DeviceActiveAnnunciationService
*
* Description: 设备冗余状态声明服务
*
* Arguments : void
*
* Returns : void
*********************************************************************************************************
*/
void FS_R_LocalDeviceActiveAnnun(void) {
Time ctime,timedif;
PSock psock;
if(GetRedundancyState() == 0) {
psock= GetOutSock(PROTOCOL_EPASTUSR);
GetPDTag(psock->payload);
h2n32(gNetIf.localip, psock->payload + 32);
psock->dstip = gNetIf.bcaddr;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_ACTIVE_ANN;
psock->length = 36;
psock->comtype = 1;
EPAOutput(psock);
}
else {
Getime(&ctime);
timedif = PTP_Subtract(ctime, LastReceiveDAATime);
if(((timedif.secs * 1000) + (timedif.nasecs / 1000000)) > 1200) {
psock= GetOutSock(PROTOCOL_EPASTUSR);
SetRedundancyState(0);
FS_R_LocalDeviceChange();
}
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* FS_R_DeviceChange service
*
* Description: 设备冗余切换服务
*
* Arguments : void
*
* Returns : void
*********************************************************************************************************
*/
void FS_R_LocalDeviceChange(void) {
PSock psock;
psock = GetOutSock(PROTOCOL_EPASTUSR);
GetPDTag(psock->payload);
h2n32(gNetIf.localip, psock->payload + 32);
h2n32(R_IP, psock->payload + 36);
psock->dstip = gNetIf.bcaddr;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_DEV_CHANGE;
psock->length = 40;
psock->comtype = FS_COM_TYPE;
EPAOutput(psock);
}
/*$PAGE*/
/*
*********************************************************************************************************
* FS_R_MaintainRequest service
*
* Description: 设备冗余同步请求服务
*
* Arguments : void
*
* Returns : void
*********************************************************************************************************
*/
void FS_R_LocalMaintainRequest(void) {
Time ctime;
uint8 r_state;
VisualString r_pdtag;
r_state = GetRedundancyState();
if(r_state == 1) {
PSock psock= GetOutSock(PROTOCOL_EPASTUSR);
GetPDTag(r_pdtag);
if(FirstMaintainOK == 0) {
h2n32(R_IP, psock->payload);
memcpy(psock->payload + 4, r_pdtag,32);
psock->payload[36] = r_state;
psock->dstip = R_IP;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN_REQ;
psock->length = 37;
psock->comtype = 1;
EPAOutput(psock);
FirstMaintainOK = 1;
}
else {
Getime(&ctime);
if((ctime.secs - Last_Maintain_time) > 60) {
h2n32(R_IP, psock->payload);
memcpy(psock->payload + 4, r_pdtag,32);
psock->payload[36] = r_state;
psock->dstip = R_IP;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN_REQ;
psock->length = 37;
psock->comtype = 1;
EPAOutput(psock);
Last_Maintain_time = ctime.secs;//////////////store this maintain time
}
}
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* FS_R_MaintainRequestPositive
*
* Description: 设备冗余同步请求服务正响应
*
* Arguments : msgid MessageID
* ip 备份设备IP地址
* Returns : void
*********************************************************************************************************
*/
void FS_R_LocalMaintainRequestPositive(uint16 desAppid, uint32 detip, uint16 messageid) {
PSock psock = GetOutSock(PROTOCOL_EPASTUSR);
h2n16(desAppid,psock->payload);
psock->dstip = detip;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN_REQ_POS;
psock->msgid = messageid;
psock->length = 2;
psock->comtype = 1;
EPAOutput(psock);
}
/*$PAGE*/
/*
*********************************************************************************************************
* FS_R_MaintainRequestNegative
*
* Description: 冗余同步请求服务负响应
*
* Arguments : msgid MessageID
* ip 备份设备IP地址
*
* Returns : void
*********************************************************************************************************
*/
void FS_R_LocalMaintainRequestNegative(uint16 desAppid,uint32 detip,uint16 messageid) {
PSock psock = GetOutSock(PROTOCOL_EPASTUSR);
h2n16(desAppid,psock->payload);
//对差错属性赋值
//psock->payload[4] = 0x00;
//psock->payload[5] = 0x01;
psock->dstip = detip;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN_REQ_NEG;
psock->msgid = messageid;
psock->length = 40;
psock->comtype = 1;
EPAOutput(psock);
}
/*$PAGE*/
/*
*********************************************************************************************************
* FS_R_Maintain
*
* Description: 设备冗余同步服务
*
* Arguments : IP 备份设备的IP地址
*
* Returns : void
*********************************************************************************************************
*/
void FS_R_LocalMaintain(uint16 srcappid, uint16 dstappid, uint16 subindex, uint32 ip) {
uint16 i;
PSock psock;
#if SAFTY_REDUNDANT
uint16 Number_FSLinkObject;
uint16 FirstNumber_FSLinkObject;
FSLinkObject fslo;
FSManagementInfoHeaderObject fsmiho;
#else
uint16 NumOfLinkObj;
uint16 FirNumOfLinkObj;
EPALINKOBJECTHEADER *loh;
LINKOBJECT *lo;
#endif
psock = GetOutSock(PROTOCOL_EPASTUSR);
h2n16(srcappid, psock->payload);
h2n16(dstappid, psock->payload + 2);
h2n16(subindex, psock->payload + 4);
#if SAFTY_REDUNDANT
h2n16(11, psock->payload+6);//////////the index of FSManagementInfoHeaderObject in mib is 11
Number_FSLinkObject = fsmiho.Number_FSLinkObject;
FirstNumber_FSLinkObject = fsmiho.FirstNumber_FSLinkObject;
memcpy(psock->payload + 8, (uint8*)&fsmiho, 16);
psock->length=24;
#else
h2n16(8, psock->payload[6]);//////////the index of Link_Obj_Header in mib is 8
loh = (EPALINKOBJECTHEADER*)GetLinkObjHeader();////read Link_Obj_Header
NumOfLinkObj = loh->NumberofLinkObject;
FirNumOfLinkObj = loh->FirstNumofLinkObjID;
memcpy(psock->payload + 8, (uint8*)loh, 10);
psock->length=18;
#endif
psock->dstip = ip;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN;
psock->comtype = FS_COM_TYPE;
EPAOutput(psock);/////////////Maintain the link_obj_header or FSManagementInfoHeaderObject to backup device
#if SAFTY_REDUNDANT
for(i=0;i<Number_FSLinkObject;i++)/////query all configuredfslinkobject
{
psock = GetOutSock(PROTOCOL_EPASTUSR);
h2n16(srcappid, psock->payload);
h2n16(dstappid, psock->payload + 2);
h2n16(subindex, psock->payload + 4);
h2n16(FirstNumber_FSLinkObject + i, psock->payload+6);//////////the index of FSLinkObject in mib
FSMIB_Get(FSLO_BASE_OBJECTID, (uint8*)&fslo);
memcpy(psock->payload + 8, (uint8*)&fslo, sizeof(FSLinkObject));
psock->length = sizeof(FSLinkObject) + 8;
psock->dstip = ip;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN;
psock->comtype = FS_COM_TYPE;
EPAOutput(psock);////////Maintain the FSLinkObject to backup device
}
#else
for(i=0;i<NumOfLinkObj;i++)/////query all configuredfslinkobject
{
psock = GetOutSock(PROTOCOL_EPASTUSR);
h2n16(srcappid, psock->payload);
h2n16(dstappid, psock->payload + 2);
h2n16(subindex, psock->payload + 4);
h2n16(FirstNumber_FSLinkObject + i, psock->payload+6);//////////the index of FSLinkObject in mib
lo = GetLinkObjByIndex(i);
memcpy(psock->payload + 8, (uint8*)&lo, sizeof(LINKOBJECT));
psock->length = sizeof(LINKOBJECT) + 8;
psock->dstip = ip;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN;
psock->comtype = FS_COM_TYPE;
EPAOutput(psock);////////Maintain the FSLinkObject to backup device
}
#endif
}
/*$PAGE*/
/*
*********************************************************************************************************
* FS_R_MaintainPositive
*
* Description: 设备冗余同步正响应
*
* Arguments : msgid MessageID
*
* Returns : void
*********************************************************************************************************
*/
void FS_R_LocalMaintainPositive(uint16 dstappid, uint32 dstip, uint16 msgid)
{
PSock psock = GetOutSock(PROTOCOL_EPASTUSR);
h2n16(dstappid, psock->payload);
psock->dstip = dstip;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN_POS;
psock->msgid = msgid;
psock->length = 2;
psock->comtype = FS_COM_TYPE;
EPAOutput(psock);
}
/*$PAGE*/
/*
*********************************************************************************************************
* FS_R_MaintainNegative
*
* Description: 冗余同步负响应
*
* Arguments : msgid MessageID
*
* Returns : void
*********************************************************************************************************
*/
void FS_R_LocalMaintainNegative(uint16 dstappid, uint32 dstip,uint16 msgid)
{
PSock psock = GetOutSock(PROTOCOL_EPASTUSR);
h2n16(dstappid, psock->payload);
//对差错属性赋值
psock->payload[4] = 0x00;
psock->payload[5] = 0x01;
psock->dstip = dstip;
psock->dstport = EPA_PORT;
psock->srvid = FSID_R_MAINTAIN_NEG;
psock->msgid = msgid;
psock->length = 40;
psock->comtype = FS_COM_TYPE;
EPAOutput(psock);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -