Aggiunta librerie x TwinCat Beckhoff
This commit is contained in:
@@ -0,0 +1,997 @@
|
||||
/*!
|
||||
----------------------------------------------------
|
||||
TcAdsWebService JavaScript Library
|
||||
----------------------------------------------------
|
||||
Version: v1.0.6.0
|
||||
----------------------------------------------------
|
||||
Copyright 2018, Beckhoff Automation GmbH & Co. KG
|
||||
http://www.beckhoff.com
|
||||
----------------------------------------------------
|
||||
*/
|
||||
////////////////////////////////////////////////////
|
||||
(function (window) {
|
||||
|
||||
var TcAdsWebService = new (function () {
|
||||
|
||||
this.Response = (function (hasError, error, reader, isBusy) {
|
||||
|
||||
this.isBusy = isBusy;
|
||||
this.hasError = hasError;
|
||||
this.error = error;
|
||||
this.reader = reader;
|
||||
this.getTypeString = (function () {
|
||||
return "TcAdsWebService.Response";
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
this.Error = (function (errorMessage, errorCode) {
|
||||
|
||||
this.errorMessage = errorMessage;
|
||||
this.errorCode = errorCode;
|
||||
this.getTypeString = (function () {
|
||||
return "TcAdsWebService.Error";
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
this.ResquestError = (function (requestStatus, requestStatusText) {
|
||||
|
||||
this.requestStatus = requestStatus;
|
||||
this.requestStatusText = requestStatusText;
|
||||
this.getTypeString = (function () {
|
||||
return "TcAdsWebService.ResquestError";
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
this.Client = (function (sServiceUrl, sServiceUser, sServicePassword) {
|
||||
|
||||
this.getTypeString = (function () {
|
||||
return "TcAdsWebService.Client";
|
||||
});
|
||||
|
||||
this.readwrite = (function (sNetId, nPort, nIndexGroup, nIndexOffset, cbRdLen, pwrData, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
|
||||
|
||||
var message =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||
"<SOAP-ENV:Envelope " +
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance/\" " +
|
||||
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema/\" " +
|
||||
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
||||
"SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >" +
|
||||
"<SOAP-ENV:Body><q1:ReadWrite xmlns:q1=\"http://beckhoff.org/message/\">" +
|
||||
"<netId xsi:type=\"xsd:string\">" + sNetId + "</netId>" +
|
||||
"<nPort xsi:type=\"xsd:int\">" + nPort + "</nPort>" +
|
||||
"<indexGroup xsi:type=\"xsd:unsignedInt\">" + nIndexGroup + "</indexGroup>" +
|
||||
"<indexOffset xsi:type=\"xsd:unsignedInt\">" + nIndexOffset + "</indexOffset>" +
|
||||
"<cbRdLen xsi:type=\"xsd:int\">" + cbRdLen + "</cbRdLen>" +
|
||||
"<pwrData xsi:type=\"xsd:base64Binary\">" + pwrData + "</pwrData>" +
|
||||
"</q1:ReadWrite></SOAP-ENV:Body></SOAP-ENV:Envelope>";
|
||||
|
||||
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.Readwrite", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
|
||||
|
||||
});
|
||||
|
||||
this.readState = (function (sNetId, nPort, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
|
||||
|
||||
var message =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||
"<SOAP-ENV:Envelope " +
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance/\" " +
|
||||
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema/\" " +
|
||||
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
||||
"SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >" +
|
||||
"<SOAP-ENV:Body><q1:ReadState xmlns:q1=\"http://beckhoff.org/message/\">" +
|
||||
"<netId xsi:type=\"xsd:string\">" + sNetId + "</netId>" +
|
||||
"<nPort xsi:type=\"xsd:int\">" + nPort + "</nPort>" +
|
||||
"</q1:ReadState></SOAP-ENV:Body></SOAP-ENV:Envelope>";
|
||||
|
||||
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.ReadState", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
|
||||
});
|
||||
|
||||
this.writeControl = (function (sNetId, nPort, adsState, deviceState, pData, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
|
||||
|
||||
var message =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||
"<SOAP-ENV:Envelope " +
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance/\" " +
|
||||
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema/\" " +
|
||||
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
||||
"SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >" +
|
||||
"<SOAP-ENV:Body><q1:WriteControl xmlns:q1=\"http://beckhoff.org/message/\">" +
|
||||
"<netId xsi:type=\"xsd:string\">" + sNetId + "</netId>" +
|
||||
"<nPort xsi:type=\"xsd:int\">" + nPort + "</nPort>" +
|
||||
"<adsState xsi:type=\"xsd:int\">" + adsState + "</adsState>" +
|
||||
"<deviceState xsi:type=\"xsd:int\">" + deviceState + "</deviceState>" +
|
||||
"<pData xsi:type=\"xsd:base64Binary\">" + pData + "</pData>" +
|
||||
"</q1:WriteControl></SOAP-ENV:Body></SOAP-ENV:Envelope>";
|
||||
|
||||
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.WriteControl", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
|
||||
});
|
||||
|
||||
this.write = (function (sNetId, nPort, nIndexGroup, nIndexOffset, pData, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
|
||||
|
||||
var message =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||
"<SOAP-ENV:Envelope " +
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance/\" " +
|
||||
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema/\" " +
|
||||
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
||||
"SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >" +
|
||||
"<SOAP-ENV:Body><q1:Write xmlns:q1=\"http://beckhoff.org/message/\">" +
|
||||
"<netId xsi:type=\"xsd:string\">" + sNetId + "</netId>" +
|
||||
"<nPort xsi:type=\"xsd:int\">" + nPort + "</nPort>" +
|
||||
"<indexGroup xsi:type=\"xsd:unsignedInt\">" + nIndexGroup + "</indexGroup>" +
|
||||
"<indexOffset xsi:type=\"xsd:unsignedInt\">" + nIndexOffset + "</indexOffset>" +
|
||||
"<pData xsi:type=\"xsd:base64Binary\">" + pData + "</pData>" +
|
||||
"</q1:Write></SOAP-ENV:Body></SOAP-ENV:Envelope>";
|
||||
|
||||
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.Write", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
|
||||
});
|
||||
|
||||
this.read = (function (sNetId, nPort, nIndexGroup, nIndexOffset, cbLen, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
|
||||
|
||||
var message =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||
"<SOAP-ENV:Envelope " +
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance/\" " +
|
||||
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema/\" " +
|
||||
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
||||
"SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" >" +
|
||||
"<SOAP-ENV:Body><q1:Read xmlns:q1=\"http://beckhoff.org/message/\">" +
|
||||
"<netId xsi:type=\"xsd:string\">" + sNetId + "</netId>" +
|
||||
"<nPort xsi:type=\"xsd:int\">" + nPort + "</nPort>" +
|
||||
"<indexGroup xsi:type=\"xsd:unsignedInt\">" + nIndexGroup + "</indexGroup>" +
|
||||
"<indexOffset xsi:type=\"xsd:unsignedInt\">" + nIndexOffset + "</indexOffset>" +
|
||||
"<cbLen xsi:type=\"xsd:int\">" + cbLen + "</cbLen>" +
|
||||
"</q1:Read></SOAP-ENV:Body></SOAP-ENV:Envelope>";
|
||||
|
||||
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.Read", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
|
||||
});
|
||||
|
||||
var handleSyncResponse = function (xhr) {
|
||||
|
||||
var errorMessage = undefined, errorCode = 0;
|
||||
|
||||
if (xhr.readyState != 4 || xhr.status != 200) {
|
||||
// Request has been aborted.
|
||||
// Maybe because of timeout.
|
||||
var resp = undefined;
|
||||
try {
|
||||
resp = new TcAdsWebService.Response(
|
||||
true, new TcAdsWebService.ResquestError(xhr.status, xhr.statusText), undefined, false);
|
||||
} catch (err) {
|
||||
// Internet Explorer throws exception on abort
|
||||
resp = new TcAdsWebService.Response(
|
||||
true, new TcAdsWebService.ResquestError(0, 0), undefined, false);
|
||||
}
|
||||
|
||||
xhr = null;
|
||||
return resp;
|
||||
}
|
||||
|
||||
var sSoapResponse = xhr.responseXML.documentElement;
|
||||
var faultstringNodes = sSoapResponse.getElementsByTagName('faultstring');
|
||||
if (faultstringNodes.length != 0) {
|
||||
|
||||
errorMessage = faultstringNodes[0].firstChild.data;
|
||||
var errorCodeNodes = sSoapResponse.getElementsByTagName('errorcode');
|
||||
|
||||
if (errorCodeNodes.length != 0) {
|
||||
errorCode = sSoapResponse.getElementsByTagName('errorcode')[0].firstChild.data;
|
||||
} else {
|
||||
errorCode = "-";
|
||||
}
|
||||
|
||||
var resp = new TcAdsWebService.Response(
|
||||
true, new TcAdsWebService.Error(errorMessage, errorCode), undefined, false);
|
||||
|
||||
xhr = null;
|
||||
return resp;
|
||||
|
||||
} else {
|
||||
|
||||
var ppDataNodes = sSoapResponse.getElementsByTagName('ppData');
|
||||
var ppRdDataNodes = sSoapResponse.getElementsByTagName('ppRdData');
|
||||
var pAdsStateNodes = sSoapResponse.getElementsByTagName('pAdsState');
|
||||
var pDeviceStateNodes = sSoapResponse.getElementsByTagName('pDeviceState');
|
||||
|
||||
var soapData = "";
|
||||
if (ppDataNodes.length != 0) {
|
||||
//read
|
||||
for (var i = 0; i < ppDataNodes[0].childNodes.length; i++) {
|
||||
soapData += ppDataNodes[0].childNodes[i].data;
|
||||
}
|
||||
} else if (ppRdDataNodes.length != 0) {
|
||||
// readwrite
|
||||
for (var i = 0; i < ppRdDataNodes[0].childNodes.length; i++) {
|
||||
soapData += ppRdDataNodes[0].childNodes[i].data;
|
||||
}
|
||||
} else if (pAdsStateNodes.length != 0 && pDeviceStateNodes.length) {
|
||||
// readState
|
||||
var adsState = pAdsStateNodes[0].firstChild.data;
|
||||
var deviceState = pDeviceStateNodes[0].firstChild.data;
|
||||
|
||||
var writer = new TcAdsWebService.DataWriter();
|
||||
writer.writeWORD(parseInt(adsState, 10));
|
||||
writer.writeWORD(parseInt(deviceState, 10));
|
||||
|
||||
soapData = writer.getBase64EncodedData();
|
||||
}
|
||||
|
||||
if (soapData) {
|
||||
var resp = new TcAdsWebService.Response(
|
||||
false,
|
||||
undefined,
|
||||
new TcAdsWebService.DataReader(soapData), false);
|
||||
xhr = null;
|
||||
return resp;
|
||||
} else {
|
||||
// write completes without data in response
|
||||
var resp = new TcAdsWebService.Response(false, undefined, undefined, false);
|
||||
xhr = null;
|
||||
return resp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var handleAsyncResponse = function (readyState, status, statusText, responseXML, pCallback, userState) {
|
||||
|
||||
if (readyState < 4) {
|
||||
if (pCallback) {
|
||||
var resp = new TcAdsWebService.Response(false, undefined, undefined, true);
|
||||
pCallback(resp, userState);
|
||||
}
|
||||
}
|
||||
|
||||
if (readyState == 4) {
|
||||
|
||||
if (status == 200) {
|
||||
|
||||
var errorMessage = undefined, errorCode = 0;
|
||||
|
||||
var sSoapResponse = responseXML.documentElement;
|
||||
var faultstringNodes = sSoapResponse.getElementsByTagName('faultstring');
|
||||
if (faultstringNodes.length != 0) {
|
||||
|
||||
errorMessage = faultstringNodes[0].firstChild.data;
|
||||
var errorCodeNodes = sSoapResponse.getElementsByTagName('errorcode');
|
||||
|
||||
if (errorCodeNodes.length != 0) {
|
||||
errorCode = sSoapResponse.getElementsByTagName('errorcode')[0].firstChild.data;
|
||||
} else {
|
||||
errorCode = "-";
|
||||
}
|
||||
|
||||
if (pCallback) {
|
||||
var resp = new TcAdsWebService.Response(
|
||||
true, new TcAdsWebService.Error(errorMessage, errorCode), undefined, false);
|
||||
pCallback(resp, userState);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
var ppDataNodes = sSoapResponse.getElementsByTagName('ppData');
|
||||
var ppRdDataNodes = sSoapResponse.getElementsByTagName('ppRdData');
|
||||
var pAdsStateNodes = sSoapResponse.getElementsByTagName('pAdsState');
|
||||
var pDeviceStateNodes = sSoapResponse.getElementsByTagName('pDeviceState');
|
||||
|
||||
var soapData = "";
|
||||
if (ppDataNodes.length != 0) {
|
||||
//read
|
||||
for (var i = 0; i < ppDataNodes[0].childNodes.length; i++) {
|
||||
soapData += ppDataNodes[0].childNodes[i].data;
|
||||
}
|
||||
} else if (ppRdDataNodes.length != 0) {
|
||||
// readwrite
|
||||
for (var i = 0; i < ppRdDataNodes[0].childNodes.length; i++) {
|
||||
soapData += ppRdDataNodes[0].childNodes[i].data;
|
||||
}
|
||||
} else if (pAdsStateNodes.length != 0 && pDeviceStateNodes.length) {
|
||||
// readState
|
||||
var adsState = pAdsStateNodes[0].firstChild.data;
|
||||
var deviceState = pDeviceStateNodes[0].firstChild.data;
|
||||
|
||||
var writer = new TcAdsWebService.DataWriter();
|
||||
writer.writeWORD(parseInt(adsState, 10));
|
||||
writer.writeWORD(parseInt(deviceState, 10));
|
||||
|
||||
soapData = writer.getBase64EncodedData();
|
||||
}
|
||||
|
||||
if (soapData) {
|
||||
if (pCallback) {
|
||||
var resp = new TcAdsWebService.Response(
|
||||
false, undefined, new TcAdsWebService.DataReader(soapData), false);
|
||||
if (pCallback)
|
||||
pCallback(resp, userState);
|
||||
}
|
||||
} else {
|
||||
|
||||
// write completes without data in response
|
||||
if (pCallback) {
|
||||
var resp = new TcAdsWebService.Response(false, undefined, undefined, false);
|
||||
pCallback(resp, userState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// Request has been aborted.
|
||||
// Maybe because of timeout.
|
||||
if (pCallback) {
|
||||
|
||||
var resp = undefined;
|
||||
try {
|
||||
resp = new TcAdsWebService.Response(
|
||||
true, new TcAdsWebService.ResquestError(status, statusText), undefined, false);
|
||||
} catch (err) {
|
||||
// Internet Explorer throws exception on abort
|
||||
resp = new TcAdsWebService.Response(
|
||||
true, new TcAdsWebService.ResquestError(0, 0), undefined, false);
|
||||
}
|
||||
pCallback(resp, userState);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var sendMessage = function (message, method, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
|
||||
|
||||
if (async == null || async == undefined)
|
||||
async = true;
|
||||
|
||||
var xhr = undefined;
|
||||
if (window.XMLHttpRequest) {
|
||||
xhr = new XMLHttpRequest();
|
||||
} else {
|
||||
try {
|
||||
// MS Internet Explorer (ab v6)
|
||||
xhr = ActiveXObject("Microsoft.XMLHTTP");
|
||||
} catch (e) {
|
||||
try {
|
||||
// MS Internet Explorer (ab v5)
|
||||
xhr = new ActiveXObject("Msxml2.XMLHTTP");
|
||||
} catch (e) {
|
||||
xhr = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (xhr == undefined)
|
||||
return null;
|
||||
|
||||
if (async) {
|
||||
xhr.onreadystatechange = function () {
|
||||
if (this.readyState == 4) {
|
||||
handleAsyncResponse(this.readyState, this.status, this.statusText, this.responseXML, pCallback, userState);
|
||||
} else {
|
||||
handleAsyncResponse(this.readyState, undefined, undefined, undefined, pCallback, userState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sServiceUser && sServicePassword) {
|
||||
xhr.open("POST", sServiceUrl, async, sServiceUser, sServicePassword);
|
||||
} else {
|
||||
xhr.open("POST", sServiceUrl, async);
|
||||
}
|
||||
|
||||
if ("timeout" in xhr && ajaxTimeout)
|
||||
xhr.timeout = ajaxTimeout;
|
||||
|
||||
if ("ontimeout" in xhr && ajaxTimeoutCallback) {
|
||||
xhr.ontimeout = ajaxTimeoutCallback;
|
||||
}
|
||||
|
||||
xhr.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
|
||||
|
||||
xhr.send(message);
|
||||
|
||||
if (!async) {
|
||||
return handleSyncResponse(xhr);
|
||||
}
|
||||
else {
|
||||
xhr = null;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.DataReader = (function (data) {
|
||||
|
||||
this.offset = 0;
|
||||
this.decodedData = Base64.decode(data);
|
||||
|
||||
this.getTypeString = (function () {
|
||||
return "TcAdsWebService.DataReader";
|
||||
});
|
||||
|
||||
this.readSINT = (function () {
|
||||
var res = convertDataToInt(this.decodedData.substr(this.offset, 1), 1);
|
||||
this.offset = this.offset + 1;
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readINT = (function () {
|
||||
var res = convertDataToInt(this.decodedData.substr(this.offset, 2), 2);
|
||||
this.offset = this.offset + 2;
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readDINT = (function () {
|
||||
var res = convertDataToInt(this.decodedData.substr(this.offset, 4), 4);
|
||||
this.offset = this.offset + 4;
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readBYTE = (function () {
|
||||
var res = convertDataToUInt(this.decodedData.substr(this.offset, 1), 1);
|
||||
this.offset = this.offset + 1;
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readWORD = (function () {
|
||||
var res = convertDataToUInt(this.decodedData.substr(this.offset, 2), 2);
|
||||
this.offset = this.offset + 2;
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readDWORD = (function () {
|
||||
var res = convertDataToUInt(this.decodedData.substr(this.offset, 4), 4);
|
||||
this.offset = this.offset + 4;
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readBOOL = (function () {
|
||||
var res = this.decodedData.substr(this.offset, 1).charCodeAt(0);
|
||||
this.offset = this.offset + 1;
|
||||
if (res === 0)
|
||||
return false;
|
||||
if (res === 1)
|
||||
return true;
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readString = (function (length) {
|
||||
|
||||
if (isNaN(length)) {
|
||||
throw "Parameter \"length\" has to be a valid number.";
|
||||
}
|
||||
|
||||
var o = 0;
|
||||
var c;
|
||||
var ca = [];
|
||||
|
||||
while (o < length) { // Read until length or 0 termination
|
||||
c = this.decodedData.substr(this.offset + o, 1);
|
||||
var cc = c.charCodeAt(0);
|
||||
if (cc === 0) {
|
||||
break;
|
||||
}
|
||||
ca.push(c);
|
||||
o++;
|
||||
}
|
||||
|
||||
var res = ca.join('');
|
||||
this.offset = this.offset + length;
|
||||
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readREAL = (function () {
|
||||
var decData = [];
|
||||
decData[0] = convertDataToUInt(this.decodedData.substr(this.offset + 0, 1), 1);
|
||||
decData[1] = convertDataToUInt(this.decodedData.substr(this.offset + 1, 1), 1);
|
||||
decData[2] = convertDataToUInt(this.decodedData.substr(this.offset + 2, 1), 1);
|
||||
decData[3] = convertDataToUInt(this.decodedData.substr(this.offset + 3, 1), 1);
|
||||
|
||||
var binData = [];
|
||||
binData[0] = dec2Binary(decData[0]);
|
||||
binData[1] = dec2Binary(decData[1]);
|
||||
binData[2] = dec2Binary(decData[2]);
|
||||
binData[3] = dec2Binary(decData[3]);
|
||||
|
||||
var binStr = binData[3] + binData[2] + binData[1] + binData[0];
|
||||
|
||||
var res = binary2Real(binStr, TcAdsWebService.TcAdsWebServiceDataTypes.REAL);
|
||||
this.offset = this.offset + 4;
|
||||
return res;
|
||||
});
|
||||
|
||||
this.readLREAL = (function () {
|
||||
var decData = [];
|
||||
decData[0] = convertDataToUInt(this.decodedData.substr(this.offset + 0, 1), 1);
|
||||
decData[1] = convertDataToUInt(this.decodedData.substr(this.offset + 1, 1), 1);
|
||||
decData[2] = convertDataToUInt(this.decodedData.substr(this.offset + 2, 1), 1);
|
||||
decData[3] = convertDataToUInt(this.decodedData.substr(this.offset + 3, 1), 1);
|
||||
decData[4] = convertDataToUInt(this.decodedData.substr(this.offset + 4, 1), 1);
|
||||
decData[5] = convertDataToUInt(this.decodedData.substr(this.offset + 5, 1), 1);
|
||||
decData[6] = convertDataToUInt(this.decodedData.substr(this.offset + 6, 1), 1);
|
||||
decData[7] = convertDataToUInt(this.decodedData.substr(this.offset + 7, 1), 1);
|
||||
|
||||
var binData = [];
|
||||
binData[0] = dec2Binary(decData[0]);
|
||||
binData[1] = dec2Binary(decData[1]);
|
||||
binData[2] = dec2Binary(decData[2]);
|
||||
binData[3] = dec2Binary(decData[3]);
|
||||
binData[4] = dec2Binary(decData[4]);
|
||||
binData[5] = dec2Binary(decData[5]);
|
||||
binData[6] = dec2Binary(decData[6]);
|
||||
binData[7] = dec2Binary(decData[7]);
|
||||
|
||||
var binStr = binData[7] + binData[6] + binData[5] + binData[4] + binData[3] + binData[2] + binData[1] + binData[0];
|
||||
|
||||
var res = binary2Real(binStr, TcAdsWebService.TcAdsWebServiceDataTypes.LREAL);
|
||||
this.offset = this.offset + 8;
|
||||
return res;
|
||||
});
|
||||
});
|
||||
|
||||
this.DataWriter = (function () {
|
||||
|
||||
this.getTypeString = (function () {
|
||||
return "TcAdsWebService.DataWriter";
|
||||
});
|
||||
|
||||
this.getBase64EncodedData = (function () {
|
||||
return Base64.encode(byteArrayToBinaryString(byteArray));
|
||||
});
|
||||
|
||||
this.writeSINT = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.Integer, 1, byteArray);
|
||||
});
|
||||
|
||||
this.writeINT = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.Integer, 2, byteArray);
|
||||
});
|
||||
|
||||
this.writeDINT = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.Integer, 4, byteArray);
|
||||
});
|
||||
|
||||
this.writeBYTE = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.UnsignedInteger, 1, byteArray);
|
||||
});
|
||||
|
||||
this.writeWORD = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.UnsignedInteger, 2, byteArray);
|
||||
});
|
||||
|
||||
this.writeDWORD = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.UnsignedInteger, 4, byteArray);
|
||||
});
|
||||
|
||||
this.writeBOOL = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.BOOL, 1, byteArray);
|
||||
});
|
||||
|
||||
this.writeString = (function (value, length) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.String, length, byteArray);
|
||||
});
|
||||
|
||||
this.writeREAL = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.REAL, 4, byteArray);
|
||||
});
|
||||
|
||||
this.writeLREAL = (function (value) {
|
||||
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.LREAL, 8, byteArray);
|
||||
});
|
||||
|
||||
var byteArray = [];
|
||||
|
||||
var PrepareData = function (data, type, len, array) {
|
||||
var j = array.length;
|
||||
|
||||
if (type == TcAdsWebService.TcAdsWebServiceDataTypes.String) {
|
||||
var k;
|
||||
|
||||
for (k = 0; k < data.length; k++) {
|
||||
array[j++] = data.charCodeAt(k);
|
||||
}
|
||||
|
||||
for (; k < len; k++) {
|
||||
array[j++] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
else if (type == TcAdsWebService.TcAdsWebServiceDataTypes.BOOL) {
|
||||
array[j++] = data;
|
||||
}
|
||||
else if (type == TcAdsWebService.TcAdsWebServiceDataTypes.Integer || type == TcAdsWebService.TcAdsWebServiceDataTypes.UnsignedInteger) {
|
||||
|
||||
if (len == 1) {
|
||||
array[j++] = ToByte(parseInt((data >> (0)), 10));
|
||||
}
|
||||
else if (len == 2) {
|
||||
data = parseInt(data);
|
||||
array[j++] = ToByte(parseInt((data >> (0)), 10));
|
||||
array[j++] = ToByte(parseInt((data >> (8)), 10));
|
||||
}
|
||||
else if (len == 4) {
|
||||
data = parseInt(data);
|
||||
|
||||
if (isNaN(data))
|
||||
data = 0;
|
||||
|
||||
array[j++] = ToByte(parseInt((data >> (0)), 10));
|
||||
array[j++] = ToByte(parseInt((data >> (8)), 10));
|
||||
array[j++] = ToByte(parseInt((data >> (16)), 10));
|
||||
array[j++] = ToByte(parseInt((data >> (24)), 10));
|
||||
}
|
||||
}
|
||||
else if (type == TcAdsWebService.TcAdsWebServiceDataTypes.REAL) {
|
||||
var binary = real2Binary(data, type);
|
||||
|
||||
var subBytes = [];
|
||||
subBytes[0] = binary.substring(0, 8);
|
||||
subBytes[1] = binary.substring(8, 16);
|
||||
subBytes[2] = binary.substring(16, 24);
|
||||
subBytes[3] = binary.substring(24, 32);
|
||||
|
||||
array[j++] = binary2Dec(subBytes[3]);
|
||||
array[j++] = binary2Dec(subBytes[2]);
|
||||
array[j++] = binary2Dec(subBytes[1]);
|
||||
array[j++] = binary2Dec(subBytes[0]);
|
||||
}
|
||||
else if (type == TcAdsWebService.TcAdsWebServiceDataTypes.LREAL) {
|
||||
var binary = real2Binary(data, type);
|
||||
|
||||
var subBytes = [];
|
||||
subBytes[0] = binary.substring(0, 8);
|
||||
subBytes[1] = binary.substring(8, 16);
|
||||
subBytes[2] = binary.substring(16, 24);
|
||||
subBytes[3] = binary.substring(24, 32);
|
||||
|
||||
subBytes[4] = binary.substring(32, 40);
|
||||
subBytes[5] = binary.substring(40, 48);
|
||||
subBytes[6] = binary.substring(48, 56);
|
||||
subBytes[7] = binary.substring(56, 64);
|
||||
|
||||
array[j++] = binary2Dec(subBytes[7]);
|
||||
array[j++] = binary2Dec(subBytes[6]);
|
||||
array[j++] = binary2Dec(subBytes[5]);
|
||||
array[j++] = binary2Dec(subBytes[4]);
|
||||
array[j++] = binary2Dec(subBytes[3]);
|
||||
array[j++] = binary2Dec(subBytes[2]);
|
||||
array[j++] = binary2Dec(subBytes[1]);
|
||||
array[j++] = binary2Dec(subBytes[0]);
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
});
|
||||
|
||||
this.TcAdsReservedIndexGroups = {
|
||||
"PlcRWMX": 16416,
|
||||
"PlcRWMB": 16416,
|
||||
"PlcRWRB": 16432,
|
||||
"PlcRWDB": 16448,
|
||||
"SymbolTable": 61440,
|
||||
"SymbolName": 61441,
|
||||
"SymbolValue": 61442,
|
||||
"SymbolHandleByName": 61443,
|
||||
"SymbolValueByName": 61444,
|
||||
"SymbolValueByHandle": 61445,
|
||||
"SymbolReleaseHandle": 61446,
|
||||
"SymbolInfoByName": 61447,
|
||||
"SymbolVersion": 61448,
|
||||
"SymbolInfoByNameEx": 61449,
|
||||
"SymbolDownload": 61450,
|
||||
"SymbolUpload": 61451,
|
||||
"SymbolUploadInfo": 61452,
|
||||
"SymbolNote": 61456,
|
||||
"IOImageRWIB": 61472,
|
||||
"IOImageRWIX": 61473,
|
||||
"IOImageRWOB": 61488,
|
||||
"IOImageRWOX": 61489,
|
||||
"IOImageClearI": 61504,
|
||||
"IOImageClearO": 61520,
|
||||
"DeviceData": 61696
|
||||
};
|
||||
|
||||
this.TcAdsWebServiceDataTypes = {
|
||||
"String": 0,
|
||||
"BOOL": 1,
|
||||
"Integer": 2,
|
||||
"UnsignedInteger": 3,
|
||||
"LREAL": 4,
|
||||
"REAL": 5
|
||||
};
|
||||
|
||||
this.AdsState = {
|
||||
"INVALID": 0,
|
||||
"IDLE": 1,
|
||||
"RESET": 2,
|
||||
"INIT": 3,
|
||||
"START": 4,
|
||||
"RUN": 5,
|
||||
"STOP": 6,
|
||||
"SAVECFG": 7,
|
||||
"LOADCFG": 8,
|
||||
"POWERFAILURE": 9,
|
||||
"POWERGOOD": 10,
|
||||
"ERROR": 11,
|
||||
"SHUTDOWN": 12,
|
||||
"SUSPEND": 13,
|
||||
"RESUME": 14,
|
||||
"CONFIG": 15,
|
||||
"RECONFIG": 16
|
||||
};
|
||||
|
||||
var byteArrayToBinaryString = function (arr) {
|
||||
var res = "";
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
res += String.fromCharCode(arr[i] & 0xFF);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
var Base64 = (function () {
|
||||
|
||||
var encode = function (data) {
|
||||
var out = "", c1, c2, c3, e1, e2, e3, e4;
|
||||
for (var i = 0; i < data.length;) {
|
||||
c1 = data.charCodeAt(i++);
|
||||
c2 = data.charCodeAt(i++);
|
||||
c3 = data.charCodeAt(i++);
|
||||
e1 = c1 >> 2;
|
||||
e2 = ((c1 & 3) << 4) + (c2 >> 4);
|
||||
e3 = ((c2 & 15) << 2) + (c3 >> 6);
|
||||
e4 = c3 & 63;
|
||||
if (isNaN(c2))
|
||||
e3 = e4 = 64;
|
||||
else if (isNaN(c3))
|
||||
e4 = 64;
|
||||
out += tab.charAt(e1) + tab.charAt(e2) + tab.charAt(e3) + tab.charAt(e4);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
var decode = function (data) {
|
||||
var out = "", c1, c2, c3, e1, e2, e3, e4;
|
||||
for (var i = 0; i < data.length;) {
|
||||
e1 = tab.indexOf(data.charAt(i++));
|
||||
e2 = tab.indexOf(data.charAt(i++));
|
||||
e3 = tab.indexOf(data.charAt(i++));
|
||||
e4 = tab.indexOf(data.charAt(i++));
|
||||
c1 = (e1 << 2) + (e2 >> 4);
|
||||
c2 = ((e2 & 15) << 4) + (e3 >> 2);
|
||||
c3 = ((e3 & 3) << 6) + e4;
|
||||
out += String.fromCharCode(c1);
|
||||
if (e3 != 64)
|
||||
out += String.fromCharCode(c2);
|
||||
if (e4 != 64)
|
||||
out += String.fromCharCode(c3);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
return { encode: encode, decode: decode };
|
||||
})();
|
||||
|
||||
var real2Binary = function (value, type) {
|
||||
|
||||
var exp = 0, man = 0, bias = 0;
|
||||
|
||||
switch (type) {
|
||||
|
||||
case TcAdsWebService.TcAdsWebServiceDataTypes.LREAL:
|
||||
exp = 11;
|
||||
man = 52;
|
||||
bias = 1023;
|
||||
break;
|
||||
|
||||
case TcAdsWebService.TcAdsWebServiceDataTypes.REAL:
|
||||
default:
|
||||
exp = 8;
|
||||
man = 23;
|
||||
bias = 127;
|
||||
}
|
||||
|
||||
var sign = (value >= 0.0) ? 0 : 1;
|
||||
|
||||
var n = 0, power, sign2;
|
||||
if (value > 0 || value < 0) {
|
||||
if (value < 2 && value > -2)
|
||||
sign2 = -1;
|
||||
else sign2 = 1;
|
||||
|
||||
for (power = 0; n < 1 || n > 2; ++power) {
|
||||
n = Math.pow(-1, sign) * value / (Math.pow(2, sign2 * power));
|
||||
}
|
||||
power--;
|
||||
} else {
|
||||
power = bias;
|
||||
sign2 = -1;
|
||||
}
|
||||
|
||||
var exponent = bias + (sign2 * power);
|
||||
exponent = exponent.toString(2);
|
||||
|
||||
for (var i = exponent.length; i < exp; i++) {
|
||||
exponent = "0" + exponent;
|
||||
}
|
||||
|
||||
var n2 = 0, temp = 0, fraction = "";
|
||||
n = n - 1;
|
||||
for (var i = 1; i < (man + 1) ; i++) {
|
||||
temp = n2 + 1 / Math.pow(2, i);
|
||||
if (temp <= n) {
|
||||
n2 = temp;
|
||||
fraction += "1";
|
||||
}
|
||||
else fraction += "0";
|
||||
}
|
||||
|
||||
var res = sign + exponent + fraction;
|
||||
return res;
|
||||
}
|
||||
|
||||
var binary2Real = function (binary, type) {
|
||||
var neg, nullE = true, nullF = true, oneE = true, strE = "", x = 0, exp, man, bias;
|
||||
|
||||
if ((binary.charAt(0) == 0))
|
||||
neg = false;
|
||||
else
|
||||
neg = true;
|
||||
|
||||
switch (type) {
|
||||
|
||||
case TcAdsWebService.TcAdsWebServiceDataTypes.LREAL:
|
||||
exp = 11;
|
||||
man = 52;
|
||||
bias = 1023;
|
||||
break;
|
||||
|
||||
case TcAdsWebService.TcAdsWebServiceDataTypes.REAL:
|
||||
default:
|
||||
exp = 8;
|
||||
man = 23;
|
||||
bias = 127;
|
||||
}
|
||||
|
||||
for (var i = 1; i <= exp; i++) {
|
||||
strE += binary.charAt(i);
|
||||
|
||||
if (binary.charAt(i) != "0")
|
||||
nullE = false;
|
||||
|
||||
if (binary.charAt(i) != "1")
|
||||
oneE = false;
|
||||
}
|
||||
|
||||
var strF = "";
|
||||
|
||||
for (var i = exp + 1; i <= exp + man; i++) {
|
||||
strF += binary.charAt(i);
|
||||
|
||||
if (binary.charAt(i) != "0")
|
||||
nullF = false;
|
||||
}
|
||||
|
||||
if (nullE && nullF) {
|
||||
//return ((!neg) ? "0" : "-0");
|
||||
// Return zero for negative and positive zero
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
if (oneE && nullF)
|
||||
return Infinity;
|
||||
|
||||
if (oneE && nullF)
|
||||
return NaN;
|
||||
|
||||
var exponent = binary2Dec(strE) - bias;
|
||||
|
||||
var fraction = 0;
|
||||
|
||||
for (var i = 0; i < strF.length; ++i) {
|
||||
fraction = fraction + parseInt(strF.charAt(i)) * Math.pow(2, -(i + 1));
|
||||
}
|
||||
|
||||
fraction = fraction + 1;
|
||||
var ret = Math.pow(-1, binary.charAt(0)) * fraction * Math.pow(2, exponent);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
var ToByte = function (v) {
|
||||
return parseInt(v, 10) & 255;
|
||||
}
|
||||
|
||||
var dec2Binary = function (value) {
|
||||
var buf = "";
|
||||
var buf2 = "";
|
||||
var quotient = value;
|
||||
var i = 0;
|
||||
|
||||
do {
|
||||
buf += (Math.floor(quotient % 2) == 1 ? "1" : "0");
|
||||
quotient /= 2;
|
||||
i++;
|
||||
}
|
||||
while (i < 8);
|
||||
|
||||
buf = buf.split("").reverse().join("");
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
var binary2Dec = function (binary) {
|
||||
var ret = 0;
|
||||
|
||||
for (var i = 0; i < binary.length; ++i) {
|
||||
if (binary.charAt(i) == '1')
|
||||
ret = ret + Math.pow(2, (binary.length - i - 1));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
var convertDataToUInt = function (data, len) {
|
||||
var res = 0;
|
||||
|
||||
if (len == 4) {
|
||||
res = (data.charCodeAt(3) << 24 | data.charCodeAt(2) << 16 | data.charCodeAt(1) << 8 | data.charCodeAt(0 + 0)) >>> 0; // ">>> 0" = handle value as unsigned
|
||||
}
|
||||
else if (len == 2) {
|
||||
res = (data.charCodeAt(1) << 8 | data.charCodeAt(0)) >>> 0; // ">>> 0" = handle value as unsigned
|
||||
}
|
||||
else if (len == 1) {
|
||||
res = data.charCodeAt(0) >>> 0; // ">>> 0" = handle value as unsigned
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
var convertDataToInt = function (data, len) {
|
||||
var res = 0;
|
||||
|
||||
if (len == 4) {
|
||||
res = (data.charCodeAt(3) << 24 | data.charCodeAt(2) << 16 | data.charCodeAt(1) << 8 | data.charCodeAt(0));
|
||||
}
|
||||
else if (len == 2) {
|
||||
var cCode = (data.charCodeAt(1) << 8 | data.charCodeAt(0));
|
||||
var sign = (cCode & 0x8000);
|
||||
if (sign == 0x8000) {
|
||||
// Byte 1 = 100000, Byte 0 = 000000
|
||||
// Fill left 16 Bytes with 1
|
||||
cCode = cCode | 0xFFFF8000;
|
||||
} else {
|
||||
// Byte 1 = 000000, Byte 0 = 000000
|
||||
// Fill left 16 Bytes with 0
|
||||
cCode = cCode & 0x7FFF;
|
||||
}
|
||||
res = cCode;
|
||||
}
|
||||
else if (len == 1) {
|
||||
// JavaScript handles numbers always as 32 bit integer values;
|
||||
var cCode = data.charCodeAt(0);
|
||||
var sign = (cCode & 0x80);
|
||||
if (sign == 0x80) {
|
||||
// byte_0 = 100000
|
||||
// Fill left 24 Bytes with 1
|
||||
cCode = cCode | 0xFFFFFF80;
|
||||
} else {
|
||||
// byte_0 = 000000
|
||||
// Fill left 24 Bytes with 0
|
||||
cCode = cCode & 0x7F;
|
||||
}
|
||||
res = cCode;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
});
|
||||
////////////////////////////////////////////////////
|
||||
// Expose TcAdsWebService instance to window object.
|
||||
window.TcAdsWebService = TcAdsWebService;
|
||||
////////////////////////////////////////////////////
|
||||
})(window);
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Reference in New Issue
Block a user