/////////////////////////////////////////////////// // // _trdDatabase.ctl // Handels access from FSM devices to database // // J.Mercado $v.120307 // /////////////////////////////////////////////////// bool trdDb_dp2Dp(string source, string target) { dyn_string element,dummy; anytype value; string name,tname; int i; if(dpSubStr(source,DPSUB_DP_EL)==""||dpSubStr(target,DPSUB_DP_EL)=="") return false; element = dpNames(source+".*"); for(i=1;i<=dynlen(element);i++){ name=dpSubStr(element[i],DPSUB_DP_EL); strreplace(name,dpSubStr(element[i],DPSUB_DP),""); dummy = strsplit(name,"."); name = dummy[dynlen(dummy)]; tname=target+"."+name; if(dpSubStr(tname,DPSUB_DP_EL)=="") continue; if(dpElementType(element[i])!=dpElementType(tname)) continue; dpGet(element[i]+":_original.._value",value); dpSetWait(tname,value); } return true; } bool trdDb_writeDb(string dpname) { return trdDb_internalWriteDb(dpname,false); } bool trdDb_writeSetDb(string dpname) { return trdDb_internalWriteDb(dpname,true); } bool trdDb_internalWriteDb(string dpname, bool set) { dyn_string element,dummy; dyn_anytype values; string value; string name,filename,archivename,command; int i,eltype; file f; if(dpSubStr(dpname,DPSUB_DP_EL)==""){ DebugN("Wrong Dp"); return false; } name=dpSubStr(dpname,DPSUB_DP_EL); strreplace(name,dpSubStr(dpname,DPSUB_DP),""); dummy = strsplit(name,"."); if(dpElementType(dpname)==1) name = dummy[dynlen(dummy)]; else name = dummy[dynlen(dummy)-1]; if(set) strreplace(name,"Set",""); filename=PROJ_PATH+"Database/"+dpSubStr(dpname,DPSUB_DP)+"_"+name+".txt"; archivename=PROJ_PATH+"Database/"+formatTime("%y%m%d-%H%M%S-", getCurrentTime())+dpSubStr(dpname,DPSUB_DP)+"_"+name+".txt"; f=fopen(filename,"w"); if(f==0){ DebugN("file not open: "+filename); return false; } strreplace(filename,"/","\\"); strreplace(archivename,"/","\\"); command = "copy /Y "+filename+" "+archivename; if(dpElementType(dpname)==1){//struct element = dpNames(dpname+".*"); for(i=1;i<=dynlen(element);i++){ name=dpSubStr(element[i],DPSUB_DP_EL); strreplace(name,dpSubStr(element[i],DPSUB_DP),""); dummy = strsplit(name,"."); name = dummy[dynlen(dummy)]; eltype = dpElementType(element[i]); dpGet(element[i]+":_original.._value",value); // value = dpValToString(element[i],values[i]); fputs(name+"\t"+eltype+"\t"+value+"\n",f); } } else{ name=dpSubStr(dpname,DPSUB_DP_EL); strreplace(name,dpSubStr(dpname,DPSUB_DP),""); dummy = strsplit(name,"."); name = dummy[dynlen(dummy)]; eltype = dpElementType(dpname); dpGet(dpname+":_original.._value",value); // value = dpValToString(dpname,values[1]); fputs(name+"\t"+eltype+"\t"+value+"\n",f); } fflush(f); fclose(f); // DebugN(command); system(command); return true; } bool trdDb_readDb(string dpname) { string element,value,str; int eltype; file f; string filename; dyn_string dummy; string name; if(dpSubStr(dpname,DPSUB_DP_EL)==""){ DebugN("Wrong Dp"); return false; } name=dpSubStr(dpname,DPSUB_DP_EL); strreplace(name,dpSubStr(dpname,DPSUB_DP),""); dummy = strsplit(name,"."); name = dummy[dynlen(dummy)]; filename=PROJ_PATH+"Database/"+dpSubStr(dpname,DPSUB_DP)+"_"+name+".txt"; f=fopen(filename,"r"); if(f==0){ DebugN("file not open: "+filename); return false; } while(!feof(f)){ fgets(str,1024,f); element=""; eltype=0; value=""; /* if(sscanf(str,"%s%d%s",element,eltype,value)<2) continue; */ if(sscanf(str,"%s%d%s",element,eltype,value)<3){ if(element=="") continue; } if(eltype==dpElementType(dpname+"."+element)){ dpSetWait(dpname+"."+element,value); } else DebugN("Database Error: Wrong data type"); } fclose(f); return true; }