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

📄 redundant.c

📁 包括EPA协议栈
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*********************************************************************************************************
*                                     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 + -