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

📄 threadfunc.c

📁 泵站系统屏与屏之间的通信
💻 C
📖 第 1 页 / 共 5 页
字号:
				{					OnCommError(nPort,iRequireNum);					SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_OFFLINE;				}			}			iRequireNum = (iRequireNum+1)%SubDevice[nPort].SubTotalNum;		}	}}void *Thread_PP41(void *iPort){	int ret,i,k,m;	int nPort = *((int *)iPort);	int iCon_Number,iNetGroup,iError=0;	int nLen,nRead,nRecv,iRequireNum = 0;	unsigned char SendBuff[256],RecvBuff[256];	unsigned char ucAddr,IEC104DataBuf_C[256];	int SubTotal = SubDevice[nPort].SubTotalNum;	while(1)	{		nRead=Read_104Data_From_Memory(nPort,IEC104DataBuf_C);		if(nRead>0)		{			iNetGroup = IEC104DataBuf_C[0]>>4;			iCon_Number = IEC104DataBuf_C[0]&0x0f;			if(!CONN_IsEngStation(iNetGroup,iCon_Number))				Response_COMState(nPort,iNetGroup,iCon_Number,IEC104DataBuf_C+1);		}		else		{			iError=0;			ucAddr = SubDevice[nPort].SubStations[iRequireNum].sub_address;			for(k=0;k<3;k++)			{				nLen = Get_PP41_Frame(SendBuff,ucAddr);				COMM_SendBuff(nPort, SendBuff, nLen);				SYS_Delay(200);				nRecv = Read_PP41_Frame(nPort,ucAddr,RecvBuff);				if (nRecv>0)				{					if (SubDevice[nPort].SubStations[iRequireNum].sub_state == SUB_STATE_OFFLINE)					{						OnCommOK(nPort,iRequireNum);						SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_ONLINE;					}					Process_PP41_YC(nPort,RecvBuff);					break;				}				else				{					if(nRecv<=0)		iError++;				}				SYS_Delay(200);			}			if (iError==3)			{				if (SubDevice[nPort].SubStations[iRequireNum].sub_state == SUB_STATE_ONLINE )				{					OnCommError(nPort,iRequireNum);					SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_OFFLINE;				}			}				SYS_Delay(500);			iRequireNum = (iRequireNum+1)%SubTotal;		}	}}void *Thread_103COM(void *iPort)//sub_DgtFlag/sub_DgtFlag1作为校时标志{	int nPort = *((int *)iPort);		int ret, i, m, nOrder = 0;	int iRequireNum = 0, OffLineIndex = 0;	unsigned char IEC103DataBuf_C[256];		SUB_Station *pSub = NULL;	GetUseSect(nPort);	ResetAllCU(nPort);	while(1)	{			ret = 0;		GPS2000(nPort);		pSub = &SubDevice[nPort].SubStations[iRequireNum];		if( pSub->sub_state == SUB_STATE_ONLINE )		{			ret = LocalIEC103Cmd(pSub->sub_CS, pSub->sub_address, IEC103DataBuf_C);			if(ret>0)			{				Command_Func(nPort, iRequireNum, IEC103DataBuf_C, ret);			}		}		if(nOrder==0)			ZongZhao(nPort);		if((nOrder>0)&&(nOrder%50==0))		{			OffLineIndex = SUB_GetNextOffLine(OffLineIndex, nPort);			pSub = &SubDevice[nPort].SubStations[OffLineIndex];			if( pSub->sub_state != SUB_STATE_ONLINE )			{				ResetOneCU(nPort, OffLineIndex);				}		}		nOrder = (nOrder+1)%4000; 		iRequireNum = SUB_GetNextOnline(iRequireNum,nPort);	}}void *Thread_GEC2(void *iPort){	int nPort = *((int *)iPort);	int YX_Num = 24,iError=0;	int ret,i,k,m,uInf_Modbus = -1,uIndex;	int nLen,nRead,nRecv,iRequireNum = 0;	int iCon_Number,iNetGroup,nGroup=0;	unsigned char ucVSQ,ucADDR,ucSECT,ucSPI;	unsigned char SendBuff[256],RecvBuff[256];	unsigned char IEC104DataBuf_C[256];	unsigned char IEC104DataBuf_M[256];	while(1)	{		nRead=Read_104Data_From_Memory(nPort,IEC104DataBuf_C);		if(nRead>0)		{			iNetGroup = IEC104DataBuf_C[0]>>4;			iCon_Number = IEC104DataBuf_C[0]&0x0f;			if(!CONN_IsEngStation(iNetGroup,iCon_Number))			{				if(*(IEC104DataBuf_C+IEC104_OFFSET_TI+1)==IEC104_TI_C_IC_NA_1)				{					ucSECT = *(IEC104DataBuf_C+IEC104_OFFSET_SECT+1);					ucADDR = *(IEC104DataBuf_C+IEC104_OFFSET_ADDR+1);					ret = IEC_PackInspectHead_104( IEC104DataBuf_M, ucADDR, ucSECT );//回答确认命令					CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);					SYS_Delay(10);					uIndex = SUB_AddrToIndex(ucADDR);					switch(ucSECT)					{					case 0:						ucSPI=(SubDevice[nPort].SubStations[uIndex].sub_state != SUB_STATE_OFFLINE) ? 0 : 1;						ret	=IEC_PackNode_104(IEC104DataBuf_M,ucADDR,IEC104_COT_M_introgen,ucSPI);						CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);						break;					case 2:						ucVSQ=0x80|YX_Num;						ret=IEC_PackFrame_104(IEC104DataBuf_M,3/*类别标识*/,ucVSQ/*可变结构限定词*/,20/*传输原因*/,ucADDR/*设备地址*/,0x02/*扇区号*/,1/*起始信息地址*/,							YX_Num/*要转换的字节数*/,&SubDevice[nPort].SubStations[uIndex].sub_Data[0]);						CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);						break;					}					ret = IEC_PackInspectEnd_104( IEC104DataBuf_M, ucADDR, ucSECT );//回答结束报文					CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);				}			}		}		else		{			iError=0;			nLen = Get_GEC2_Frame(SendBuff, nPort , iRequireNum);			for(k=0;k<3;k++)			{				COMM_SendBuff(nPort, SendBuff, nLen);				SYS_Delay(200);				ucADDR = SubDevice[nPort].SubStations[iRequireNum].sub_address;				nRecv = Read_Modbus_Frame(nPort, ucADDR, RecvBuff);				if (nRecv>0)				{					if (SubDevice[nPort].SubStations[iRequireNum].sub_state == SUB_STATE_OFFLINE)					{						OnCommOK(nPort,iRequireNum);						SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_ONLINE;					}					if(RecvBuff[1]==0x04) Process_GEC2_YC(nPort, RecvBuff);					if(RecvBuff[1]==0x02) Process_GEC2_YX(nPort, iRequireNum, RecvBuff);					break;				}				else				{					if(nRecv<=0)		iError++;				}				SYS_Delay(200);			}			if (iError==3)			{				if (SubDevice[nPort].SubStations[iRequireNum].sub_state == SUB_STATE_ONLINE )				{					OnCommError(nPort,iRequireNum);					SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_OFFLINE;				}			}				SYS_Delay(200);			iRequireNum=(iRequireNum+1)%SubDevice[nPort].SubTotalNum;		}	}}void *Thread_STDLC(void *iPort)   //2005.9.6 scm modify{	int nPort = *((int *)iPort);	int YX_Num = 19,iError=0;	int ret,i,k,m,uIndex;	int nLen,nRead,nRecv,iRequireNum = 0;	int iCon_Number,iNetGroup;	unsigned char ucVSQ,ucADDR,ucSECT,ucSPI;	unsigned char SendBuff[256],RecvBuff[256];	unsigned char IEC104DataBuf_C[256];	unsigned char IEC104DataBuf_M[256];	while(1)	{		nRead=Read_104Data_From_Memory(nPort,IEC104DataBuf_C);		if(nRead>0)		{			iNetGroup = IEC104DataBuf_C[0]>>4;			iCon_Number = IEC104DataBuf_C[0]&0x0f;			if(!CONN_IsEngStation(iNetGroup,iCon_Number))			{				if(*(IEC104DataBuf_C+IEC104_OFFSET_TI+1)==IEC104_TI_C_IC_NA_1)				{					ucSECT = *(IEC104DataBuf_C+IEC104_OFFSET_SECT+1);					ucADDR = *(IEC104DataBuf_C+IEC104_OFFSET_ADDR+1);					ret = IEC_PackInspectHead_104( IEC104DataBuf_M, ucADDR, ucSECT );//回答确认命令					CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);					SYS_Delay(10);					uIndex = SUB_AddrToIndex(ucADDR);					switch(ucSECT)					{					case 0:						ucSPI=(SubDevice[nPort].SubStations[uIndex].sub_state != SUB_STATE_OFFLINE) ? 0 : 1;						ret	=IEC_PackNode_104(IEC104DataBuf_M,ucADDR,IEC104_COT_M_introgen,ucSPI);						CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);						break;					case 2:						ucVSQ=0x80|YX_Num;						ret=IEC_PackFrame_104(IEC104DataBuf_M,3/*类别标识*/,ucVSQ/*可变结构限定词*/,20/*传输原因*/,ucADDR/*设备地址*/,0x02/*扇区号*/,1/*起始信息地址*/,							YX_Num/*要转换的字节数*/,&SubDevice[nPort].SubStations[uIndex].sub_Data[0]);						CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);						break;					}					ret = IEC_PackInspectEnd_104( IEC104DataBuf_M, ucADDR, ucSECT );//回答结束报文					CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);				}			}		}		else		{			iError=0;			ucADDR =1;// SubDevice[nPort].SubStations[iRequireNum].sub_address;			nLen = Get_STDLC_Frame(SendBuff, ucADDR);			for(k=0;k<3;k++)			{				COMM_SendBuff(nPort, SendBuff, nLen);				SYS_Delay(200);				nRecv = Read_STDLC_Frame(nPort, ucADDR, RecvBuff);				if (nRecv>0)				{					if (SubDevice[nPort].SubStations[iRequireNum].sub_state == SUB_STATE_OFFLINE)					{						OnCommOK(nPort,iRequireNum);						SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_ONLINE;					}					Process_STDLC_YXYC(nPort, iRequireNum, RecvBuff);					break;				}				else				{					if(nRecv<=0)		iError++;				}				SYS_Delay(200);			}			if (iError==3)			{				if (SubDevice[nPort].SubStations[iRequireNum].sub_state == SUB_STATE_ONLINE )				{					OnCommError(nPort,iRequireNum);					SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_OFFLINE;				}			}				SYS_Delay(200);		}	}}void *Thread_STDTS(void *iPort){	int nPort = *((int *)iPort);	int YX_Num = 24,iError=0;	int ret,i,k,m,uInf_Modbus = -1,uIndex;	int nLen,nRead,nRecv,iRequireNum = 0;	int iCon_Number,iNetGroup,nGroup=0;	unsigned char ucVSQ,ucADDR,ucSECT,ucSPI;	unsigned char SendBuff[256],RecvBuff[256];	unsigned char IEC104DataBuf_C[256];	unsigned char IEC104DataBuf_M[256];	while(1)	{		nRead=Read_104Data_From_Memory(nPort,IEC104DataBuf_C);		if(nRead>0)		{			iNetGroup = IEC104DataBuf_C[0]>>4;			iCon_Number = IEC104DataBuf_C[0]&0x0f;			if(!CONN_IsEngStation(iNetGroup,iCon_Number))			{				if(*(IEC104DataBuf_C+IEC104_OFFSET_TI+1)==IEC104_TI_C_IC_NA_1)				{					ucSECT = *(IEC104DataBuf_C+IEC104_OFFSET_SECT+1);					ucADDR = *(IEC104DataBuf_C+IEC104_OFFSET_ADDR+1);					ret = IEC_PackInspectHead_104( IEC104DataBuf_M, ucADDR, ucSECT );//回答确认命令					CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);					SYS_Delay(10);					uIndex = SUB_AddrToIndex(ucADDR);					switch(ucSECT)					{					case 0:						ucSPI=(SubDevice[nPort].SubStations[uIndex].sub_state != SUB_STATE_OFFLINE) ? 0 : 1;						ret	=IEC_PackNode_104(IEC104DataBuf_M,ucADDR,IEC104_COT_M_introgen,ucSPI);						CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);						break;					case 2:						ucVSQ=0x80|YX_Num;						ret=IEC_PackFrame_104(IEC104DataBuf_M,3/*类别标识*/,ucVSQ/*可变结构限定词*/,20/*传输原因*/,ucADDR/*设备地址*/,0x02/*扇区号*/,1/*起始信息地址*/,							YX_Num/*要转换的字节数*/,&SubDevice[nPort].SubStations[uIndex].sub_Data[0]);						CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);						break;					}					ret = IEC_PackInspectEnd_104( IEC104DataBuf_M, ucADDR, ucSECT );//回答结束报文					CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);				}			}		}		else		{			iError=0;			nLen = Get_STDTS_Frame(SendBuff);			for(k=0;k<3;k++)			{				COMM_SendBuff(nPort, SendBuff, nLen);				SYS_Delay(200);				ucADDR = SubDevice[nPort].SubStations[iRequireNum].sub_address;				nRecv = Read_STDTS_Frame(nPort, ucADDR, RecvBuff);				if (nRecv>0)				{					if (SubDevice[nPort].SubStations[iRequireNum].sub_state == SUB_STATE_OFFLINE)					{						OnCommOK(nPort,iRequireNum);						SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_ONLINE;					}					Process_STDTS_YX(nPort, iRequireNum, RecvBuff);					if(nGroup==0) 						Process_STDTS_YC(nPort, iRequireNum, RecvBuff);					break;				}				else				{					if(nRecv<=0)		iError++;				}				SYS_Delay(800);			}			if (iError==3)			{				if (SubDevice[nPort].SubStations[iRequireNum].sub_state == SUB_STATE_ONLINE )				{					OnCommError(nPort,iRequireNum);					SubDevice[nPort].SubStations[iRequireNum].sub_state = SUB_STATE_OFFLINE;				}			}				SYS_Delay(800);			nGroup  = (nGroup+1)%5;		}	}}void *Thread_SWL2(void *iPort){	int nPort = *((int *)iPort);	int YX_Num = 24,iError=0;	int ret,i,k,m,uInf_Modbus = -1,uIndex;	int nLen,nRead,nRecv,iRequireNum = 0;	int iCon_Number,iNetGroup;	unsigned char ucVSQ,ucADDR,ucSECT,ucSPI;	unsigned char SendBuff[256],RecvBuff[256];	unsigned char IEC104DataBuf_C[256];	unsigned char IEC104DataBuf_M[256];	SWL2_DevAddr = 0xF1;	while(1)	{		nRead=Read_104Data_From_Memory(nPort,IEC104DataBuf_C);		if(nRead>0)		{			iNetGroup = IEC104DataBuf_C[0]>>4;			iCon_Number = IEC104DataBuf_C[0]&0x0f;			if(!CONN_IsEngStation(iNetGroup,iCon_Number))			{				if(*(IEC104DataBuf_C+IEC104_OFFSET_TI+1)==IEC104_TI_C_IC_NA_1)				{					ucSECT = *(IEC104DataBuf_C+IEC104_OFFSET_SECT+1);					ucADDR = *(IEC104DataBuf_C+IEC104_OFFSET_ADDR+1);					ret = IEC_PackInspectHead_104( IEC104DataBuf_M, ucADDR, ucSECT );//回答确认命令					CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);					SYS_Delay(10);					uIndex = SUB_AddrToIndex(ucADDR);					switch(ucSECT)					{					case 0:						ucSPI=(SubDevice[nPort].SubStations[uIndex].sub_state != SUB_STATE_OFFLINE) ?  0 : 1 ;						ret	=IEC_PackNode_104(IEC104DataBuf_M,ucADDR,IEC104_COT_M_introgen,ucSPI);						CONN_Send104Data(iNetGroup,iCon_Number,IEC104DataBuf_M,ret);						SYS_Delay(10);						break;	

⌨️ 快捷键说明

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