การคำนวนเวลาในการรับส่งข้อมูล Modbus RTU และ Modbus TCP

ยกตัวอย่างการอ่านค่า Holding registers ขนาด 10 register (กำหนดที่ขนาดBlock SizeของModbus OPC) โดยสมมุติว่าใช้ Modbus OPC Server ร้องขอการอ่านข้อมูลไปยังอุปกรณ์

Modbus RTU:

ขนาดRequest packet คำนวนจาก:

Slave address (1 byte) + Function code (1 byte) + Offset (2 bytes) + ข้อมูลจำนวนRegister (2 bytes) + CRC (2 bytes) = 8 bytes

ขนาด Response packet จากอุปกรณ์คำนวนจาก:

Slave address (1 byte) + Function code (1 byte) + Byte Count (1 byte) + Data (ข้อมูล10 register x 2 bytes) + CRC (2 bytes) = 25 bytes

ทีนี้มาคำนวนจำนวนbitในแต่ละbyteซึ่งขึ้นอยู่กับคอนฟิกของSerialที่เซตไว้อย่าง parity, data bits เป็นต้น Modbusแต่ละbyteประกอบด้วย  1 start bit, 8 data bits, 1 parity bit และ1 stop bit = 11 bits ต่อ byte

ดังนั้นจำนวนที่ใช้Request/Responseข้อมูลHolding Register 10ตัวก็คือ

(25 + 8) * 11 = 363 bits

ขั้นต่อไปคำนวนว่า 1 bit ใช้เวลาในแต่ละBuad rate เท่าใด

สมมุติว่าใช้ Baud rate คือ 19200 ข้อมูล 1 bit จะใช้เวลา 1/19200 / 1 = 52.083 micro seconds

ดังนั้นข้อมูล 363 bit ใช้เวลา = 52 micro seconds * 363 = 18.876 milliseconds

 

 

Modbus TCP:

ขนาดRequest packet คำนวนจาก:

Transaction ID (2 bytes) + Protocol ID (2 bytes) + Packet Length (2 bytes) + Unit ID (1 byte) + Function code (1 byte) + Offset (2 bytes) + Number of Regs (2 bytes) = 12 bytes

ขนาด Response packet จากอุปกรณ์คำนวนจาก:

Transaction ID (2 bytes) + Protocol ID (2 bytes) + Packet Length (2 bytes) + Unit ID (1 byte) + Function code (1 byte) + Byte Count (1 byte) + Data (10 x 2 bytes) = 29 bytes

สำหรับ Modbus TCP จะใช้ 8 bits ต่อ byte

ดังนั้นจำนวนที่ใช้Request/Responseข้อมูลHolding Register 10ตัวก็คือ

(29 + 12) * 8 = 328 bits

ยังไม่หมดครับ กรณี TCP/IP จะมีข้อมูลเลเยอร์อื่น ๆ ที่ใช้สำหรับเลเยอร์ของโปรโตคอล TCP/IP อีกประมาณ 54 byte ต่อข้อมูลแต่ละbitซึ่งจะเท่ากับ

54 * 8 bits = 432 bits

ดังนั้นขนาดข้อมูลที่ใช้ต่อRegister 10 ตัวทั้งRequest และ Response จึงมีขนาดเท่ากับ

(2 * 432) + 328 = 1192 bits             <——– 2 * 423 เพราะมีทั้ง Request และ Response

ขั้นต่อไปคำนวนว่า 1 bit ใช้เวลาเท่าใด

สมมุติว่าความเร็วของ TCP คือ 100BaseT เวลาที่ใช้ต่อbitจะเท่ากับ

= 1/100Mbps = 10 nano seconds (1.0E-8)

เวลาที่ใช้ต่อRegister 10 ตัวทั้งRequest และ Response จึงเท่ากับ

10 nano seconds * 1192 = 11920 nano seconds = 11.92 micro seconds

 

สรุปว่า Holding Register ขนาด 10 ตัวใช้เวลา

18.876 milliseconds สำหรับ Modbus RTU และ 11.92 micro seconds สำหรับ Modbus TCP

เวลาเราคำนวนข้อมูลของอุปกรณ์ทั้งหมดก็ต้องรู้ว่าจะใช้กี่ Register แล้วค่อยมาหาเวลาครับ เช่น Power Meter 1 ตัวต้องการสัญญาณประเภท WORD (16 bit) 10 สัญญาณ และ DWORD (32 bit) 10 สัญญาณ เราก็จะใช้ Register ทั้งหมดเท่ากับ 10 + 10 x 2 = 30 registers ซึ่งจากตัวอย่างข้างต้นจะใช้เวลาประมาณ 56.63 milliseconds สำหรับ Modbus RTU และ 35.76 microseconds สำหรับ Modbus TCP

แต่อย่าลืมนะครับว่ากรณี TCP ถ้าใช้ LAN ร่วมกับงานอื่น ๆ ด้วย Bandwidth ก็จะลดลงไปด้วยนะครับ

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s