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); } }
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); }
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(); }
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); }