Industrial Communication Protocol Segregation

Mengapa ada banyak sekali protokol komunikasi data di dunia ini?

Mungking ini pertanyaan yang sering terpikirkan dibanyak benak orang banyak selama ini. apa saja Industrial protocol yang ada? sangat-sangat banyak… karena setiap brand device mengusung protocolnya masing-masing dan dengan keunggulannya masing-masing. bisa di cek di Driver List protocol Machine SCADA Expert bayangkan disini saja ada 200driver.

tapi, dari kesemua protokol, ada beberapa Industrial protokol (yang digunakan untuk Control System) yang sangat-sangat common atau populer di segment nya masing-masing yang digunakan banyak brand. apa saja?

Modbus, Profibus, Modbus TCP, Profinet, Ethernet/IP, DeviceNET, DNP3, IEC61850, BAC, BACNET, IEC 60870-5-101, IEC 60870-5-104, EtherCAT, LonWorks, CANOpen, HART.

Ayo kita segragasi berdasarkan pemakaiannya:

Industri Proses (Field Bus, Instrumentation / Transmitter) :
  • Modbus
  • HART
  • Profibus PA
  • FF (FieldbusFoundation)
Industri Proses (device network)
  • Modbus TCP
  • Profinet
  • Ethernet/IP (CIP)
Industri Proses (Control Network – To software Communication)
  • Modbus TCP
  • EtherNet/IP
Industri Proses – Telemetry
  • DNP3
  • IEC 60870-5-101/104
  • Modbus
Manufacturing
  • CANOpen
  • AS-i
  • DeviceNET
  • Profibus (PA/DP)
  • CANBus
Substation Automation / Electrical Device Network
  • IEC 61850
  • DNP3
  • IEC 60870-5-101/104
  • Modbus
Building Automation
  • BACNet – create by ASHRAE
  • LonWorks
  • Modbus

MODBUS TCP to MODBUS RTU with NODE-RED

var A = [8];
A[0]= msg.payload[6];
A[1]= msg.payload[7];
A[2]= msg.payload[8];
A[3]= msg.payload[9];
A[4]= msg.payload[10];
A[5]= msg.payload[11];

// Compute the MODBUS RTU CRC
var crc = 0xFFFF;

for (var pos = 0; pos < 6; pos++) { crc ^= A[pos]; // XOR byte into least sig. byte of crc for (var i = 8; i !== 0; i--) { // Loop over each bit if ((crc & 0x0001) !== 0) { // If the LSB is set crc >>= 1; // Shift right and XOR 0xA001
crc ^= 0xA001;
}
else // Else LSB is not set
crc >>= 1; // Just shift right
}
}
var TempS = crc.toString(16);

A[6] = parseInt(TempS.substring(0,2),10);
A[7] = parseInt(TempS.substring(2,4),10);

msg.payload = A;
return msg;