Посібник по промисловим мережам
Перевіряє тип отриманого пакету по даним data
, повертає:
data
- даніdata
на довжину FastAcknowledge
function checkRFCData(data){
var ret=null;
var RFC_Version = data[0];
var TPKT_Length = data.readInt16BE(2);
var TPDU_Code = data[5]; //Data==0xF0 !!
//empty fragmented frame => 0=not the last package; 1=last package
var LastDataUnit = data[6];
if(RFC_Version !==0x03 && TPDU_Code !== 0xf0){
//Перевіряє чи це пакет RFC і пакет даних
return 'error';
} else if ((LastDataUnit >> 7) === 0 &&
TPKT_Length == data.length &&
data.length === 7){
// Перевіряє, чи це пакет Fast Acknowledge від старіших ПЛК або WinAC,
// чи дані занадто довгі...
// Наприклад: <Buffer 03 00 00 07 02 f0 00> => data.length==7
ret='fastACK';
} else if ((LastDataUnit >> 7) == 1 && TPKT_Length <= data.length){
// Перевіряє, чи це пакет FastAcknowledge + S7Data package
// <Buffer 03 00 00 1b 02 f0 80 32 03 00 00 00 00 00 08 00 00 00 00
// f0 00 00 01 00 01 00 f0> => data.length==7+20=27
ret=data;
} else if ((LastDataUnit >> 7) == 0 && TPKT_Length !== data.length){
// Перевіряє, чи це пакет FastAcknowledge +
// FastAcknowledge package + S7Data package
// Можливо, через те, що NodeS7 або Application занадто повільні на даний момент!
// <Buffer 03 00 00 07 02 f0 00 03 00 00 1b 02 f0 80 32 03 00 00 00 00
// 00 08 00 00 00 00 f0 00 00 01 00 01 00 f0> => data.length==7+7+20=34
// Відріжте перший пакет швидкого підтвердження
ret = data.slice(7, data.length)
} else {
ret='error';
}
return ret;
}