int GetPlc(char *Alias,char *Aliasfile,PLC *plc) { char Temp_Alias[MAXPATHSIZE]; char Path[MAXPATHSIZE]; char Type[MAXALIASSIZE]; char NetWork[MAXALIASSIZE]; int Node=0; FILE *fp=fopen(Aliasfile,"r"); if (fp!=NULL) { while (!feof(fp)) { if (fscanf(fp,"%30s %50s %10s %10s %d",Temp_Alias,Path,Type,NetWork,&Node)==5) { if (!strncasecmp(Temp_Alias,Alias,strlen(Alias))) // find { Log(LOG_DEBUG,"%s = %s (%s,%s,%d)\n",Alias,Path,Type,NetWork,Node); memset(plc,0,sizeof(PLC)); strncpy(plc->PlcName,Temp_Alias,sizeof(plc->PlcName)); strncpy(plc->PlcPath,Path,sizeof(plc->PlcPath)); plc->PlcType=GetPlcType(Type); plc->NetWork=GetNetType(NetWork); plc->Node=Node; fclose(fp); return(TR_Ok); } } } fclose(fp); return(TR_Error); } else { Log(LOG_WARNING,"Alias file %s : %s\n",Aliasfile,strerror(errno)); return(TR_Error); } }
OP_STATUS Notice(const PosixNetworkAddress *what, bool up) { const enum OpSocketAddressNetType type = GetNetType(); if (type == NETTYPE_UNDETERMINED || (m_up == up ? type < what->GetNetType() : up)) { RETURN_IF_ERROR(Import(what)); m_up = up; } return OpStatus::OK; }
PLC *GetPlc(char *str) { char Path[MAXPATHSIZE]; char Type[MAXALIASSIZE]; char NetWork[MAXALIASSIZE]; int Node=0; if (sscanf(str,"%50s %10s %10s %d",Path,Type,NetWork,&Node)==4) { PLC *plc=malloc(sizeof(PLC)); if (plc!=NULL) { Log(LOG_DEBUG,"Writing to %s (%s,%s,%d)\n",Path,Type,NetWork,Node); bzero(plc,sizeof(PLC)); strncpy(plc->PlcPath,Path,sizeof(plc->PlcPath)); plc->PlcType=GetPlcType(Type); plc->NetWork=GetNetType(NetWork); plc->Node=Node; } return(plc); } else return(NULL); }
int main (int argc,char *argv[]) { // Gestion des signaux signal(SIGTERM,SigHand); signal(SIGINT,SigHand); signal(SIGSEGV,SigHand); int c; PLC plc={"","",LGX,0,0}; // LGX on CNET char Alias[MAXALIASSIZE]="\0"; char TagName[MAXALIASSIZE]="\0"; char responseValue[30]=""; while ((c=getopt(argc,argv,"dl:f:w:a:p:c:r:n:?h"))!=EOF) switch(c) { case 'd': //debug mode { debug=1; }break; case 'l': { switch (atoi(optarg)) { case 3:debuglevel=LOG_DEBUG;break; case 2:debuglevel=LOG_NOTICE;break; case 1:debuglevel=LOG_WARNING;break; case 0:debuglevel=LOG_ERR;break; default:debuglevel=LOG_WARNING;break; } };break; case 'f': //Alias file { strcpy(AliasFile,optarg); }break; case 'w': //Value to write { strcpy(writeValue,optarg); isWrite = TRUE; }break; case 'a': //Alias { strcpy(Alias,optarg); }break; case 'p': //Path { strcpy(plc.PlcPath,optarg); }break; case 'c': //Plc Type { plc.PlcType=GetPlcType(optarg); };break; case 'r': //Network Type { plc.NetWork=GetNetType(optarg); };break; case 'n': //Node address { plc.Node=atoi(optarg); };break; case '?': case 'h': { printf("%s (Build on %s %s)\n",LOG_TITLE,__DATE__,__TIME__); printf("usage: %s:[-d] [-l0-3] [-f Alias file] [-w Value] [-?,h] {-a alias || -p path -c Plc type -r network type -n node address} var\n",argv[0]); printf("-d\tDebug mode to screen\n"); printf("-l{0..3}\t(default :1)\n"); printf("\t0\tLOG_ERR\n"); printf("\t1\tLOG_WARNING (Default)\n"); printf("\t2\tLOG_NOTICE\n"); printf("\t3\tLOG_DEBUG\n"); printf("-f\tAlias file (Default :\"%s\")\n",AliasFile); printf("-w\tValue to write\n"); printf("-a\tAlias name\n"); printf("-p\tPath \n"); printf("-c\tPlc type {LGX,PLC,SLC} (Default : LGX)\n"); printf("-r\tNetwork type {CNET,DHP_A,DHP_B} (Default : CNET)\n"); printf("-n\tNode address (Default : 0)\n"); return(0); }break; default:break; } if (optind < argc) { strcpy(TagName,argv[optind]); } starttime=time(NULL); Log(LOG_ALERT,"[main] starting...Pid=%d\n",getpid()); if (strlen(Alias)>0) { if (GetPlc(Alias,AliasFile,&plc)!=TR_Ok) { Log(LOG_ERR,"[main] Alias not found\n"); exit(1); } } // affichage test Log(LOG_DEBUG,"[main] AliasFile : %s\n",AliasFile); Log(LOG_DEBUG,"[main] Alias : %s\n",Alias); Log(LOG_DEBUG,"[main] plc.PlcPath : %s\n",plc.PlcPath); Log(LOG_DEBUG,"[main] plc.PlcType : %d\n",plc.PlcType); Log(LOG_DEBUG,"[main] plc.NetWork : %d\n",plc.NetWork); Log(LOG_DEBUG,"[main] plc.Node : %d\n",plc.Node); Log(LOG_DEBUG,"[main] TagName : %s\n",TagName); if (Connect(&plc, TagName, responseValue)==SUCCESS) { printf("%s\n",responseValue); Log(LOG_ALERT,"[main] stopped\n"); exit(SUCCESS); } else { printf("ERR\n"); Log(LOG_ALERT,"[main] stopped\n"); exit(ERROR); } }