示例#1
0
int CheckSession(PLC *plc)
{
	Eip_Session *session=plc->Session;
	Log(LOG_WARNING,"Checking Session for %s\n",plc->PlcName);
	
	if (session==NULL) return (BuildSession(plc));
	ListServices_Reply *Services=ListServices(session);
	if (Services==NULL)
	{	
		Log(LOG_DEBUG,"CheckSession Error : %p\n",plc->Session);
		if (cip_errno==E_RcvTimeOut)
		{
			return(0);
		}
		else 
		{
			KillSession(session);
			ELEMENT *elt=GetFirst(&PLCs);
			if (elt!=NULL) do
			{
				PLC *plc=elt->Data;
				if (plc->Session==session) plc->Session=NULL;
			} while ((elt=GetNext(&PLCs,elt))!=NULL);			
			return (BuildSession(plc));
		}
	}else 
	{
		free(Services);
		Log(LOG_DEBUG,"CheckSession : %p OK\n",plc->Session);
		return(1);
	}
}
示例#2
0
int BuildConnections(LISTE *PLC_List)
{	
	ELEMENT *elt=GetFirst(PLC_List);
	if (elt!=NULL) do
	{	
		PLC *plc=elt->Data;
		if (BuildSession(plc)) BuildConnection(plc);
	} while ((elt=GetNext(PLC_List,elt))!=NULL);
	return(CONNECTIONs.Count);
}
示例#3
0
文件: uri.cpp 项目: ollie314/libyuni
	void Uri::extractURIFromString(const AnyString& raw)
	{
		// Cleanup before anything
		clear();

		// trim the string for unwanted and useless char
		// making a copy for the helper class
		String copy = raw;
		copy.trim();

		// Go ahead !
		if (not copy.empty())
			BuildSession(pInfos, copy).run();
	}
示例#4
0
int ReadTag(TAG *tag)
{
	int result=0;
	DHP_Header dhp={0,0,0,0};
	if (tag->Plc->Session==NULL)
	{
		if (!BuildSession(tag->Plc)) return(0);
	}
	if (tag->Plc->Connection==NULL)
	{
		if (!BuildConnection(tag->Plc)) return(0);
	}
	Log(LOG_DEBUG,"ReadTag : %s (%p / %p)\n",tag->TagName,tag->Plc->Session,tag->Plc->Connection);
	switch (tag->Plc->PlcType)
	{
		case PLC5:
		case SLC500:
			{ PLC_Read *data;
				dhp.Dest_adress=tag->Plc->Node;
				if (tag->Plc->NetWork) // DHP
					data=ReadPLCData(tag->Plc->Session,tag->Plc->Connection,&dhp,NULL,0,tag->Plc->PlcType,tns++,tag->TagName,1);
				else data=ReadPLCData(tag->Plc->Session,tag->Plc->Connection,NULL,NULL,0,tag->Plc->PlcType,tns++,tag->TagName,1);
				//Log(LOG_DEBUG,"Reading : %s on %s (%s)\n",TAGs[i].TagName,(TAGs[i].Plc)->PlcName,s_err_msg);
				if (data!=NULL)
				{
					tag->Value=PCCC_GetValueAsFloat(data,0);
					if (!cip_errno) 
					{
						Log(LOG_DEBUG,"%s on %s = %f (%s)\n",tag->TagName,tag->Plc->PlcName,tag->Value,cip_err_msg);
						result=1;
					}	else 
					{
						Log(LOG_WARNING,"Get PCCC value on tag %s: (%d / ext %d) %s\n",tag->TagName,cip_errno,cip_err_msg,cip_ext_errno);
						result=0;
					}
					free(data);
				} else
				{
					Log(LOG_WARNING,"ReadPLCData error on tag %s: (%d) %s\n",tag->TagName,cip_errno,cip_err_msg);
					result=0;
				}
			}; break;
		case LGX:
		{
			LGX_Read *data=ReadLgxData(tag->Plc->Session,tag->Plc->Connection,tag->TagName,1);
			if (data!=NULL)
			{
				tag->Value=GetLGXValueAsFloat(data,0);
				if (!cip_errno) 
				{
					Log(LOG_DEBUG,"%s on %s = %f (%s)\n",tag->TagName,tag->Plc->PlcName,tag->Value,cip_err_msg);
					result=1;
				}	else 
				{
					Log(LOG_WARNING,"Get value : (%d) %s\n",cip_errno,cip_err_msg);
					result=0;
				}
				free(data);
			} else 
			{
				Log(LOG_WARNING,"ReadLgxData error on tag : %s (%s)\n",tag->TagName,cip_err_msg);
				result=0;
			}
		}; break;
		default:Log(LOG_WARNING,"Plc type unknow for : %s\n",tag->Plc->PlcName);
			break;
	}
	if (result) tag->Time_Value=time(NULL);
	return(result);
}