-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathtame.min.js
11 lines (11 loc) · 61.4 KB
/
tame.min.js
1
2
3
4
5
6
7
8
9
10
11
/*!
* TAME [TwinCAT ADS Made Easy] V4.3.1 171120
*
* Copyright (c) 2009-2017 Thomas Schmidt; t.schmidt.p1 at freenet.de
*
* Dual licensed under:
* MIT - http://www.opensource.org/licenses/mit-license
* GPLv3 - http://www.opensource.org/licenses/GPL-3.0
*
*/
(function(){var a={version:"V4.3.1 171120",weekdShortNames:{ge:["So","Mo","Di","Mi","Do","Fr","Sa"],en:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},weekdLongNames:{ge:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],en:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},monthsShortNames:{ge:["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],en:["Jan","Feb","Mar","Apr","May","Jun","July","Aug","Sept","Oct","Nov","Dez"]},monthsLongNames:{ge:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],en:["January","February","March","April","May","June","July","August","September","October","November","December"]}};a.WebServiceClient=function(f){function k(at){try{window.console.log(at)}catch(au){alert(at)}}k("TAME library version: "+a.version);var ad=this,l={M:16416,MX:16417,DB:16448,I:61472,IX:61473,Q:61488,QX:61489,Upload:61451,UploadInfo:61452,HandleByName:61443,ValueByHandle:61445,ReleaseHandle:61446,SumRd:61568,SumWr:61569,SumRdWr:61570},D={BOOL:1,BYTE:1,USINT:1,SINT:1,WORD:2,UINT:2,INT:2,INT16:2,INT1DP:2,INT2DP:2,DWORD:4,UDINT:4,DINT:4,TIME:4,TOD:4,TIME_OF_DAY:4,DATE:4,DT:4,DATE_AND_TIME:4,POINTER:4,REAL:4,LREAL:8,STRING:80,EndStruct:0},W=["INVALID","IDLE","RESET","INIT","START","RUN","STOP","SAVECFG","POWERGOOD","ERROR","SHUTDOWN","SUSPEND","RESUME","CONFIG","RECONFIG"],g=(typeof f.language==="string")?f.language:"ge",m=(function(){var at={},av="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",au;for(au=0;au<av.length;au++){at[au]=av.charAt(au)}return at}()),p=(function(){var at={},av="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",au;for(au=0;au<av.length;au++){at[av.charAt(au)]=au}return at}()),b=0,G=[0],S={},ar={},B={},c=0,w=0,P={},s=[];if(typeof f.serviceUrl!=="string"){k("TAME library error: Service URL is not a string!");return}if(typeof f.amsNetId!=="string"&&(typeof f.configFileUrl!=="string"||f.dontFetchSymbols===true)){k("TAME library error: NetId is not defined and there is no URL for fetching the TPY file or fetching the symbols is deactivated!");return}if(f.amsPort===undefined&&(typeof f.configFileUrl!=="string"||f.dontFetchSymbols===true)){f.amsPort="801";k("TAME library warning: AMS port number is not set! Default port 801 will be used.")}else{if(typeof f.amsPort==="number"){k("TAME library warning: AMS port number is not a string! Trying to convert it.");f.amsPort=f.amsPort.toString(10)}}if(parseInt(f.amsPort,10)<801||parseInt(f.amsPort,10)>891){k("TAME library error: AMS Port Number ("+parseInt(f.amsPort,10)+") is out of range (801-891)!");return}if(f.dataAlign4===true){b=4}else{if(f.alignment===undefined&&(typeof f.configFileUrl!=="string"||f.dontFetchSymbols===true)){b=1}else{if(typeof f.alignment==="string"){b=parseInt(f.alignment,10)}else{if(typeof f.alignment==="number"){b=f.alignment}}}}if(f.syncXmlHttp===true){k('TAME library info: The "syncXmlHttp" parameter is set to true. Synchronous XMLHttpRequests will be used by default.')}else{f.syncXmlHttp=false}if(typeof f.serviceUser==="string"&&typeof f.servicePassword==="string"){k("TAME library info: Username and password set. Authenticated requests will be used.")}else{f.serviceUser=null;f.servicePassword=null}if(f.useHandles===true){k('TAME library info: The "useHandles" parameter is set to true. Handles will be used by default.')}if(f.skipMissingTypes===true){k('TAME library info: The "skipMissingTypes" parameter is set to true. TAME just drops a log message if there are TwinCAT libs with missing data types.')}else{f.skipMissingTypes=false}if(!isNaN(f.adsCheckInterval)&&f.adsCheckInterval>=1){k("TAME library info: Cyclic ADS state checks enabled. Interval time: "+f.adsCheckInterval+" ms.")}this.dateNames={weekdShort:a.weekdShortNames[g],weekdLong:a.weekdLongNames[g],monthsShort:a.monthsShortNames[g],monthsLong:a.monthsLongNames[g]};this.maxStringLen=255;this.maxDropReq=10;this.useCheckBounds=true;this.adsState=null;this.adsStateTxt="";this.deviceState=null;this.symTableReady=false;this.dataTypeTableReady=false;this.handleCacheReady=false;this.xmlHttpReqTimeout=5000;function C(at,aw,av,ay,aB){var ax=[],aA=0,az=[],au=0;if(typeof at==="number"){ax[0]=at.toString(10)}else{if(typeof at==="string"){ax=at.split(".")}else{k("TAME library error: Can't parse name of object/variable. Name is not a string or number!");k(at);return}}if(av===undefined){av=window}aA=ax.length-1;while(au<aA){if(ax[au].charAt(ax[au].length-1)==="]"){az=ax[au].substring(0,ax[au].length-1).split("[");av=av[az[0]][az[1]]}else{if(av[ax[au]]===undefined){av[ax[au]]=[]}av=av[ax[au]]}au++}if(ax[au].charAt(ax[au].length-1)==="]"){az=ax[au].substring(0,ax[au].length-1).split("[");av=av[az[0]];if(aw!==undefined){if(typeof ay==="string"){aw=ay+aw}if(typeof aB==="string"){aw=aw+aB}av[az[1]]=aw}return av[az[1]]}if(aw!==undefined){if(typeof ay==="string"){aw=ay+aw}if(typeof aB==="string"){aw=aw+aB}av[ax[au]]=aw}return av[ax[au]]}function ap(at){if(at===undefined){return false}if(!isNaN(at)&&at>0&&at<=ad.maxStringLen){return true}k("TAME library error: User defined string length not valid! length: "+at);k("Max. string length: "+ad.maxStringLen);return false}function A(au){var at;if(au.addr){if(typeof au.addr==="string"&&au.addr.charAt(0)==="%"){if(au.addr.charAt(2)==="X"){at=l[au.addr.substr(1,2)]}else{at=l[au.addr.substr(1,1)]}}else{k('TAME library error: Wrong address definition, should be a string and start with "%"!');k(au);return}}else{if(au.useHandle===true||f.useHandles===true&&au.useHandle!==false){at=l.ValueByHandle}else{if(au.symbolName){if(typeof au.symbolName==="string"){try{at=S[au.symbolName].indexGroup}catch(av){k("TAME library error: Can't get the IndexGroup for this request!");k("TAME library error: Please check the variable name.");k(av);k(au);return}}else{k("TAME library error: Varible name should be a string!");k(au);return}}else{k("TAME library error: No name, address or handle for the variable/request defined!");k(au);return}}}if(isNaN(at)){k("TAME library error: IndexGroup is not a number, check address or name definition of the variable/request!");k(au)}return at}function j(az){var aw,au="",ay=[],av,aB,at,aA,aD,aC;if(az.addr){if(typeof az.addr==="string"&&az.addr.charAt(0)==="%"){if(az.addr.charAt(2)==="X"){au=az.addr.substr(3);ay=au.split(".");aw=parseInt(ay[0],10)*8+parseInt(ay[1],10)}else{aw=parseInt(az.addr.substr(3),10);if(typeof az.addrOffset==="number"){aw+=az.addrOffset}}}else{k('TAME library error: Wrong address definition, should be a string and start with "%"!');k(az);return}}else{if(az.useHandle===true||f.useHandles===true&&az.useHandle!==false){if(ad.handleCacheReady===true){aw=P[az.fullSymbolName];if(isNaN(aw)){k("TAME library error: Could not get the handle for this symbol name: "+az.fullSymbolName);k(az);return}}else{k("TAME library error: Could not get the handle for this request. Handle cache is not ready.");k(az);return}}else{if(az.symbolName){if(typeof az.symbolName==="string"){try{aw=S[az.symbolName].indexOffset;if(typeof az.symbolNameArrIdx==="number"){aw+=S[az.symbolName].itemSize*(az.symbolNameArrIdx-S[az.symbolName].arrStartIdx)}if(typeof az.addrOffset==="number"){aw+=az.addrOffset}if(typeof az.offs==="string"){aw+=parseInt(az.offs,10)/8}else{if(typeof az.offs==="number"){aw+=az.offs/8}}if(az.dataTypeNames.length>0){at=az.dataTypeNames;aB=S[az.symbolName].dataType;for(av=0;av<at.length;av++){aC=ar[aB].subItems[at[av]];aw+=aC.bitOffset/8;if(typeof az.dataTypeArrIdx[av]==="number"){aw+=aC.itemSize*(az.dataTypeArrIdx[av]-aC.arrStartIdx)}aB=ar[aB].subItems[at[av]].dataType}}}catch(ax){k("TAME library error: Can't get the IndexOffset for this request!");k("TAME library error: Please check the variable definition (name/offs/subitem).");k(ax);k(az);return}}else{k("TAME library error: Varible name should be a string!");k(az);return}}else{k("TAME library error: Neither a name nor an address for the variable/request defined!");k(az);return}}}if(isNaN(aw)){k("TAME library error: IndexOffset is not a number, check address or name definition of the variable/request.");k("IndexOffset: "+aw);k(az)}return aw}function an(aB){var at={},aA,av;if(typeof aB.name==="string"){aB.name=aB.name.toUpperCase();aA=aB.name.split(".")}else{return at}at.fullSymbolName=aB.name;if(aA[0]===""){at.symbolName="."+aA[1]}else{at.symbolName=aA[0]+"."+aA[1]}if(at.symbolName.charAt(at.symbolName.length-1)==="]"){av=at.symbolName.substring(0,at.symbolName.length-1).split("[");at.symbolName=av[0];at.symbolNameArrIdx=parseInt(av[1],10)}at.dataTypeNames=aA.slice(2);var aw=[],ay,az,au;if(ad.symTableReady&&ad.dataTypeTableReady&&at.dataTypeNames.length>0){ay=at.dataTypeNames;az=S[at.symbolName].dataType;at.dataTypeArrIdx=[];au=0;do{if(ay[au].charAt(ay[au].length-1)==="]"){av=ay[au].substring(0,ay[au].length-1).split("[");ay[au]=av[0];at.dataTypeArrIdx[au]=parseInt(av[1],10)}if(ar[az].subItems[ay[au]].pointer===true){k("TAME library error: PLC variable "+[ay[au]]+" is a pointer! Can't get the variable value.")}if(au===ay.length-1){break}az=ar[az].subItems[ay[au]].dataType;au++}while(au<ay.length);try{at.type=ar[az].subItems[ay[au]].type;at.arrayLength=ar[az].subItems[ay[au]].arrayLength;at.arrayDataType=ar[az].subItems[ay[au]].arrayDataType;at.dataType=ar[az].subItems[ay[au]].dataType;at.itemSize=ar[az].subItems[ay[au]].itemSize;if(at.size===undefined){at.size=ar[az].subItems[ay[au]].size}at.bitOffset=ar[az].subItems[ay[au]].bitOffset;at.offs=aB.offs;if(at.type==="STRING"||at.arrayDataType==="STRING"){at.stringLength=ar[az].subItems[ay[au]].stringLength;at.format=at.stringLength}else{if(typeof aB.format==="string"){at.format=aB.format}else{if(typeof aB.decPlaces==="number"){at.format=aB.decPlaces}else{if(typeof aB.dp==="number"){at.format=aB.dp}}}}if(at.dataTypeArrIdx[au]!==undefined&&at.type==="ARRAY"){at.type=ar[az].subItems[ay[au]].arrayDataType;at.size=ar[az].subItems[ay[au]].itemSize}}catch(ax){k("TAME library error: A problem occured while reading a data type from the data type table!");k(ax);k(aB)}}else{if(ad.symTableReady){if(typeof S[aB.name]=="object"){try{at.type=S[aB.name].type;at.arrayLength=S[aB.name].arrayLength;at.arrayDataType=S[aB.name].arrayDataType;at.dataType=S[aB.name].dataType;at.itemSize=S[aB.name].itemSize;if(at.size===undefined){at.size=S[aB.name].size}at.bitOffset=S[aB.name].bitOffset;at.offs=aB.offs;if(at.type==="STRING"||at.arrayDataType==="STRING"){at.stringLength=S[aB.name].stringLength;at.format=at.stringLength}else{if(typeof aB.format==="string"){at.format=aB.format}else{if(typeof aB.decPlaces==="number"){at.format=aB.decPlaces}else{if(typeof aB.dp==="number"){at.format=aB.dp}}}}if(at.symbolNameArrIdx!==undefined&&at.type==="ARRAY"){at.type=S[aB.name].arrayDataType;at.size=S[aB.name].itemSize}}catch(ax){k("TAME library error: A problem occured while reading a data type from the symbol table!");k(ax);k(aB)}}else{if(typeof aB.type!="string"){k("TAME library error: Neither an entry for this symbol in the symbol table nor the type defined by user!");k(aB)}}}}if(typeof aB.type=="string"){aw=aB.type.split(".");if(aw.length>2){aw[1]=aw.slice(1).join(".")}if(at.type!=="ARRAY"&&at.type!=="USER"){at.type=aw[0]}if(at.type==="STRING"&&aw[1]!==undefined){aw[1]=parseInt(aw[1],10);if(ap(aw[1])){at.format=aw[1];at.stringLength=at.format;at.size=at.format++}else{at.format=D.STRING;k("TAME library warning: Length of string variable not defined: "+aB.name);k("TAME library warning: A length of 80 characters (TwinCAT default) will be used.")}}else{if(at.type==="ARRAY"){at.arrayDataType=aw[0];at.format=aw[1]}else{if(at.type==="USER"){}else{at.format=aw[1];at.size=D[at.type]}}}if(typeof aB.format==="string"){at.format=aB.format}else{if(typeof aB.decPlaces==="number"){at.format=aB.decPlaces}else{if(typeof aB.dp==="number"){at.format=aB.dp}}}}if(typeof at.type!="string"){k("TAME library error: Could not get the type of the item!");k(aB)}return at}function ac(){var au;if(window.XMLHttpRequest){au=new window.XMLHttpRequest()}else{try{au=new window.ActiveXObject("Msxml2.XMLHTTP")}catch(av){try{au=new window.ActiveXObject("Microsoft.XMLHTTP")}catch(at){au=null;k("TAME library error: Failed Creating XMLHttpRequest-Object!")}}}return au}function v(at){if(at.reqDescr===undefined){at.reqDescr={}}else{if(at.reqDescr.debug){k(at)}}at.send=function(){var au,av;if(typeof this.reqDescr.id==="number"&&G[this.reqDescr.id]>0){k("TAME library warning: Request dropped (last request with ID "+at.reqDescr.id+" not finished!)");G[this.reqDescr.id]++;if(G[this.reqDescr.id]<=ad.maxDropReq){return}G[this.reqDescr.id]=0}if(at.sync===true){av=false}else{if(this.reqDescr.sync===true){av=false}else{if(this.reqDescr.sync===false){av=true}else{if(f.syncXmlHttp===true){av=false}else{av=true}}}}this.xmlHttpReq=ac();au="<?xml version='1.0' encoding='utf-8'?>";au+="<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' ";au+="xmlns:xsd='http://www.w3.org/2001/XMLSchema' ";au+="xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>";au+="<soap:Body><q1:";au+=this.method;au+=" xmlns:q1='http://beckhoff.org/message/'><netId xsi:type='xsd:string'>";au+=f.amsNetId;au+="</netId><nPort xsi:type='xsd:int'>";au+=f.amsPort;au+="</nPort>";if(this.indexGroup!==undefined){au+="<indexGroup xsi:type='xsd:unsignedInt'>";au+=this.indexGroup;au+="</indexGroup>"}if(this.indexOffset!==undefined){au+="<indexOffset xsi:type='xsd:unsignedInt'>";au+=this.indexOffset;au+="</indexOffset>"}if((this.method==="Read"||this.method==="ReadWrite")&&this.reqDescr.readLength>0){au+="<cbRdLen xsi:type='xsd:int'>";au+=this.reqDescr.readLength;au+="</cbRdLen>"}if(this.pData&&this.pData.length>0){au+="<pData xsi:type='xsd:base64Binary'>";au+=this.pData;au+="</pData>"}if(this.pwrData&&this.pwrData.length>0){au+="<pwrData xsi:type='xsd:base64Binary'>";au+=this.pwrData;au+="</pwrData>"}au+="</q1:";au+=this.method;au+="></soap:Body></soap:Envelope>";if(typeof this.xmlHttpReq==="object"){this.xmlHttpReq.open("POST",f.serviceUrl,av,f.serviceUser,f.servicePassword);this.xmlHttpReq.setRequestHeader("SOAPAction","http://beckhoff.org/action/TcAdsSync."+this.method);this.xmlHttpReq.setRequestHeader("Content-Type","text/xml; charset=utf-8");if(av===true){this.xmlHttpReq.timeout=ad.xmlHttpReqTimeout;this.xmlHttpReq.ontimeout=function(aw){k("TAME library error: XMLHttpRequest timed out. Timeout "+ad.xmlHttpReqTimeout+" milliseconds.");k(aw);if(typeof at.reqDescr.ot==="function"){at.reqDescr.ot()}};this.xmlHttpReq.onreadystatechange=function(){if(at.xmlHttpReq.readyState===4){if(at.xmlHttpReq.status===200){ad.parseResponse(at)}else{k("TAME library error: XMLHttpRequest returns an error. Status code : "+at.xmlHttpReq.status);if(typeof at.reqDescr.oe==="function"){at.reqDescr.oe()}}}};this.xmlHttpReq.send(au)}else{this.xmlHttpReq.send(au);ad.parseResponse(at)}if(typeof this.reqDescr.id==="number"){G[this.reqDescr.id]=1}}};return at}function X(aw,av,au,at){var ax;if(typeof aw.val==="string"){if(av==="REAL"||av==="LREAL"){ax=parseFloat(aw.val)}else{ax=parseInt(aw.val,10)}}else{if(typeof aw.val==="number"){ax=aw.val}else{k("TAME library error: Wrong variable type for a numeric variable in write request!");k("TAME library error: Variable type should be number or string, but is "+typeof aw.val);k(aw);ax=0}}if(isNaN(ax)){ax=0;k("TAME library error: Value of a numeric variable in write request is not a number.");k(aw)}if(ad.useCheckBounds===true){if(av==="LREAL"){if(!isFinite(ax)){k("TAME library warning: Limit for LREAL value exceeded!");k("Upper limit: "+Number.MAX_VALUE);k("Lower limit: "+Number.MIN_VALUE);k("value: "+ax);k(aw)}}else{if(av==="REAL"){if(ax>0){if(ax<1.175495e-38){k("TAME library warning: Lower limit for positive REAL value exceeded!");k("limit: 1.175495e-38");k("value: "+ax);k(aw);ax=1.175495e-38}else{if(ax>3.402823e+38){k("TAME library warning: Upper limit for positive REAL value exceeded!");k("limit: 3.402823e+38");k("value: "+ax);k(aw);ax=3.402823e+38}}}else{if(ax<0){if(ax>-1.175495e-38){k("TAME library warning: Upper limit for negative REAL value exceeded!");k("limit: -1.175495e-38");k("value: "+ax);k(aw);ax=-1.175495e-38}else{if(ax<-3.402823e+38){k("TAME library warning: Lower limit for negative REAL value exceeded!");k("limit: -3.402823e+38");k("value: "+ax);k(aw);ax=-3.402823e+38}}}}}else{if(ax<au){k("TAME library warning: Lower limit for numeric value exceeded!");k("type: "+av);k("limit: "+au);k("value: "+ax);k(aw);ax=au}else{if(ax>at){k("TAME library warning: Upper limit for numeric value exceeded!");k("type: "+av);k("limit: "+at);k("value: "+ax);k(aw);ax=at}}}}}return ax}function al(aw){var at=[],ax,au,av;if(typeof aw.type==="string"){at=aw.type.split(".");if(at.length>2){at[1]=at.slice(1).join(".")}}else{k("TAME library error: Could not get the type of the item (function getTypeAndFormat())!");k(aw)}return at}function h(au){var aw={},at,av;av=ar[au].subItems;for(at in av){if(av[at].type==="USER"){k("TAME library error: Automatic creating of nested structures is not supported (yet)!");aw[at]=h(av[at].dataType)}else{if(av.hasOwnProperty(at)){aw[at]=av[at].fullType}}}return aw}function M(at){if((at>=97)&&(at<=102)){return(at-87)}if((at>=65)&&(at<=70)){return(at-55)}if((at>=48)&&(at<=57)){return(at-48)}return 0}function aj(ax,au){var at=[],aw=ax.toString(16),av;while(aw.length<au*2){aw="0"+aw}for(av=0;av<au;av++){at[(au-1)-av]=((M(aw.charCodeAt(av*2))*16)+M(aw.charCodeAt((av*2)+1)))}return at}function r(au){var ax=0,aA=0,ay,at,aw,az,av;at=Math.abs(au);if(au!==0){for(av=128;av>-127;av--){aw=at/Math.pow(2,av);if(aw>=2){break}az=av;ay=aw}az+=127;ay=ay.toString(2);for(av=2;av<25;av++){ax<<=1;if(ay.charAt(av)==="1"){ax+=1}}if(ay.charAt(25)==="1"){ax+=1}aA=az;aA<<=23;aA+=ax;if(au<0){aA+=2147483648}}return aA}function F(az){var av=0,aB=0,aw={part1:0,part2:0},aC,ay,au,at,aA,ax;aC=Math.abs(az);if(az!==0){for(ax=1024;ax>=-1023;ax--){ay=aC/Math.pow(2,ax);if(ay>=2){break}au=ax;aA=ay}au+=1023;aA=aA.toString(2);for(ax=2;ax<22;ax++){av<<=1;if(aA.charAt(ax)==="1"){av+=1}}if(aA.charAt(ax)==="1"){at=true}ax++;for(ax;ax<54;ax++){aB<<=1;if(aA.charAt(ax)==="1"){aB+=1}}aw.part1=au;aw.part1<<=20;aw.part1+=av;if(az<0){aw.part1+=2147483648}aw.part2=aB;if(at===true){aw.part2+=2147483648}}return aw}function N(av,au){var at;switch(au){case"#d":case"#dd":at=av*86400000;break;case"#h":case"#hh":at=av*3600000;break;case"#m":case"#mm":at=av*60000;break;case"#s":case"#ss":at=av*1000;break;case"#ms":case"#msmsms":at=av;break;default:at=av;break}return at}function E(aA,aC){var at=aC.split("#"),az=at.length,aB=/:|\.|-|_/,av=0,au=0,ax,aw,ay,aD;for(aw=1;aw<az;aw++){if(aB.test(at[aw])===true){aD=true}}if(aD!==true){k("TAME library error: No separator ( : . - _ ) for TOD string found!");k("String: "+aA);k("Format: "+aC);return 0}ay=aA.split(aB);for(aw=1;aw<az;aw++){switch(at[aw]){case"h":case"hh":ax=parseInt(ay[au],10)*3600000;au++;break;case"m":case"mm":ax=parseInt(ay[au],10)*60000;au++;break;case"s":case"ss":ax=parseInt(ay[au],10)*1000;au++;break;case"ms":case"msmsms":ax=parseInt(ay[au],10);au++;break;default:ax=0}av+=ax}return av}function o(az){var ay=m,aw=0,au="",ax,av,at;while(aw<az.length){ax=az[aw++];av=az[aw++];at=az[aw++];au=au+ay[ax>>2]+ay[((ax&3)<<4)|(av>>4)]+(isNaN(av)?"=":ay[(((av&15)<<2)|(at>>6))])+((isNaN(av)||isNaN(at))?"=":ay[at&63])}return au}function e(az,ax,ay,aw){var aB=[],at,aA,au,av;if(az.val===undefined){switch(ax){case"STRING":az.val="";break;case"DATE":case"DT":case"TOD":case"TIME_OF_DAY":case"DATE_AND_TIME":az.val=new Date();break;default:az.val=0;break}k("TAME library warning: Value of a variable in write request is not defined!");k(az)}switch(ax){case"BOOL":if(az.val){aB[0]=1}else{aB[0]=0}break;case"BYTE":case"USINT":at=X(az,ax,0,255);aB=aj(at,aw);break;case"SINT":at=X(az,ax,-128,127);if(at<0){at=at+256}aB=aj(at,aw);break;case"WORD":case"UINT":at=X(az,ax,0,65535);aB=aj(at,aw);break;case"INT":case"INT16":at=X(az,ax,-32768,32767);if(at<0){at=at+65536}aB=aj(at,aw);break;case"INT1DP":az.val=Math.round(az.val*10);at=X(az,ax,-32768,32767);if(at<0){at=at+65536}aB=aj(at,aw);break;case"INT2DP":az.val=Math.round(az.val*100);at=X(az,ax,-32768,32767);if(at<0){at=at+65536}aB=aj(at,aw);break;case"DWORD":case"UDINT":at=X(az,ax,0,4294967295);aB=aj(at,aw);break;case"DINT":at=X(az,ax,-2147483648,2147483647);if(at<0){at=at+4294967296}aB=aj(at,aw);break;case"REAL":at=X(az,ax);at=r(at);aB=aj(at,aw);break;case"LREAL":at=X(az,ax);at=F(at);aB=aj(at.part2,4);aB=aB.concat(aj(at.part1,4));break;case"DATE":if(typeof az.val==="object"){az.val.setHours(0);az.val.setMinutes(0);az.val.setSeconds(0);at=az.val.getTime()/1000-az.val.getTimezoneOffset()*60}else{k("TAME library error: Value of a DATE variable in write request is not a date object!");k(az)}aB=aj(at,aw);break;case"DT":case"DATE_AND_TIME":if(typeof az.val==="object"){at=az.val.getTime()/1000-az.val.getTimezoneOffset()*60}else{k("TAME library error: Value of a DT variable in write request is not a date object!");k(az)}aB=aj(at,aw);break;case"TOD":case"TIME_OF_DAY":if(typeof az.val==="object"){az.val.setYear(1970);az.val.setMonth(0);az.val.setDate(1);at=az.val.getTime()-az.val.getTimezoneOffset()*60000}else{if(typeof az.val==="string"){if(ay===""||ay===undefined){ay="#hh#:#mm";k("TAME library warning: No format given for TOD string! Using default #hh#:#mm.");k(az)}at=E(az.val,ay)}else{k("TAME library error: TOD value in write request is wether a date object nor a string!");k(az)}}aB=aj(at,aw);break;case"STRING":aA=(ay===undefined)?D.STRING:parseInt(ay,10);if(ap(aA)){au=aA<az.val.length?aA:az.val.length;for(av=0;av<au;av++){aB[av]=az.val.charCodeAt(av)}for(av;av<aA;av++){aB[av]=0}aB[av]=0}break;case"TIME":at=parseInt(az.val,10);if(isNaN(at)){k("TAME library warning: Value of a TIME variable in write request is not defined!");k(az);at=0}at=N(at,ay);if(at<0){at=0;k("TAME library warning: Lower limit for TIME variable in write request exceeded!)");k("value: "+az.val+ay);k(az)}else{if(at>4294967295){at=4294967295;k("TAME library warning: Upper limit for TIME variable in write request exceeded!)");k("value: "+az.val+ay);k(az)}}aB=aj(at,aw);break;case"EndStruct":break;default:k("TAME library error: Unknown data type in write request : "+ax);break}return aB}function t(au){var at=au.toString(16);if((at.length%2)!==0){at="0"+at}return at}function i(au,at){at=(isNaN(at))?0:at;var av=au.toString(10);while(av.length<at){av="0"+av}return av}function aq(az,ay){var at=ay.split("#"),ax=at.length,au="",aw,av;for(av=1;av<ax;av++){switch(at[av]){case"D":aw=az.getDate();break;case"DD":aw=az.getDate();aw=i(aw,2);break;case"WD":aw=az.getDay();break;case"WKD":aw=ad.dateNames.weekdShort[az.getDay()];break;case"WEEKDAY":aw=ad.dateNames.weekdLong[az.getDay()];break;case"M":aw=az.getMonth()+1;break;case"MM":aw=az.getMonth()+1;aw=i(aw,2);break;case"MON":aw=ad.dateNames.monthsShort[az.getMonth()];break;case"MONTH":aw=ad.dateNames.monthsLong[az.getMonth()];break;case"YY":aw=az.getYear();while(aw>100){aw-=100}break;case"YYYY":aw=az.getFullYear();break;case"h":aw=az.getHours();break;case"hh":aw=az.getHours();aw=i(aw,2);break;case"m":aw=az.getMinutes();break;case"mm":aw=az.getMinutes();aw=i(aw,2);break;case"s":aw=az.getSeconds();break;case"ss":aw=az.getSeconds();aw=i(aw,2);break;case"ms":aw=az.getMilliseconds();break;case"msmsms":aw=az.getMilliseconds();aw=i(aw,3);break;default:aw=at[av];break}au=au+aw}return au}function L(az,ay){var at=ay.split("#"),ax=at.length,au="",aw,av;for(av=1;av<ax;av++){switch(at[av]){case"d":if(ax<=2){aw=az/86400000}else{aw=Math.floor(az/86400000);az=az%86400000}break;case"dd":if(ax<=2){aw=az/86400000}else{aw=Math.floor(az/86400000);az=az%86400000}aw=i(aw,2);break;case"h":if(ax<=2){aw=az/3600000}else{aw=Math.floor(az/3600000);az=az%3600000}break;case"hh":if(ax<=2){aw=az/3600000}else{aw=Math.floor(az/3600000);az=az%3600000}aw=i(aw,2);break;case"m":if(ax<=2){aw=az/60000}else{aw=Math.floor(az/60000);az=az%60000}break;case"mm":if(ax<=2){aw=az/60000}else{aw=Math.floor(az/60000);az=az%60000}aw=i(aw,2);break;case"s":if(ax<=2){aw=az/1000}else{aw=Math.floor(az/1000);az=az%1000}break;case"ss":if(ax<=2){aw=az/1000}else{aw=Math.floor(az/1000);az=az%1000}aw=i(aw,2);break;case"ms":aw=az;break;case"msmsms":aw=az;aw=i(aw,3);break;default:aw=at[av];break}au=au+aw}return au}function V(au){var at=t(au.charCodeAt(0));return parseInt(at,16)}function ak(at){var au=V(at);if(au>127){au=au-256}return au}function R(au){var at=t(au.charCodeAt(1));at+=t(au.charCodeAt(0));return parseInt(at,16)}function Q(at){var au=R(at);if(au>32767){au=au-65536}return au}function I(au){var at=t(au.charCodeAt(3));at+=t(au.charCodeAt(2));at+=t(au.charCodeAt(1));at+=t(au.charCodeAt(0));return parseInt(at,16)}function T(at){var au=I(at);if(au>2147483647){au=au-4294967296}return au}function ab(at,av){var au=I(at);if(av===undefined){return au}return(L(au,av))}function n(at,av){var au=new Date(I(at));au=new Date(au.getTime()+au.getTimezoneOffset()*60000);if(av===undefined){return au}return(aq(au,av))}function ai(au,av){var at=new Date(I(au)*1000);at=new Date(at.getTime()+at.getTimezoneOffset()*60000);if(av===undefined){return at}return(aq(at,av))}function q(av){var ax=1,az=0.5,au=I(av),at,ay,aw;if(au===0){return 0}at=((au>>>31)===1)?"-":"+";au<<=1;ay=(au>>>24)-127;au<<=8;for(aw=1;aw<=23;aw++){ax+=au<0?az:0;au<<=1;az/=2}return parseFloat(at+(ax*Math.pow(2,ay)))}function H(av){var au=I(av.substring(4,8)),ay=I(av.substring(0,4)),ax=12,aw=1,aA=0.5,at,az;if(au===0&&ay===0){return 0}at=((au>>>31)===1)?"-":"+";au<<=1;az=(au>>>21)-1023;au<<=11;while(ax<32){aw+=au<0?aA:0;au<<=1;aA/=2;ax++}if((ay>>>31)===1){aw+=aA;ay<<=1;aA/=2}while(ax<64){aw+=ay<0?aA:0;ay<<=1;aA/=2;ax++}return parseFloat(at+(aw*Math.pow(2,az)))}function ag(at){return at.split(String.fromCharCode(0))[0]}function U(aw){var ax=p,az=0,at="",ay,av,au,aD,aC,aB,aA;aw=aw.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{aD=ax[aw.charAt(az++)];aC=ax[aw.charAt(az++)];aB=ax[aw.charAt(az++)];aA=ax[aw.charAt(az++)];ay=(aD<<2)|(aC>>4);av=((aC&15)<<4)|(aB>>2);au=((aB&3)<<6)|aA;at+=String.fromCharCode(ay);if(aB!==64){at+=String.fromCharCode(av)}if(aA!==64){at+=String.fromCharCode(au)}}while(az<aw.length);return at}function Z(au,at,aw){var av;switch(at){case"BOOL":av=(au.charCodeAt(0)!="0");break;case"BYTE":case"USINT":av=V(au);break;case"SINT":av=ak(au);break;case"WORD":case"UINT":av=R(au);break;case"INT":case"INT16":av=Q(au);break;case"INT1DP":av=((Q(au))/10).toFixed(1);break;case"INT2DP":av=((Q(au))/100).toFixed(2);break;case"DWORD":case"UDINT":av=I(au);break;case"DINT":av=T(au);break;case"REAL":av=q(au);if(aw!==undefined){av=av.toFixed(parseInt(aw,10))}break;case"LREAL":av=H(au);if(aw!==undefined){av=av.toFixed(parseInt(aw,10))}break;case"STRING":av=ag(au);break;case"TOD":case"TIME_OF_DAY":av=n(au,aw);break;case"TIME":av=ab(au,aw);break;case"DT":case"DATE":case"DATE_AND_TIME":av=ai(au,aw);break;case"EndStruct":break;default:k("TAME library error: Unknown data type at parsing read request: "+at);break}return av}function y(aL){var at,aD=aL.reqDescr.items,aB=[],aE=0,aI,av,aw,aK,az,aG,aA,aJ,au,aF,aC,ax,ay;try{at=aL.xmlHttpReq.responseXML.documentElement;av=U(at.getElementsByTagName("ppData")[0].firstChild.data);for(aC=0,ax=aD.length;aC<ax;aC++){aI=aD[aC];aB=al(aI);au=aB[0];aF=aB[1];aG=D[au];switch(au){case"STRING":if(aF!==undefined){az=parseInt(aF,10)}aG=(ap(az)?az:aG)+1;break;case"EndStruct":aG=aI.val;break}aA=aG<b?aG:b;if(aL.reqDescr.seq!==true){ay=j(aL.reqDescr);aE=aI.addr-ay}else{if(aL.reqDescr.calcAlignment===true&&aA>1&&au!=="EndStruct"&&au!=="STRING"&&aE>0){aJ=aE%aA;if(aJ>0){aE+=aA-aJ}}}aw=av.substr(aE,aG);aK=Z(aw,au,aF);if(au!=="EndStruct"){C(aI.jvar,aK,aL.reqDescr.dataObj,aI.prefix,aI.suffix)}if(aL.reqDescr.seq===true){aE+=aG}}}catch(aH){k("TAME library error: Parsing of Read Request failed:"+aH);k(aI);return}}function d(aS){var at,aG=aS.reqDescr.items,aD=[],aK=0,av=0,aI=window,aP=0,aO,ax,ay,aR,aM,aw,aL,aE,aB,az,aH,aJ,aC,aA,aF;function au(){var aU,aT;if(aw==="STRING"){if(aL!==undefined){aU=parseInt(aL,10)}else{if(typeof aF.stringLength==="number"){aU=aF.stringLength}}aM=(ap(aU)?aU:aM)+1}aT=ay.substr(av,aM);aR=Z(aT,aw,aL);C(aH,aR,aI,aO.prefix,aO.suffix);av+=aM}function aQ(){var aV,aU,aZ,aY,aW,aX;function aT(){var a1,a0;if(b>1&&aw!=="STRING"&&aw!=="EndStruct"){a1=aM<b?aM:b;if(a1>1&&av>0){a0=av%a1;if(a0>0){av+=a1-a0}}if(a1>aP){aP=a1}}}if(typeof aO.def==="string"){aO.def=C(aO.def)}else{if(ad.dataTypeTableReady===true&&aO.def===undefined){aO.def=h(aF.dataType)}else{if(typeof aO.def!=="object"){k("TAME library error: No structure defininition found (parseSumReadReq())!");k(aO)}}}for(aX in aO.def){if(aO.def.hasOwnProperty(aX)){aU=aO.def[aX].split(".");if(aU[0]==="ARRAY"){aZ=parseInt(aU[1],10);aY=aU.length-1;for(aV=0;aV<aZ;aV++){aw=aU[2];if(aU[aY]==="SP"){aH=aX+aV;if(aY>=4){aL=aU.slice(3,-1).join(".")}}else{aH=aX+"."+aV;if(aY>=3){aL=aU.slice(3).join(".")}}if(aJ!==null){aH=aJ+"."+aH}aM=D[aw];aT();au()}}else{if(aJ!==null){aH=aJ+"."+aX}else{aH=aX}aw=aU[0];if(aU.length>2){aU[1]=aU.slice(1).join(".")}aL=aU[1];aM=D[aw];aT();au()}}}if(b>1&&aP>1&&aw!=="STRING"&&aw!=="EndStruct"){if(aP>b){aP=b}aW=av%aP;if(aW>0){av+=aP-aW}}}try{at=aS.xmlHttpReq.responseXML.documentElement;ax=U(at.getElementsByTagName("ppRdData")[0].firstChild.data);for(aE=0,aB=aG.length;aE<aB;aE++){ay=ax.substr(aK,4);az=Z(ay,"DWORD");if(az!==0){k("TAME library error: ADS sub command error while processing a SumReadRequest!");k("Error code: "+az);k(aG[aE])}aK+=4}for(aE=0;aE<aB;aE++){aO=aG[aE];aF=an(aO);aw=aF.type;aL=aF.format;aA=aF.size;aJ=null;ay=ax.substr(aK,aA);switch(aw){case"ARRAY":aI=C(aO.jvar);av=0;aC=aF.arrayLength;if(aF.arrayDataType==="USER"){for(aJ=0;aJ<aC;aJ++){aQ()}}else{aw=aF.arrayDataType;aM=D[aw];for(aJ=0;aJ<aC;aJ++){aH=aJ;au()}}break;case"USER":aI=C(aO.jvar);av=0;aQ();break;default:aI=window;aR=Z(ay,aw,aL);C(aO.jvar,aR,aI,aO.prefix,aO.suffix)}aK+=aA}}catch(aN){k("TAME library error: Parsing of SumReadRequest failed:"+aN);k(aO);return}}function z(aN){var at,aE=aN.reqDescr.items,aC=[],aA=[],aG=0,au=0,aF=window,aK,aw,ax,aM,aI,av,aH,aD,az,ay,aB,aL;try{at=aN.xmlHttpReq.responseXML.documentElement;aw=U(at.getElementsByTagName("ppRdData")[0].firstChild.data);for(aD=0,az=aE.length;aD<az;aD++){ax=aw.substr(aG,4);ay=Z(ax,"DWORD");if(ay===0){if(aN.reqDescr.isRelHdlReq===true){aL=aE[aD].toUpperCase();delete P[aL];aB=s.indexOf(aL);delete s[aB];aA[aD]=aL}}else{k("TAME library error: ADS sub command error while processing a SumReadRequest!");k("Error code: "+ay);k(aE[aD])}aG+=4}if(aN.reqDescr.isRelHdlReq===true){for(aD=s.length-1;aD>=0;aD--){if(s[aD]===undefined){s.splice(aD,1)}}if(s.length===0){ad.handleCacheReady=false;k("TAME library info: All handles released.")}else{k("TAME library info: Released handles:");k(aA)}}}catch(aJ){k("TAME library error: Parsing of SumWriteRequest failed:"+aJ);k(aK);return}}function am(av){var at;try{at=av.xmlHttpReq.responseXML.documentElement;ad.adsState=parseInt(at.getElementsByTagName("pAdsState")[0].firstChild.data,10);ad.adsStateTxt=W[ad.adsState];ad.deviceState=parseInt(at.getElementsByTagName("pDeviceState")[0].firstChild.data,10)}catch(au){k("TAME library error: Parsing of ADS Read State Request failed:"+au);return}}function Y(aD){var aw,ax=s,au=0,at=0,ay,av,az,aC,aA,aB,aE;aw=aD.xmlHttpReq.responseXML.documentElement;ay=U(aw.getElementsByTagName("ppRdData")[0].firstChild.data);for(aC=0,aA=ax.length;aC<aA;aC++){av=ay.substr(au,4);aB=Z(av,"DWORD");au+=4;av=ay.substr(au,4);aE=Z(av,"DWORD");au+=4;if(aB!==0){k("TAME library error: Error while reading a handle from the PLC!");k("Error code: "+aB);k("Handle: "+ax[aC]);throw"Handle request aborted!"}}for(aC=0;aC<aA;aC++){av=ay.substr(au,4);az=Z(av,"DWORD");au+=4;P[ax[aC]]=az}ad.handleCacheReady=true;k("TAME library info: Handle cache ready.")}function O(az,ay,aw){var av={},ax,at,au;aw.type=ay;au=an(aw);at=D[ay];switch(ay){case"STRING":if(ap(aw.strlen)){ay+="."+aw.strlen;at=aw.strlen}else{if(typeof au.stringLength==="number"){at=au.stringLength;ay+="."+at}else{k("TAME library error: Could not get the length of the string for this request!");k(aw)}}at++;break;case"TIME":case"TOD":case"DT":case"DATE":case"DATE_AND_TIME":case"TIME_OF_DAY":if(typeof aw.format==="string"){ay+="."+aw.format}break;case"REAL":case"LREAL":if(typeof aw.decPlaces==="number"){ay+="."+aw.decPlaces}else{if(typeof aw.dp==="number"){ay+="."+aw.dp}}break}av={addr:aw.addr,symbolName:au.symbolName,dataTypeNames:au.dataTypeNames,dataTypeArrIdx:au.dataTypeArrIdx,symbolNameArrIdx:au.symbolNameArrIdx,fullSymbolName:aw.name,useHandle:aw.handle,id:aw.id,oc:aw.oc,ocd:aw.ocd,oe:aw.oe,ot:aw.ot,readLength:at,debug:aw.debug,sync:aw.sync,offs:aw.offs,seq:true,items:[{val:aw.val,jvar:aw.jvar,type:ay,prefix:aw.prefix,suffix:aw.suffix}]};if(az==="Write"){ad.writeReq(av)}else{ad.readReq(av)}}function J(aw,ax,av){var ay={},aK={},aE,au,aM=0,aN=0,aL=0,aO,at=[],aQ,aA,aD=0,aF,aB,aP=0,aG=0,aS,aC,aR,aI,aH;aH=an(av);if(aw==="Write"&&typeof av.val==="object"){aK=av.val}else{if(typeof av.jvar==="string"){aK=C(av.jvar)}else{k("TAME library error: No data object for this "+aw+"-Request defined!")}}if(typeof av.arrlen==="number"){aE=av.arrlen}else{if(aH.arrayLength!==undefined){aE=aH.arrayLength}else{k("TAME library error: Can't get the array length for this request!");k(av)}}if(typeof av.item==="number"&&!isNaN(av.item)&&aw==="Write"){aR=true;if(av.item<0||av.item>aE-1){k('TAME library error: Wrong value for "item"!');k("item: "+av.item);k("Last array index: "+(aE-1))}}function az(){var aT;if(typeof av.def==="string"){av.def=C(av.def)}else{if(ad.dataTypeTableReady===true&&av.def===undefined){av.def=h(aH.dataType)}else{if(typeof av.def!=="object"){k("TAME library error: No structure definition found!")}}}for(aT in av.def){if(av.def.hasOwnProperty(aT)){at=av.def[aT].split(".");if(at[0]==="ARRAY"){aQ=parseInt(at[1],10);at.shift();at.shift()}else{aQ=1}for(aN=0;aN<aQ;aN++){if(at[0]==="STRING"){if(typeof at[1]==="string"){aF=parseInt(at[1],10)}aB=(ap(aF)?aF:D[at[0]])+1}else{aB=D[at[0]]}if(b>1&&aB>1&&at[0]!=="STRING"&&aD>0){aS=aD%aB;if(aS>0){aD+=aB-aS}}aD+=aB}if(b>1&&aB>aP&&at[0]!=="STRING"){aP=aB}}}if(b>1&&aP>1&&at[0]!=="STRING"){if(aP>b){aP=b}aS=aD%aP;if(aS>0){aG=aP-aS;aD+=aG}}if(aR){au=aD*av.item;aE=1}ay={addr:av.addr,symbolName:aH.symbolName,dataTypeNames:aH.dataTypeNames,fullSymbolName:av.name,addrOffset:au,useHandle:av.handle,id:av.id,oc:av.oc,ocd:av.ocd,oe:av.oe,ot:av.ot,debug:av.debug,readLength:aD*aE,seq:true,calcAlignment:true,dataObj:aK,sync:av.sync,offs:av.offs,items:[]};for(aN=0;aN<aE;aN++){for(aT in av.def){if(av.def.hasOwnProperty(aT)){at=av.def[aT].split(".");if(at[0]==="ARRAY"){aQ=parseInt(at[1],10);aA=at.length-1;for(aL=0;aL<aQ;aL++){if(at[aA]==="SP"){ay.items[aM]={jvar:aN+"."+aT+aL};if(aA===4){ay.items[aM].type=at[2]+"."+at[3]}else{ay.items[aM].type=at[2]}}else{ay.items[aM]={jvar:aN+"."+aT+"."+aL};if(aA===3){ay.items[aM].type=at[2]+"."+at[3]}else{ay.items[aM].type=at[2]}}if(aw==="Write"){if(aR){if(at[aA]==="SP"){ay.items[aM].val=aK[av.item][aT+aL]}else{ay.items[aM].val=aK[av.item][aT][aL]}}else{if(at[aA]==="SP"){ay.items[aM].val=aK[aN][aT+aL]}else{ay.items[aM].val=aK[aN][aT][aL]}}}aM++}}else{ay.items[aM]={jvar:aN+"."+aT,type:av.def[aT]};if(aw==="Write"){if(aR){ay.items[aM].val=aK[av.item][aT]}else{ay.items[aM].val=aK[aN][aT]}}aM++}}}if(b>1){ay.items[aM]={type:"EndStruct",val:aG};aM++}}}function aJ(){aO=D[ax];switch(ax){case"STRING":if(ap(av.strlen)){ax+="."+av.strlen;aO=av.strlen}else{if(typeof aH.stringLength==="number"){aO=aH.stringLength;ax+="."+aO}else{k("TAME library error: Could not get the length of the string for this request!");k(av)}}aO++;break;case"TIME":case"TOD":case"DT":case"DATE":case"DATE_AND_TIME":case"TIME_OF_DAY":if(typeof av.format==="string"){ax+="."+av.format}break;case"REAL":case"LREAL":if(typeof av.decPlaces==="number"){ax+="."+av.decPlaces}else{if(typeof av.dp==="number"){ax+="."+av.dp}}break}if(aR){au=av.item*aO;aE=1}ay={addr:av.addr,symbolName:aH.symbolName,dataTypeNames:aH.dataTypeNames,dataTypeArrIdx:aH.dataTypeArrIdx,symbolNameArrIdx:aH.symbolNameArrIdx,fullSymbolName:av.name,useHandle:av.handle,addrOffset:au,id:av.id,oc:av.oc,ocd:av.ocd,oe:av.oe,ot:av.ot,readLength:aO*aE,debug:av.debug,seq:true,dataObj:aK,items:[]};for(aN=0;aN<aE;aN++){ay.items[aN]={jvar:aN,type:ax};if(aw==="Write"){if(aR){ay.items[aN].val=aK[av.item]}else{ay.items[aN].val=aK[aN]}}}}if(ax==="STRUCT"){az()}else{aJ()}if(aw==="Write"){ad.writeReq(ay)}else{ad.readReq(ay)}}function af(at,aC){var az={},au={},aD=[],ax=0,aB,aw,ay,aA,av;av=an(aC);if(at==="Write"&&typeof aC.val==="object"){au=aC.val}else{if(typeof aC.jvar==="string"){au=C(aC.jvar)}else{k("TAME library error: No data object for this "+at+"-Request defined!")}}if(typeof aC.def==="string"){aC.def=C(aC.def)}else{if(ad.dataTypeTableReady===true&&aC.def===undefined){aC.def=h(av.dataType)}else{if(typeof aC.def!=="object"){k("TAME library error: No structure defininition found (createArrayDescriptor())!");k(aC)}}}az={addr:aC.addr,symbolName:av.symbolName,dataTypeNames:av.dataTypeNames,dataTypeArrIdx:av.dataTypeArrIdx,symbolNameArrIdx:av.symbolNameArrIdx,fullSymbolName:aC.name,useHandle:aC.handle,id:aC.id,oc:aC.oc,ocd:aC.ocd,oe:aC.oe,ot:aC.ot,debug:aC.debug,seq:true,calcAlignment:true,dataObj:au,sync:aC.sync,offs:aC.offs,items:[]};for(ay in aC.def){if(aC.def.hasOwnProperty(ay)){aD=aC.def[ay].split(".");if(aD[0]==="ARRAY"){aw=parseInt(aD[1],10);aB=aD.length-1;for(aA=0;aA<aw;aA++){if(aD[aB]==="SP"){az.items[ax]={jvar:ay+aA};if(aB===4){az.items[ax].type=aD[2]+"."+aD[3]}else{az.items[ax].type=aD[2]}}else{az.items[ax]={jvar:ay+"."+aA};if(aB===3){az.items[ax].type=aD[2]+"."+aD[3]}else{az.items[ax].type=aD[2]}}if(at==="Write"){if(aD[aB]==="SP"){az.items[ax].val=au[ay+aA]}else{az.items[ax].val=au[ay][aA]}}ax++}}else{az.items[ax]={jvar:ay,type:aC.def[ay]};if(at==="Write"){az.items[ax].val=au[ay]}ax++}}}if(at==="Write"){ad.writeReq(az)}else{ad.readReq(az)}}this.writeReq=function(aw){var ay=aw.items,aF={},at=[],aB=[],aI=[],aA,aE,av,az,au,aG,aC,aH,ax,aD;if(typeof aw.name==="string"){aw.name=aw.name.toUpperCase()}for(aD=0,av=ay.length;aD<av;aD++){aH=ay[aD];aB=al(aH);aA=aB[0];aE=aB[1];if(isNaN(D[aA])){k("TAME library error: Could not get the length of the data type: "+aA);k("TAME library error: Probably wrong type definition. Please check the manual.");k(aw);return}az=(D[aA]<b)?D[aA]:b;if(aw.calcAlignment===true&&az>1&&aA!=="STRING"&&aA!=="EndStruct"&&at.length>0){aC=at.length%az;if(aC>0){aG=az-aC;for(ax=1;ax<=aG;ax++){at.push(0)}}}if(aA==="EndStruct"){for(ax=1;ax<=aH.val;ax++){at.push(0)}}else{aI=e(aH,aA,aE,D[aA]);at=at.concat(aI)}}if(at&&at.length>0){at=o(at)}aF={method:"Write",indexGroup:A(aw),indexOffset:j(aw),pData:at,reqDescr:aw};v(aF).send()};this.readReq=function(av){var aD={},aw=av.items,ay=[],aE,aC,ax,at,az,aA,aF,aB,au;if(typeof av.readLength!=="number"){av.readLength=0;for(aB=0,at=aw.length;aB<at;aB++){aE=aw[aB];ay=al(aE);ax=ay[0];aC=ay[1];if(isNaN(D[ax])){k("TAME library error: Could not get the length of the data type: "+ax);k("TAME library error: Probably wrong type definition. Please check the manual.");k(av);return}if(ax==="STRING"){if(typeof aC==="string"){aF=parseInt(aC,10)}aA=(ap(aF)?aF:D[ax])+1}else{aA=D[ax]}if(av.seq===true){if(av.calcAlignment===true&&aA>1&&ax!=="EndStruct"&&ax!=="STRING"&&av.readLength>0){az=av.readLength%aA;if(az>0){av.readLength+=aA-az}}av.readLength+=aA}else{au=j(av);av.readLength=aA+aE.addr-au}}}aD={method:"Read",indexGroup:A(av),indexOffset:j(av),reqDescr:av};v(aD).send()};this.sumReadReq=function(aw){var aE={},ay=aw.items,aB=[],aG=[],aH=[],av=ay.length,ax={},aA,aD,aF,aC,az,at,au;aw.readLength=av*4;for(aC=0;aC<av;aC++){aF=ay[aC];au=an(aF);az=au.size;aw.readLength+=az;ax.val=A(au);aH=e(ax,"UDINT",aD,4);aG=aG.concat(aH);ax.val=j(au);aH=e(ax,"UDINT",aD,4);aG=aG.concat(aH);ax.val=az;aH=e(ax,"UDINT",aD,4);aG=aG.concat(aH)}if(aG.length>0){at=o(aG)}aE={method:"ReadWrite",indexGroup:l.SumRd,indexOffset:ay.length,pwrData:at,reqDescr:aw};v(aE).send()};this.sumWriteReq=function(aw){var aP={},aD=aw.items,az=[],au=[],aB=[],ax=aD.length,aM={},aK=0,av,aH,aJ,aA,aI,aO,aG,aF,ay,aL,at,aC;function aE(){var aQ;aI=D[av];if(av==="STRING"){if(aH!==undefined){aQ=parseInt(aH,10)}else{if(typeof aC.stringLength==="number"){aQ=aC.stringLength}}aH=(ap(aQ)?aQ:aI)}}function aN(){var aT,aY,aQ,aU,aW,aR,aS=[];function aX(){var a0,aZ;if(b>1&&av!=="STRING"&&av!=="EndStruct"){a0=aI<b?aI:b;if(a0>1&&aS.length>0){aW=aS.length%a0;if(aW>0){at=a0-aW;for(aZ=1;aZ<=at;aZ++){aS.push(0)}}}if(a0>aK){aK=a0}}}if(typeof aJ.def==="string"){aJ.def=C(aJ.def)}else{if(ad.dataTypeTableReady===true&&aJ.def===undefined){aJ.def=h(aC.dataType)}else{if(typeof aJ.def!=="object"){k("TAME library error: No structure defininition found (sumWriteReq())!");k(aJ)}}}for(aR in aJ.def){if(aJ.def.hasOwnProperty(aR)){try{aY=aJ.def[aR].split(".");if(aY[0]==="ARRAY"){aQ=parseInt(aY[1],10);aU=aY.length-1;for(aT=0;aT<aQ;aT++){av=aY[2];if(aY[aU]==="SP"){if(aU>=4){aH=aY.slice(3,-1).join(".")}}else{if(aU>=3){aH=aY.slice(3).join(".")}}if(aG!==null){if(aY[aU]==="SP"){aM.val=aJ.val[aG][aR+aT]}else{aM.val=aJ.val[aG][aR][aT]}}else{aM.val=aJ.val[aR][aT]}aE();aX();aB=e(aM,av,aH,aI);aS=aS.concat(aB)}}else{if(aG!==null){aM.val=aJ.val[aG][aR]}else{aM.val=aJ.val[aR]}av=aY[0];if(aY.length>2){aY[1]=aY.slice(1).join(".")}aH=aY[1];aE();aX();aB=e(aM,av,aH,aI);aS=aS.concat(aB)}}catch(aV){k("TAME library error: Could not set values for a structure in SumWriteReq: "+aV);k(aJ)}}}if(b>1&&aK>1&&aY[0]!=="STRING"&&aY[0]!=="EndStruct"){aW=aS.length%aK;if(aW>0){at=aK-aW;for(aF=1;aF<=at;aF++){aS.push(0)}}}au=au.concat(aS)}aw.readLength=ax*4;for(aA=0;aA<ax;aA++){aJ=aD[aA];aC=an(aJ);av=aC.type;aH=aC.format;aI=aC.size;aM.val=A(aC);aB=e(aM,"UDINT",aH,4);au=au.concat(aB);aM.val=j(aC);aB=e(aM,"UDINT",aH,4);au=au.concat(aB);aM.val=aI;aB=e(aM,"UDINT",aH,4);au=au.concat(aB)}for(aA=0;aA<ax;aA++){aJ=aD[aA];aC=an(aJ);av=aC.type;aH=aC.format;aI=aC.size;aG=null;switch(av){case"ARRAY":ay=parseInt(aC.arrayLength,10);if(ay!==aJ.val.length){k("TAME library error: Array length in JS differs from the length in the PLC!");k("Length in JS: "+aJ.val.length);k("Length in PLC: "+ay);k(aJ);return}if(aC.arrayDataType==="USER"){for(aG=0;aG<ay;aG++){aN()}}else{av=aC.arrayDataType;if(av==="STRING"){aH=aC.stringLength}else{aI=aC.itemSize}for(aG=0;aG<ay;aG++){aM.val=aJ.val[aG];aB=e(aM,av,aH,aI);au=au.concat(aB)}}break;case"USER":aN();break;default:if(av==="STRING"){aH=aC.stringLength}else{aI=aC.size}aB=e(aJ,av,aH,aI);au=au.concat(aB)}}if(au.length>0){aO=o(au)}aP={method:"ReadWrite",indexGroup:l.SumWr,indexOffset:aD.length,pwrData:aO,reqDescr:aw};v(aP).send()};this.readAdsState=function(at){var au;if(at===undefined){at={}}else{if(typeof at.oe=="function"){au=at.oe}}at.oe=function(){k("TAME library error: ADS state request failed.");ad.adsState=null;ad.adsStateTxt="";ad.deviceState=null;if(typeof au=="function"){au()}};var av={method:"ReadState",reqDescr:at};v(av).send()};this.logHandleCache=function(){k(P)};this.logSymbols=function(){k(S)};this.logDataTypes=function(){k(ar)};this.getSymbolsAsJSON=function(){var au;if(typeof JSON!=="object"){k("TAME library error: No JSON parser found.")}else{try{au=JSON.stringify(S);return au}catch(at){k("TAME library error: Could not convert the Symbol Table to JSON:"+at)}}};this.setSymbolsFromJSON=function(au){if(typeof JSON!=="object"){k("TAME library error: No JSON parser found.")}else{try{S=JSON.parse(au)}catch(at){k("TAME library error: Could not create the Symbol Table from JSON:"+at);return}ad.symTableReady=true;k("TAME library info: Symbol Table successfully created from JSON data.")}};this.getDataTypesAsJSON=function(){var au;if(typeof JSON!=="object"){k("TAME library error: No JSON parser found.")}else{try{au=JSON.stringify(ar);return au}catch(at){k("TAME library error: Could not convert the Data Type Table to JSON:"+at)}}};this.setDataTypesFromJSON=function(au){if(typeof JSON!=="object"){k("TAME library error: No JSON parser found.")}else{try{ar=JSON.parse(au)}catch(at){k("TAME library error: Could not create the Data Type Table from JSON:"+at);return}ad.dataTypeTableReady=true;k("TAME library info: Data Type Table successfully created from JSON data.")}};this.parseResponse=function(ay){var au,ax,at;if(typeof ay.reqDescr.id==="number"){G[ay.reqDescr.id]=0}if(ay.xmlHttpReq.responseXML===null){k('TAME library error: Request contains no XML data. Object "responseXML" is null.');k('TAME library error: This is the "responseText":');k(ay.xmlHttpReq.responseText);if(typeof ay.reqDescr.oe==="function"){ay.reqDescr.oe()}return}try{au=ay.xmlHttpReq.responseXML.documentElement}catch(aw){k("TAME library error: No XML data in server response: "+aw);if(typeof ay.reqDescr.oe==="function"){ay.reqDescr.oe()}return}try{at=au.getElementsByTagName("faultstring")[0].firstChild.data;try{ax=au.getElementsByTagName("errorcode")[0].firstChild.data}catch(aw){ax="-"}k("TAME library error: Message from server: "+at+" ("+ax+")");if(typeof ay.reqDescr.oe==="function"){ay.reqDescr.oe()}return}catch(av){ax=0}if(typeof au.normalize==="function"){au.normalize()}if(ay.method==="ReadState"){am(ay)}else{if(ay.method==="Read"||ay.method==="ReadWrite"){switch(ay.indexGroup){case l.UploadInfo:aa(ay);break;case l.Upload:ah(ay);break;case l.SumRd:d(ay);break;case l.SumWr:z(ay);break;case l.SumRdWr:Y(ay);break;default:y(ay)}}}if(typeof ay.reqDescr.oc==="function"){if(typeof ay.reqDescr.ocd==="number"){window.setTimeout(ay.reqDescr.oc,ay.reqDescr.ocd)}else{ay.reqDescr.oc()}}};this.getHandles=function(av){var aB={},aC=[],ay=av.symbols.length,aD,aA,ax,at,az,au,aw;k("TAME library info: Fetching handles from the PLC.");av.readLength=ay*12;for(aA=0;aA<ay;aA++){aD=aj(l.HandleByName,4);aC=aC.concat(aD);aD=aj(0,4);aC=aC.concat(aD);aD=aj(4,4);aC=aC.concat(aD);aD=aj(av.symbols[aA].length,4);aC=aC.concat(aD)}for(aA=0;aA<ay;aA++){au=av.symbols[aA].toUpperCase();s[aA]=au;aD=[];for(aw=0;aw<au.length;aw++){aD[aw]=au.charCodeAt(aw)}aC=aC.concat(aD)}if(aC.length>0){at=o(aC)}aB={method:"ReadWrite",indexGroup:l.SumRdWr,indexOffset:ay,pwrData:at,reqDescr:av};v(aB).send()};this.releaseHandles=function(au){var az={},aA=[],aB=[],aw=0,ax=[],av=0,ay,at;k("TAME library info: Releasing handles.");if(au===undefined){au={}}if(au.symbols!==undefined){aw=au.symbols.length;for(ay=0;ay<aw;ay++){ax[ay]=au.symbols[ay].toUpperCase()}}else{aw=s.length;ax=s}au.readLength=aw*4;for(ay=0;ay<aw;ay++){aB=aj(l.ReleaseHandle,4);aA=aA.concat(aB);aB=aj(0,4);aA=aA.concat(aB);aB=aj(4,4);aA=aA.concat(aB)}for(ay=0;ay<aw;ay++){if(typeof P[ax[ay]]==="number"){aB=aj(P[ax[ay]],4);aA=aA.concat(aB)}else{k("TAME library error: Handle for symbol name "+ax[ay]+" does not exist in handle cache!");throw"Releasing Handles aborted!"}}if(aA.length>0){at=o(aA)}au.items=ax;au.isRelHdlReq=true;az={method:"ReadWrite",indexGroup:l.SumWr,indexOffset:aw,pwrData:at,reqDescr:au};v(az).send()};this.writeBool=function(at){O("Write","BOOL",at)};this.writeByte=function(at){O("Write","BYTE",at)};this.writeUsint=function(at){O("Write","USINT",at)};this.writeSint=function(at){O("Write","SINT",at)};this.writeWord=function(at){O("Write","WORD",at)};this.writeUint=function(at){O("Write","UINT",at)};this.writeInt=function(at){O("Write","INT",at)};this.writeInt1Dp=function(at){O("Write","INT1DP",at)};this.writeInt2Dp=function(at){O("Write","INT2DP",at)};this.writeDword=function(at){O("Write","DWORD",at)};this.writeUdint=function(at){O("Write","UDINT",at)};this.writeDint=function(at){O("Write","DINT",at)};this.writeReal=function(at){O("Write","REAL",at)};this.writeLreal=function(at){O("Write","LREAL",at)};this.writeString=function(at){O("Write","STRING",at)};this.writeTime=function(at){O("Write","TIME",at)};this.writeTod=function(at){O("Write","TOD",at)};this.writeDate=function(at){O("Write","DATE",at)};this.writeDt=function(at){O("Write","DT",at)};this.readBool=function(at){O("Read","BOOL",at)};this.readByte=function(at){O("Read","BYTE",at)};this.readUsint=function(at){O("Read","USINT",at)};this.readSint=function(at){O("Read","SINT",at)};this.readWord=function(at){O("Read","WORD",at)};this.readUint=function(at){O("Read","UINT",at)};this.readInt=function(at){O("Read","INT",at)};this.readInt1Dp=function(at){O("Read","INT1DP",at)};this.readInt2Dp=function(at){O("Read","INT2DP",at)};this.readDword=function(at){O("Read","DWORD",at)};this.readUdint=function(at){O("Read","UDINT",at)};this.readDint=function(at){O("Read","DINT",at)};this.readReal=function(at){O("Read","REAL",at)};this.readLreal=function(at){O("Read","LREAL",at)};this.readString=function(at){O("Read","STRING",at)};this.readTime=function(at){O("Read","TIME",at)};this.readTod=function(at){O("Read","TOD",at)};this.readDate=function(at){O("Read","DATE",at)};this.readDt=function(at){O("Read","DT",at)};this.writeStruct=function(at){af("Write",at)};this.readStruct=function(at){af("Read",at)};this.writeArrayOfBool=function(at){J("Write","BOOL",at)};this.writeArrayOfByte=function(at){J("Write","BYTE",at)};this.writeArrayOfUsint=function(at){J("Write","USINT",at)};this.writeArrayOfSint=function(at){J("Write","SINT",at)};this.writeArrayOfWord=function(at){J("Write","WORD",at)};this.writeArrayOfUint=function(at){J("Write","UINT",at)};this.writeArrayOfInt=function(at){J("Write","INT",at)};this.writeArrayOfInt1Dp=function(at){J("Write","INT1DP",at)};this.writeArrayOfInt2Dp=function(at){J("Write","INT2DP",at)};this.writeArrayOfDword=function(at){J("Write","DWORD",at)};this.writeArrayOfUdint=function(at){J("Write","UDINT",at)};this.writeArrayOfDint=function(at){J("Write","DINT",at)};this.writeArrayOfReal=function(at){J("Write","REAL",at)};this.writeArrayOfLreal=function(at){J("Write","LREAL",at)};this.writeArrayOfString=function(at){J("Write","STRING",at)};this.writeArrayOfTime=function(at){J("Write","TIME",at)};this.writeArrayOfTod=function(at){J("Write","TOD",at)};this.writeArrayOfDate=function(at){J("Write","DATE",at)};this.writeArrayOfDt=function(at){J("Write","DT",at)};this.writeArrayOfStruct=function(at){J("Write","STRUCT",at)};this.readArrayOfBool=function(at){J("Read","BOOL",at)};this.readArrayOfByte=function(at){J("Read","BYTE",at)};this.readArrayOfUsint=function(at){J("Read","USINT",at)};this.readArrayOfSint=function(at){J("Read","SINT",at)};this.readArrayOfWord=function(at){J("Read","WORD",at)};this.readArrayOfUint=function(at){J("Read","UINT",at)};this.readArrayOfInt=function(at){J("Read","INT",at)};this.readArrayOfInt1Dp=function(at){J("Read","INT1DP",at)};this.readArrayOfInt2Dp=function(at){J("Read","INT2DP",at)};this.readArrayOfDword=function(at){J("Read","DWORD",at)};this.readArrayOfUdint=function(at){J("Read","UDINT",at)};this.readArrayOfDint=function(at){J("Read","DINT",at)};this.readArrayOfReal=function(at){J("Read","REAL",at)};this.readArrayOfLreal=function(at){J("Read","LREAL",at)};this.readArrayOfString=function(at){J("Read","STRING",at)};this.readArrayOfTime=function(at){J("Read","TIME",at)};this.readArrayOfTod=function(at){J("Read","TOD",at)};this.readArrayOfDate=function(at){J("Read","DATE",at)};this.readArrayOfDt=function(at){J("Read","DT",at)};this.readArrayOfStruct=function(at){J("Read","STRUCT",at)};function ae(){var at={method:"Read",indexGroup:l.UploadInfo,indexOffset:0,reqDescr:{readLength:8}};v(at).send()}function aa(ay){var at,au,az,aw,av;try{at=ay.xmlHttpReq.responseXML.documentElement;au=U(at.getElementsByTagName("ppData")[0].firstChild.data);az=au.substr(0,4);c=Z(az,"DWORD");az=au.substr(4,4);w=Z(az,"DWORD")}catch(ax){k("TAME library error: Parsing of UploadInfo failed:"+ax);return}av={method:"Read",indexGroup:l.Upload,indexOffset:0,reqDescr:{readLength:w}};v(av).send()}function ah(aK){var at,aC=0,aH=4,aE=8,aA=12,ax=30,aw,ay,aJ,aB,aD,au,aI,az,av,aG;try{at=aK.xmlHttpReq.responseXML.documentElement;aw=U(at.getElementsByTagName("ppData")[0].firstChild.data);for(aB=0;aB<c;aB++){ay=aw.substr(aC,4);aD=Z(ay,"DWORD");au=aw.substring(aC+ax,(aC+aD)).split(String.fromCharCode(0));name=au[0].toUpperCase();S[name]={typeString:au[1],indexGroup:Z(aw.substr(aC+aH,4),"DWORD"),indexOffset:Z(aw.substr(aC+aE,4),"DWORD"),size:Z(aw.substr(aC+aA,4),"DWORD")};aI=au[1].split(" ");if(aI[0]==="ARRAY"){S[name].type=aI[0];az=aI[1].substring(1,aI[1].length-1);az=az.split("..");S[name].arrStartIdx=parseInt(az[0],10);az=parseInt(az[1],10)-parseInt(az[0],10)+1;S[name].arrayLength=az;av=aI[3].split("(");if(av[1]!==undefined){av[1]=av[1].substr(0,av[1].length-1);S[name].fullType=aI[0]+"."+az+"."+av[0]+"."+av[1];S[name].stringLength=parseInt(av[1],10)}else{S[name].fullType=aI[0]+"."+az+"."+av[0]}S[name].itemSize=S[name].size/az;S[name].arrayDataType="USER";for(aG in D){if(D.hasOwnProperty(aG)){if(av[0]===aG){S[name].arrayDataType=av[0]}}}if(S[name].arrayDataType==="USER"){S[name].dataType=av[0]}}else{av=aI[0].split("(");if(av[1]!==undefined){av[1]=av[1].substr(0,av[1].length-1);S[name].fullType=av[0]+"."+av[1];S[name].stringLength=parseInt(av[1],10)}else{S[name].fullType=av[0]}S[name].type="USER";for(aG in D){if(D.hasOwnProperty(aG)){if(av[0]===aG){S[name].type=av[0]}}}if(S[name].type==="USER"){S[name].dataType=av[0]}}aC+=aD}ad.symTableReady=true;k("TAME library info: End of fetching the symbols.");k("TAME library info: Symbol table ready.");if(f.syncXmlHttp!==true){ao()}}catch(aF){k("TAME library error: Parsing of uploaded symbol information failed:"+aF);return}}function K(){var aw=ac(),aD=[],au,at,aC,az,ax,aB,av,aA,ay;k("TAME library info: Start reading the TPY file.");aw.open("GET",f.configFileUrl,!f.syncXmlHttp,f.serviceUser,f.servicePassword);aw.setRequestHeader("Content-Type","text/xml");aw.onreadystatechange=function(){if((aw.readyState===4)&&(aw.status===200)){if(typeof DOMParser!="undefined"){try{au=(new DOMParser()).parseFromString(aw.responseText,"text/xml")}catch(aI){k("TAME library error: Creating a DOM object from TPY failed:"+aI);return}}else{k("TAME library error: Can't parse the symbol file cause your browser does not provide a DOMParser function.")}if(typeof f.amsNetId!=="string"||typeof f.amsPort!=="string"||b===0){k("TAME library info: Start reading the service information from the TPY file.");try{B={netId:au.getElementsByTagName("NetId")[0].childNodes[0].nodeValue,port:au.getElementsByTagName("Port")[0].childNodes[0].nodeValue};aA=au.getElementsByTagName("TwinCATVersion")[0].childNodes[0].nodeValue.charAt(0);if(aA==="2"){B.alignment=parseInt(au.getElementsByTagName("PackSize")[0].childNodes[0].nodeValue,10)}else{if(aA==="3"){B.alignment=8}else{k("TAME library error: Could not determine the TwinCAT version.")}}k("TAME library info: End of reading the service information from the TPY file.")}catch(aI){k("TAME library error: An error occured while reading service information from the TPY file:");k(aI)}}else{k("TAME library info: NetId, port and alignment manually set. Skip reading the service information from the TPY file.")}if(f.forceUploadUsage!==true){k("TAME library info: Start reading the symbols from the TPY file.");try{aC=au.getElementsByTagName("Symbols")[0];aD=aC.getElementsByTagName("Symbol");for(ay=0;ay<aD.length;ay++){at=aD[ay].getElementsByTagName("Name")[0].childNodes[0].nodeValue.toUpperCase();S[at]={typeString:aD[ay].getElementsByTagName("Type")[0].childNodes[0].nodeValue.toUpperCase(),indexGroup:parseInt(aD[ay].getElementsByTagName("IGroup")[0].childNodes[0].nodeValue,10),indexOffset:parseInt(aD[ay].getElementsByTagName("IOffset")[0].childNodes[0].nodeValue,10),bitSize:parseInt(aD[ay].getElementsByTagName("BitSize")[0].childNodes[0].nodeValue,10)};S[at].size=(S[at].bitSize>=8)?S[at].bitSize/8:S[at].bitSize;az=S[at].typeString.split(" ");if(az[0]==="ARRAY"){S[at].type=az[0];ax=az[1].substring(1,az[1].length-1);ax=ax.split("..");S[at].arrStartIdx=parseInt(ax[0],10);ax=parseInt(ax[1],10)-parseInt(ax[0],10)+1;S[at].arrayLength=ax;aB=az[3].split("(");if(aB[1]!==undefined){aB[1]=aB[1].substr(0,aB[1].length-1);S[at].fullType=az[0]+"."+ax+"."+aB[0]+"."+aB[1];S[at].stringLength=parseInt(aB[1],10)}else{S[at].fullType=az[0]+"."+ax+"."+aB[0]}S[at].itemSize=S[at].size/ax;S[at].arrayDataType="USER";for(av in D){if(D.hasOwnProperty(av)){if(aB[0]===av){S[at].arrayDataType=aB[0]}}}if(S[at].arrayDataType==="USER"){S[at].dataType=aB[0]}}else{aB=az[0].split("(");if(aB[1]!==undefined){aB[1]=aB[1].substr(0,aB[1].length-1);S[at].fullType=aB[0]+"."+aB[1];S[at].stringLength=parseInt(aB[1],10)}else{S[at].fullType=aB[0]}S[at].type="USER";for(av in D){if(D.hasOwnProperty(av)){if(aB[0]===av){S[at].type=aB[0]}}}if(S[at].type==="USER"){S[at].dataType=aB[0]}}}ad.symTableReady=true;k("TAME library info: End of reading the symbols from the TPY file.");k("TAME library info: Symbol table ready.")}catch(aI){k("TAME library error: An error occured while parsing the symbol file:");k(aI)}}else{k("TAME library info: Reading the symbols from the TPY file is deactivated.")}var aF,aG,aK,aH,aJ;if(true){k("TAME library info: Start reading the data types from the TPY file.");try{aF=au.getElementsByTagName("DataTypes")[0];aG=aF.getElementsByTagName("DataType");for(ay=0;ay<aG.length;ay++){aJ=aG[ay].getElementsByTagName("Name")[0].childNodes[0].nodeValue.toUpperCase();at=aJ.split(" ")[0];if(at==="ARRAY"){ar[aJ]={bitSize:parseInt(aG[ay].getElementsByTagName("BitSize")[0].childNodes[0].nodeValue,10)};ar[aJ].size=ar[aJ].bitSize/8}}for(ay=0;ay<aG.length;ay++){aJ=aG[ay].getElementsByTagName("Name")[0].childNodes[0].nodeValue.toUpperCase();at=aJ.split(" ")[0];if(at!=="ARRAY"){ar[at]={bitSize:parseInt(aG[ay].getElementsByTagName("BitSize")[0].childNodes[0].nodeValue,10),subItems:{}};ar[at].size=ar[at].bitSize/8;aK=aG[ay].getElementsByTagName("SubItem");for(var aE=0;aE<aK.length;aE++){aH=aK[aE].getElementsByTagName("Name")[0].childNodes[0].nodeValue.toUpperCase();if(aK[aE].getElementsByTagName("Type").length>0){ar[at].subItems[aH]={typeString:aK[aE].getElementsByTagName("Type")[0].childNodes[0].nodeValue.toUpperCase(),pointer:aK[aE].getElementsByTagName("Type")[0].hasAttribute("Pointer"),bitSize:parseInt(aK[aE].getElementsByTagName("BitSize")[0].childNodes[0].nodeValue,10)};if(aK[aE].getElementsByTagName("BitOffs")[0]!==undefined){ar[at].subItems[aH].bitOffset=parseInt(aK[aE].getElementsByTagName("BitOffs")[0].childNodes[0].nodeValue,10)}ar[at].subItems[aH].size=(ar[at].subItems[aH].bitSize>=8)?ar[at].subItems[aH].bitSize/8:ar[at].subItems[aH].bitSize;az=ar[at].subItems[aH].typeString.split(" ");if(az[0]==="ARRAY"){ar[at].subItems[aH].type=az[0];ax=az[1].substring(1,az[1].length-1);ax=ax.split("..");ar[at].subItems[aH].arrStartIdx=parseInt(ax[0],10);ax=parseInt(ax[1],10)-parseInt(ax[0],10)+1;ar[at].subItems[aH].arrayLength=ax;aB=az[3].split("(");if(aB[1]!==undefined){aB[1]=aB[1].substr(0,aB[1].length-1);ar[at].subItems[aH].fullType=az[0]+"."+ax+"."+aB[0]+"."+aB[1];ar[at].subItems[aH].stringLength=parseInt(aB[1],10)}else{ar[at].subItems[aH].fullType=az[0]+"."+ax+"."+aB[0]}if(f.skipMissingTypes===true&&ar[ar[at].subItems[aH].typeString]===undefined){k("TAME library error: Data type missing in TPY file:");k(ar[at].subItems[aH]);k("TAME library warning: Access to symbols using this data type will return wrong results:");k(at);k("TAME library info: Use handles to access symbols using this data type.")}else{if(ar[ar[at].subItems[aH].typeString]===undefined){k("TAME library error: Data type missing in TPY file!");k('TAME library info: If you don\'t use this data type you can set the client parameter "skipMissingTypes" to true.')}ar[at].subItems[aH].bitSize=ar[ar[at].subItems[aH].typeString].bitSize;ar[at].subItems[aH].size=ar[ar[at].subItems[aH].typeString].size}ar[at].subItems[aH].itemSize=ar[at].subItems[aH].size/ax;ar[at].subItems[aH].arrayDataType="USER";for(av in D){if(D.hasOwnProperty(av)){if(aB[0]===av){ar[at].subItems[aH].arrayDataType=aB[0]}}}if(ar[at].subItems[aH].arrayDataType==="USER"){ar[at].subItems[aH].dataType=aB[0]}}else{aB=az[0].split("(");if(aB[1]!==undefined){aB[1]=aB[1].substr(0,aB[1].length-1);ar[at].subItems[aH].fullType=aB[0]+"."+aB[1];ar[at].subItems[aH].stringLength=parseInt(aB[1],10)}else{ar[at].subItems[aH].fullType=aB[0]}ar[at].subItems[aH].type="USER";for(av in D){if(D.hasOwnProperty(av)){if(aB[0]===av){ar[at].subItems[aH].type=aB[0]}}}if(ar[at].subItems[aH].type==="USER"){ar[at].subItems[aH].dataType=aB[0]}}}else{k("TAME library warning: Skipping SubItem with no type information: Data type: "+at+" ,SubItem: "+aH)}}}}ad.dataTypeTableReady=true;k("TAME library info: End of reading the data types from the TPY file.");k("TAME library info: Data type table ready.");x()}catch(aI){k("TAME library error: An error occured while creating the data type information:");k("Type: "+aJ);k("SubItem: "+aH);k(aI)}}}};aw.send(null)}function u(){if(typeof f.amsNetId!=="string"){f.amsNetId=B.netId;k("TAME library info: No NetId definition found. NetId from TPY file will be used.")}if(typeof f.amsPort!=="string"){f.amsPort=B.port;k("TAME library info: No AMS port definition found. Port number from TPY file will be used.")}if(b===0){if(B.alignment!==undefined){b=B.alignment;k("TAME library info: No alignment parameter found. Alignment from TPY file will be used.")}else{b=1;k("TAME library warning: Can't get a value for the data aligment. Default value for alignment is used (1). This works only with TC2 and x86 processors.")}}if(b!==1&&b!==4&&b!==8){k("TAME library warning: The value for the alignment should be 1, 4 or 8.")}k("TAME library info: Target information: NetId: "+f.amsNetId+", AMS port: "+f.amsPort+" , alignment: "+b)}function x(){u();if(typeof f.configFileUrl!="string"||f.forceUploadUsage===true){k("TAME library info: Start fetching the symbols from PLC.");try{ae()}catch(at){k("TAME library error: Could'nt fetch the symbol information from the PLC:"+at);return}}else{if(f.syncXmlHttp!==true){ao()}}}function ao(){if(typeof f.onReady==="function"){k('TAME library info: Calling the "onReady" function.');f.onReady()}else{k('TAME library error: No "onReady" function defined. Check the manual.')}if(!isNaN(f.adsCheckInterval)&&f.adsCheckInterval>=1){k("TAME library info: Start cyclic reading of ADS state.");setInterval(ad.readAdsState,f.adsCheckInterval)}}if(f.dontFetchSymbols===true){k("TAME library warning: Reading of the UploadInfo and the TPY file deactivated. Symbol Table could not be created.");if(b!==1&&b!==4&&b!==8){k("TAME library warning: The value for the alignment should be 1, 4 or 8.")}k("TAME library info: Target information: NetId: "+f.amsNetId+", AMS port: "+f.amsPort+" , alignment: "+b);if(f.syncXmlHttp!==true){window.setTimeout(ao,1)}}else{if(typeof f.configFileUrl=="string"){k("TAME library info: Fetching the TPY file from the webserver.");K()}else{x()}}};a.WebServiceClient.createClient=function(b){return new a.WebServiceClient(b)};if(typeof exports=="undefined"){window.TAME=a}else{module.exports=a}})();