|
|
@@ -0,0 +1,970 @@
|
|
|
+const MAGIC=0xdead;
|
|
|
+const PKT_TYPE=function(){
|
|
|
+ var len = 0;
|
|
|
+ return {
|
|
|
+ PKT_TYPE_ACK:len++,
|
|
|
+ PKT_TYPE_PARAS:len++,
|
|
|
+ PKT_TYPE_POWER_CH:len++, //power_ch_t
|
|
|
+ PKT_TYPE_POWER_TOTAL:len++, //power_total_t
|
|
|
+ PKT_TYPE_POWER_RESET:len++,
|
|
|
+ PKT_TYPE_CH_ALL:len++,
|
|
|
+ PKT_TYPE_SCAN:len++,
|
|
|
+ PKT_TYPE_FACTORY:len++,
|
|
|
+ PKT_TYPE_ALARM:len++,
|
|
|
+ PKT_TYPE_SENSOR:len++,
|
|
|
+ PKT_TYPE_BREAKER:len++,
|
|
|
+ PKT_TYPE_STAT:len++,
|
|
|
+ PKT_TYPE_MESG:len++,
|
|
|
+ PKT_TYPE_FILE:len++,
|
|
|
+ }
|
|
|
+}();
|
|
|
+const SUB_TYPE=function(){
|
|
|
+ var len = 0;
|
|
|
+ return {
|
|
|
+ SUB_TYPE_POWER_SWITCH:len++,
|
|
|
+ SUB_TYPE_POWER_ALARM:len++,
|
|
|
+ SUB_TYPE_POWER_THRESHOLD:len++, //power_ch_t
|
|
|
+ SUB_TYPE_POWER_START_DELAY:len++, //power_total_t
|
|
|
+ SUB_TYPE_POWER_STOP_DELAY:len++,
|
|
|
+ }
|
|
|
+}();
|
|
|
+
|
|
|
+const PDU_TYPE=function(){
|
|
|
+ var len = 0;
|
|
|
+ return {
|
|
|
+ PDU_AC_I1O1:len++,
|
|
|
+ PDU_DC_I1O1:len+=2,
|
|
|
+ PDU_AC_I3O3:len++,
|
|
|
+ PDU_AC_I3O1:len++,
|
|
|
+ PDU_AC_I3O1_H:len++,
|
|
|
+ }
|
|
|
+}();
|
|
|
+///////////////////////////////////////////////////////
|
|
|
+function array_to_string(data){
|
|
|
+ const decoder = new TextDecoder();
|
|
|
+ return decoder.decode(new Uint8Array(data));
|
|
|
+}
|
|
|
+
|
|
|
+function string_to_array(data,len){
|
|
|
+ const encoder = new TextEncoder(); // ĬÈÏ'utf-8'±àÂë
|
|
|
+ const buffer = encoder.encode(data);
|
|
|
+ const fixedArray = new Uint8Array(len);
|
|
|
+ fixedArray.set(buffer);
|
|
|
+ fixedArray.fill(0, buffer.length);
|
|
|
+ return fixedArray.buffer;
|
|
|
+}
|
|
|
+function array_cat(a1,a2){
|
|
|
+ var tlen=a1.byteLength+a2.byteLength;
|
|
|
+ var buffer = new ArrayBuffer(tlen);
|
|
|
+ var vw = new Uint8Array(buffer);
|
|
|
+
|
|
|
+ var vw1 = new Uint8Array(a1);
|
|
|
+ for(var i=0; i<a1.byteLength; i++) {
|
|
|
+ vw[i] = vw1[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ var vw2 = new Uint8Array(a2);
|
|
|
+ for(var i=0; i<a2.byteLength; i++) {
|
|
|
+ vw[i+a1.byteLength] = vw2[i];
|
|
|
+ }
|
|
|
+ return buffer;
|
|
|
+}
|
|
|
+function mk_hdr(type,flag)
|
|
|
+{
|
|
|
+ var tmp,length=0;
|
|
|
+ var buffer = new ArrayBuffer(13);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ var t = MAGIC;
|
|
|
+ tmp.setUint16(0,t,true);//magic
|
|
|
+ length += 2;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,type,true); //type
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,0,true); //subtype
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,0,true); //nack
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint32(0,flag,true); //flag
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint32(0,0,true); //dlen
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ return buffer;
|
|
|
+}
|
|
|
+function pkt_to_bin(type,subtype,js)
|
|
|
+{
|
|
|
+ var tmp,tmp2,length=0;
|
|
|
+ var buffer = new ArrayBuffer(13);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ var t = MAGIC;
|
|
|
+ tmp.setUint16(0,t,true);//magic
|
|
|
+ length += 2;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,type,true); //type
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,subtype,true); //subtype
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,0,true); //nack
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint32(0,0,true); //flag
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint32(0,js.len,true); //dlen
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ switch(type){
|
|
|
+ case PKT_TYPE.PKT_TYPE_POWER_CH:
|
|
|
+ tmp2 = new powerc_to_bin(js);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
|
|
|
+ tmp2 = BIN.powert.j2b(js);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PKT_TYPE.PKT_TYPE_ALARM:
|
|
|
+ tmp2 = BIN.alarm.j2b(js);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ return tmp2;
|
|
|
+ }
|
|
|
+ return array_cat(buffer,tmp2);
|
|
|
+}
|
|
|
+function bin_to_pkt(bin)
|
|
|
+{
|
|
|
+ var hdr = new bin_to_hdr(bin);
|
|
|
+
|
|
|
+ var data = bin.slice(hdr.len);
|
|
|
+ if(data.byteLength>0 && hdr.dlen==data.byteLength) {
|
|
|
+ switch(hdr.type) {
|
|
|
+ case PKT_TYPE.PKT_TYPE_POWER_CH:
|
|
|
+ hdr.powerc = new bin_to_powerc(data);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
|
|
|
+ hdr.powert = BIN.powert.b2j(data);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PKT_TYPE.PKT_TYPE_ALARM:
|
|
|
+ hdr.alarmd = BIN.alarmd.b2j(data);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default :
|
|
|
+ console.log("wrong hdr type: "+hdr.type);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return hdr;
|
|
|
+}
|
|
|
+
|
|
|
+///////////////////////////////////////////////////
|
|
|
+function bin_to_hdr(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.magic = tmp.getUint16(0,true);
|
|
|
+ length += 2;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.type = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.subtype = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.nack = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.flag = tmp.getUint8(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.dlen = tmp.getUint32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_info(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ this.name = array_to_string(bin.slice(0,32));
|
|
|
+ length += 32;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.type = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.addr = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.ch = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.sch = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.ph_id = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.ph_val = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.start_delay = tmp.getUint32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.stop_delay = tmp.getUint32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_power(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.voltage = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.current = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.power = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.freq = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.factor = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.consump = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.active = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.reactive = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.ph_out = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.status = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.nwire = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_alarm(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.v_upper = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.v_lower = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.c_upper = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.p_upper = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.w_upper = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.ph_loss = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_thrval(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.en = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.val = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.act = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ this.act_para = [];
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ for(var i=0; i<14; i++) {
|
|
|
+ this.act_para[i] = tmp.getUint8(i,true);
|
|
|
+ }
|
|
|
+ length += 14;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_thr(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ this.v_upper = new bin_to_thrval(bin.slice(length));
|
|
|
+ length += this.v_upper.len;
|
|
|
+
|
|
|
+ this.v_lower = new bin_to_thrval(bin.slice(length));
|
|
|
+ length += this.v_lower.len;
|
|
|
+
|
|
|
+ this.c_upper = new bin_to_thrval(bin.slice(length));
|
|
|
+ length += this.c_upper.len;
|
|
|
+
|
|
|
+ this.p_upper = new bin_to_thrval(bin.slice(length));
|
|
|
+ length += this.p_upper.len;
|
|
|
+
|
|
|
+ this.w_upper = new bin_to_thrval(bin.slice(length));
|
|
|
+ length += this.w_upper.len;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_powerc(bin) {
|
|
|
+ var tmp, bin2, length=0;
|
|
|
+
|
|
|
+ this.info = new bin_to_info(bin);
|
|
|
+ length += this.info.len;
|
|
|
+
|
|
|
+ this.power = [];
|
|
|
+ for(var i=0; i<3; i++) {
|
|
|
+ this.power[i] = new bin_to_power(bin.slice(length));
|
|
|
+ length += this.power[i].len;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.thr = new bin_to_thr(bin.slice(length));
|
|
|
+ length += this.thr.len;
|
|
|
+
|
|
|
+ this.alarm = new bin_to_alarm(bin.slice(length));
|
|
|
+ length += this.alarm.len;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.time = tmp.getUint32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.pbrd = tmp.getUint32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_total(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.voltage = tmp.getFloat32 (0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.current = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.power = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.freq = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.consump = tmp.getFloat32 (0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.active = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.reactive = tmp.getFloat32(0,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_powert(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.type = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ this.total = [];
|
|
|
+ for(var i=0; i<3; i++) {
|
|
|
+ this.total[i] = new bin_to_total(bin.slice(length));
|
|
|
+ length += this.total[i].len;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+function bin_to_alarmd(bin) {
|
|
|
+ var tmp, length=0;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.ch = tmp.getUint8(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ this.alarm = new bin_to_alarm(bin.slice(length));
|
|
|
+ length += this.alarm.len;
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ this.time = tmp.getUint32(0,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ this.len = length;
|
|
|
+}
|
|
|
+///////////////////////////////////////////////////
|
|
|
+function hdr_to_bin(js) {
|
|
|
+ var tmp, length=0;
|
|
|
+ var buffer = new ArrayBuffer(js.len);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint16(0,js.magic,true);
|
|
|
+ length += 2;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.type,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.subtype,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.nack,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint32(0,js.flag,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint32(0,js.dlen,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ return buffer;
|
|
|
+}
|
|
|
+function info_to_bin(js) {
|
|
|
+ var tmp, length=0;
|
|
|
+ var buffer = new ArrayBuffer(js.len);
|
|
|
+
|
|
|
+ var name = string_to_array(js.name);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.type,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.addr,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.ch,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.sch,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.ph_id,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.ph_val,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint32(0,js.start_delay,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint32(0,js.stop_delay,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ return array_cat(name,buffer);
|
|
|
+}
|
|
|
+function power_to_bin(js) {
|
|
|
+ var tmp, length=0;
|
|
|
+ var buffer = new ArrayBuffer(js.len);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.voltage,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.current,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.power,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.freq,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.factor,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.consump,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.active,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.reactive,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.ph_put,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.status,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.nwire,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ return buffer;
|
|
|
+}
|
|
|
+function alarm_to_bin(js) {
|
|
|
+ var tmp, length=0;
|
|
|
+ var buffer = new ArrayBuffer(js.len);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.v_upper,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.v_lower,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.c_upper,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.p_upper,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.w_upper,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.ph_loss,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ return buffer;
|
|
|
+}
|
|
|
+function thrval_to_js(js) {
|
|
|
+ var tmp, length=0;
|
|
|
+ var buffer = new ArrayBuffer(js.len);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setUint8(0,js.en,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.val,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.getUint8(0,js.act,true);
|
|
|
+ length += 1;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ for(var i=0; i<14; i++) {
|
|
|
+ tmp.setUint8(i,js.act_para[i],true);
|
|
|
+ }
|
|
|
+ length += 14;
|
|
|
+
|
|
|
+ return buffer;
|
|
|
+}
|
|
|
+function thr_to_bin(js) {
|
|
|
+ var bin,tmp, length=0;
|
|
|
+
|
|
|
+ bin = thrval_to_js(js.v_upper);
|
|
|
+ tmp = thrval_to_js(js.v_lower);
|
|
|
+
|
|
|
+ bin = array_cat(bin, tmp);
|
|
|
+ tmp = thrval_to_js(js.c_upper);
|
|
|
+ bin = array_cat(bin, tmp);
|
|
|
+
|
|
|
+ tmp = thrval_to_js(js.p_upper);
|
|
|
+ bin = array_cat(bin, tmp);
|
|
|
+
|
|
|
+ tmp = thrval_to_js(js.w_upper);
|
|
|
+ bin = array_cat(bin, tmp);
|
|
|
+
|
|
|
+ return bin;
|
|
|
+}
|
|
|
+function powerc_to_bin(js) {
|
|
|
+ var bin,tmp, length=0;
|
|
|
+
|
|
|
+ bin = info_to_bin(js.info);
|
|
|
+
|
|
|
+ for(var i=0; i<3; i++) {
|
|
|
+ tmp = power_to_bin(js.power[i]);
|
|
|
+ bin = array_cat(bin, tmp);
|
|
|
+ }
|
|
|
+
|
|
|
+ tmp = thr_to_bin(js.thr);
|
|
|
+ bin = array_cat(bin, tmp);
|
|
|
+
|
|
|
+ tmp = alarm_to_bin(js.alarm);
|
|
|
+ bin = array_cat(bin, tmp);
|
|
|
+
|
|
|
+ var buf = new ArrayBuffer(8);
|
|
|
+ tmp = new DataView(buf, 0);
|
|
|
+ tmp.setUint32(0,js.time,true);
|
|
|
+ tmp.setUint32(4,js.pbrd,true);
|
|
|
+
|
|
|
+ bin = array_cat(bin, buf);
|
|
|
+
|
|
|
+ return bin;
|
|
|
+}
|
|
|
+function total_to_bin(js) {
|
|
|
+ var tmp, length=0;
|
|
|
+ var buffer = new ArrayBuffer(js.len);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.voltage,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.current,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.power,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.freq,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.consump,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.factor,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.active,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, length);
|
|
|
+ tmp.setFloat32(0,js.reactive,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ return buffer;
|
|
|
+}
|
|
|
+function powert_to_bin(js) {
|
|
|
+ var tmp,bin2,length=0;
|
|
|
+ var bin = new ArrayBuffer(1);
|
|
|
+
|
|
|
+ tmp = new DataView(bin, length);
|
|
|
+ tmp.setUint8(0,js.type,true);
|
|
|
+ length += 4;
|
|
|
+
|
|
|
+ for(var i=0; i<3; i++) {
|
|
|
+ bin2 = total_to_bin(js.total[i]);
|
|
|
+ bin = array_cat(bin, bin2);
|
|
|
+ }
|
|
|
+
|
|
|
+ return bin;
|
|
|
+}
|
|
|
+function alarmd_to_bin(js) {
|
|
|
+ var tmp, length=0;
|
|
|
+ var bin,buffer = new ArrayBuffer(1);
|
|
|
+
|
|
|
+ tmp = new DataView(buffer, 0);
|
|
|
+ tmp.setUint8(0,js.ch,true);
|
|
|
+
|
|
|
+ var alarm = alarm_to_bin(js.alarm);
|
|
|
+ bin = array_cat(buffer, alarm);
|
|
|
+
|
|
|
+ buffer = new ArrayBuffer(4);
|
|
|
+ tmp = new DataView(buffer, 0);
|
|
|
+ tmp.setUint32(0,js.time,true);
|
|
|
+
|
|
|
+ return array_cat(bin, buffer);
|
|
|
+}
|
|
|
+//////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+var XXX ={};
|
|
|
+XXX.hdr = function() {
|
|
|
+ this.j2b = function (js) {
|
|
|
+ var tmp;
|
|
|
+
|
|
|
+ switch(js.type){
|
|
|
+ case PKT_TYPE.PKT_TYPE_POWER_CH:
|
|
|
+ tmp = BIN.powerc.j2b(js.powerc);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
|
|
|
+ tmp = BIN.powert.j2b(js.powert);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PKT_TYPE.PKT_TYPE_ALARM:
|
|
|
+ tmp = BIN.alarm.j2b(js.alarmd);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ return tmp;
|
|
|
+ }
|
|
|
+ js.dlen = tmp.byteLength;
|
|
|
+ var hdr = new hdr_to_bin(js);
|
|
|
+ return array_cat(hdr,tmp);
|
|
|
+ };
|
|
|
+
|
|
|
+ this.b2j = function (bin) {
|
|
|
+ var tmp;
|
|
|
+ var hdr = new bin_to_hdr(bin);
|
|
|
+
|
|
|
+ if(hdr.nack == 1){
|
|
|
+ //tmp = myBinary.ack.bin2js(bin,this.hdr.len,true);
|
|
|
+ //myLog('log',tmp);
|
|
|
+ //var data = tmp.data;
|
|
|
+ }
|
|
|
+
|
|
|
+ var data = bin.slice(hdr.len);
|
|
|
+ if(data.byteLength>0 && hdr.dlen==data.byteLength) {
|
|
|
+ switch(hdr.type) {
|
|
|
+ case PKT_TYPE.PKT_TYPE_POWER_CH:
|
|
|
+ hdr.powerc = BIN.powerc.b2j(data);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
|
|
|
+ hdr.powert = BIN.powert.b2j(data);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PKT_TYPE.PKT_TYPE_ALARM:
|
|
|
+ hdr.alarmd = BIN.alarmd.b2j(data);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default :
|
|
|
+ console.log("wrong hdr type: "+hdr.type);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return hdr;
|
|
|
+ }
|
|
|
+};
|
|
|
+XXX.paras=function() {
|
|
|
+ this.j2b = function (js) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ this.b2j = function (bin) {
|
|
|
+
|
|
|
+ }
|
|
|
+};
|
|
|
+XXX.powerc=function() {
|
|
|
+ this.j2b = function (js) {
|
|
|
+ return new powerc_to_bin(js);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.b2j = function (bin) {
|
|
|
+ var tmp=[],length=0;
|
|
|
+ for(var i=0;; i++) {
|
|
|
+ tmp[i] = new bin_to_powerc(bin.slice(length));
|
|
|
+ length += tmp[i].len;
|
|
|
+ if(length >= bin.byteLength) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return tmp;
|
|
|
+ }
|
|
|
+};
|
|
|
+XXX.powert=function() {
|
|
|
+ this.j2b = function (js) {
|
|
|
+ return new powert_to_bin(js);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.b2j = function (bin) {
|
|
|
+ return new bin_to_powert(bin);
|
|
|
+ }
|
|
|
+};
|
|
|
+XXX.alarmd=function() {
|
|
|
+ this.j2b = function (js) {
|
|
|
+ return new alarmd_to_bin(js);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.b2j = function (bin) {
|
|
|
+ return new bin_to_alarmd(bin);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+var BIN=new function() {
|
|
|
+ this.hdr = new XXX.hdr();
|
|
|
+ this.paras = new XXX.paras();
|
|
|
+ this.powerc = new XXX.powerc();
|
|
|
+ this.powert = new XXX.powert();
|
|
|
+ this.alarmd = new XXX.alarmd();
|
|
|
+}();
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////
|
|
|
+function LOG(){
|
|
|
+ var data = [];
|
|
|
+ for(var i= 1,len=arguments.length;i<len;i++){
|
|
|
+ data.push(arguments[i])
|
|
|
+ }
|
|
|
+ console.log(data);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function WS(url,fn) {
|
|
|
+ this.url = url;
|
|
|
+ this.name = 'myWebs';
|
|
|
+ this.open = _open;
|
|
|
+ this.reopen = _reopen;
|
|
|
+ this.close = _close;
|
|
|
+ this.send = _send;
|
|
|
+ this.state = _state;
|
|
|
+ this.setcb = _setcb;
|
|
|
+ this.closeCount = 0;
|
|
|
+ this.maxConnect = 100;
|
|
|
+ var his = this;
|
|
|
+ this.open();
|
|
|
+ function _open() {
|
|
|
+ console.log("____url: ", his.url);
|
|
|
+ his.ws = new WebSocket(his.url);
|
|
|
+ his.ws.binaryType = 'arraybuffer';
|
|
|
+ his.ws.onopen = _onopen;
|
|
|
+ his.ws.onclose = _onclose;
|
|
|
+ his.ws.onmessage = _onmsg;
|
|
|
+ his.ws.onerror = _onerror;
|
|
|
+ }
|
|
|
+
|
|
|
+ function _reopen() {
|
|
|
+ _close();
|
|
|
+ _open(his.url);
|
|
|
+ }
|
|
|
+
|
|
|
+ function _close() {
|
|
|
+ his.ws.close();
|
|
|
+ }
|
|
|
+
|
|
|
+ function _send(msg) {
|
|
|
+ if (his.ws.readyState != WebSocket.OPEN)
|
|
|
+ return;
|
|
|
+ his.ws.send(msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ function _state() {
|
|
|
+ return his.ws.readyState;
|
|
|
+ }
|
|
|
+
|
|
|
+ function _setcb(tp, f) {
|
|
|
+ switch (tp) {
|
|
|
+ case "open":
|
|
|
+ his.ws.onopen = f;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "close":
|
|
|
+ his.ws.onclose = f;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "msg":
|
|
|
+ his.ws.onmessage = f;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "err":
|
|
|
+ his.ws.onerror = f;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function loop_send() {
|
|
|
+ console.log("PKT_TYPE_POWER_CH request");
|
|
|
+ _send(mk_hdr(PKT_TYPE.PKT_TYPE_POWER_CH));
|
|
|
+ setTimeout(loop_send, 2000);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ function _onopen(evt) {
|
|
|
+ his.closeCount = 0;
|
|
|
+ console.log("___ ws.onopen");
|
|
|
+ setTimeout(loop_send, 2000);
|
|
|
+ }
|
|
|
+
|
|
|
+ function _onclose(evt) {
|
|
|
+ LOG("ws.onclose");
|
|
|
+ setTimeout(_reopen, 3000);
|
|
|
+ his.closeCount += 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ function _onmsg(evt) {
|
|
|
+ console.log("___ ws.onmsg");
|
|
|
+ if (evt.data instanceof ArrayBuffer) {
|
|
|
+ fn(evt.data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function _onerror(evt) {
|
|
|
+ console.log("___ ws.onerror");
|
|
|
+ //write_scr('<span style="color: red;">ERROR:</span> '+ evt.data);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|