เนื้อหาวันที่ : 2010-05-04 17:31:44 จำนวนผู้เข้าชมแล้ว : 10254 views

มารู้จักโปรโตคอล Modbus (ตอนที่ 2)

การสื่อสารข้อมูลนั้นจำเป็นต้องมีการสื่อสัญญาณ การเชื่อมต่อ และที่ขาดไม่ได้เช่นกัน นั้นคือภาษาในการสื่อสารหรือทางเทคนิคเรียกว่า โปรโตคอล (Protocol) มีโปรโตคอลมากมายในระบบงานอุตสาหกรรมแต่โปรโตคอลตัวหนึ่งที่ใช้กันมากในงานอุตสาหกรรมและรู้จักกันดีนั้นคือโปรโตคอล Modbus

การสื่อสารข้อมูลในงานอุตสาหกรรม 
ตอนที่ 7 มารู้จักโปรโตคอล Modbus (ตอน 2)
.
พิชิต จินตโกศลวิทย์ 
pichitor@yahoo.com
.

.
2. โครงสร้างของโปรโตคอล Modbus

ตารางที่ 1 แสดงรูปแบบทั่วไปของฟอร์แมต Modbus

.

ฟิลด์แรกในแต่ละเมสเสจจะเป็นฟิลด์แอดเดรส หรือฟิลด์หมายเลขของอุปกรณ์ซึ่งจะมีขนาดความยาวเพียง 1 ไบต์ ในเฟรมร้องขอไบต์นี้จะใช้ระบุถึงตัวคอนโทรลเลอร์ที่คำร้องขอจะส่งไปถึง ส่วนในเฟรมการตอบสนองจะเริ่มต้นด้วยฟิลด์หมายเลขแอดเดรสที่บอกถึงตัวอุปกรณ์ที่ตอบสนองกลับ

.

แต่ละสแลฟสามารถมีค่าของแอดเดรสอยู่ในช่วงระหว่าง 1 ถึง 247  ในทางปฏิบัติแล้วนั้นคือการจำกัดจำนวนของสแลฟ โดยที่จริงแล้วในระบบเครือข่ายจะมีมาสเตอร์หนึ่งตัว และสแลฟสองถึงสามตัวเท่านั้นเพราะถ้ามีจำนวนสแลฟมาก ประสิทธิภาพของการสื่อสารจะลดถอยลง

.

ฟิลด์ที่สองในแต่ละเมสเสจคือ ฟิลด์ฟังก์ชั่นซึ่งมีขนาดเพียงหนึ่งไบต์เช่นเดียวกัน ในการร้องขอ ไบต์นี้จะระบุฟังก์ชั่นที่ให้ตัวอุปกรณ์ปลายทางดำเนินการ

.

ถ้าอุปกรณ์ปลายทางสามารถดำเนินการตามฟังก์ชั่นที่ร้องขอ ฟิลด์ฟังก์ชั่นในเมสเสจตอบสนองจะใช้หมายเลขฟังก์ชั่นเดียวกันกับเฟรมร้องขอให้ดำเนินการ มิฉะนั้นฟิลด์ฟังก์ชั่นจะตอบกลับโดยหมายเลขฟังก์ชั่นที่ถูกดัดแปลงโดยการเซตให้บิตตำแหน่ง MSB (Most Significant Bit) มีค่าเท่ากับหนึ่งซึ่งเป็นตัวบ่งบอกว่ามีข้อผิดพลาดเกิดขึ้น 

.

ฟิลด์ที่สามในเมสเสจคือ ฟิลด์ข้อมูลที่ความยาวของฟิลด์สามารถเปลี่ยนแปลงได้ตามฟังก์ชั่นที่ใช้ในฟิลด์ฟังก์ชั่น ในเฟรมร้องขอจากมาสเตอร์ ฟิลด์นี้อาจจะบรรจุชื่อข้อมูลที่มาสเตอร์ร้องขอ ส่วนในเฟรมตอบกลับของสแลฟจะบรรจุข้อมูลที่มาสเตอร์ต้องการหรือตอบกลับในรูปแบบยืนยัน

.

สองไบต์สุดท้ายของเฟรมจะประกอบกันเป็นฟิลด์ตรวจสอบข้อผิดพลาดค่าที่เป็นตัวเลขถูกคำนวณโดยใช้วิธีการ CRC-16 หรือ LRC การตรวจสอบข้อผิดพลาดนั้นจะทำให้แน่ใจว่าอุปกรณ์จะไม่ตอบสนองคำขอที่มีความผิดพลาด

.

ตารางที่ 2 แสดงช่วงแอดเดรสของไอเทมข้อมูลและออฟเซตขอสี่ชนิดข้อมูลและฟังก์ชั่นที่ถูกใช้ในแต่ละชนิดของข้อมูล ตาราง 2 ยังให้ข้อมูลในการอ้างอิงถึงชนิดของข้อมูลของ Modbus

.
ตารางที่ 2 Modbus Address และ Function Code

.

โดยทั่วไปค่าแอดเดรสข้อมูลที่ใช้ในเมสเสจจะเป็นค่าออฟเซตหรือรีเลตีฟ แต่ก็ไม่แน่เสมอไปให้ตรวจสอบคู่มือการใช้งานของอุปกรณ์นั้น ๆ เป็นสำคัญ

.
3. หมายเลขฟังก์ชั่น (Function Codes) 

แต่ละเฟรมร้องขอจะบรรจุหมายเลขฟังก์ชั่นที่นิยามลักษณะการทำงานที่ถูกต้องการให้สแลฟดำเนินการ ความหมายของฟิลด์ข้อมูลขึ้นอยู่กับหมายเลขหรือชนิดฟังก์ชั่นที่ใช้ การร้องขอในบางครั้งอาจเรียกอีกอย่างว่า คิวรี (Query) ซึ่งเป็นศัพท์ทางเทคนิคที่ใช้กันมากในระบบฐานข้อมูล

.

รูปที่ 22 รูปแบบการสื่อสารแบบคิวรี

.

3.1 Read Coil หรือ Digital Output Status (Function Code 01) 

หมายเลขฟังก์ชั่นนี้อนุญาตให้มาสเตอร์สามารถดึงสถานะ ON/OFF ของคอยล์ในตัวสแลฟซึ่งปกติแล้วจะใช้บอกสถานะการคอนโทรลของสแลฟว่าควบคุมอะไรอย่างไรในขณะนั้น ฟิลด์ข้อมูลของเฟรมร้องขอจะมีความสัมพันธ์กับหมายเลขแอดเดรสของคอยล์ตัวแรกตามด้วยจำนวนของคอยล์ที่ถูกต้องการ ฟิลด์ข้อมูลของเฟรมตอบสนองจะประกอบจำนวนคอยล์นับเป็นจำนวนไบต์ซึ่งอาจจะมีหลายไบต์ แต่ละไบต์จะแสดงค่าคอยล์ได้จำนวนแปดคอยล์ นั้นหมายความว่าคอยล์จะถูกจัดทีละ 8 คอยล์ให้เป็นหน่วยไบต์  

.

โดยมีหมายเลขแอดเดรสที่เรียงต่อเนื่องกันตามลำดับบิต  (1=ON, 0=OFF) บิตตำแหน่ง LSB (Least Significant Bit) จะแสดงถึงคอยล์ตัวแรกตามคำร้องขอ และถ้าจำนวนของคอยล์ที่ร้องขอไม่เป็นจำนวนเท่าของเลขแปด ข้อมูลในไบต์สุดท้ายที่เหลือจะถูกเติมด้วยค่าศูนย์จนเต็ม จำไว้ว่า ถ้ามีการร้องขอจำนวนคอยล์หลายไบต์ โลว์ออเดอร์บิต (Low Order Bit) ของไบต์แรกในเฟรมตอบสนองจะเป็นของคอยล์หมายเลขแอดเดรสแรกที่ร้องขอ

.

ในรูปที่ 23 มาสเตอร์ได้ร้องของสถานะของคอยล์แอดเดรสที่ 20-56 จากสแลฟหมายเลข 17 สแลฟได้ตอบกลับดังเมสเสจตอบกลับข้างล่าง พิจารณาที่สถานะคอยล์ 27-20 โดยอยู่ในรูปเลขฐานสิบหก CD หรือฐานสอง 1100 1101 คอยล์ 27 จะอยู่ที่ตำแหน่ง MSB ส่วนคอยล์ 20 อยู่ที่ตำแหน่ง LSB ของไบต์ ดังนั้นจากซ้ายไปขวา คอยล์ 27 ถึงคอยล์ 20 จะมีค่า ON–ON–OFF–OFF–ON–ON–OFF–ON

.

รูปที่ 23 Read Coil Status

.
3.2 Read Digital Input Status (Function Code 02)  

ฟังก์ชั่นนี้ทำให้มาสเตอร์สามารถอ่านค่าอินพุตแบบดิสครีต (Discrete Input) หรือดิจิตอลอินพุตในอุปกรณ์สแลฟ ฟิลด์ข้อมูลของเฟรมร้องขอจะประกอบด้วยหมายเลขแอดเดรสของอินพุตแรกตามด้วยจำนวนดิจิตอลอินพุตที่ต้องการอ่าน  ฟิลด์ข้อมูลของเฟรมตอบสนองจะประกอบจำนวนข้อมูลนับเป็นหน่วยไบต์เช่นกัน ซึ่งอาจจะมีจำนวนหลายไบต์ ข้อมูลที่ได้หน่วยย่อยจะเป็นบิตโดยการอ้างอิงค่าของดิจิตอลอินพุตที่ต้องการอ่านตามตำแหน่ง

.

ข้อมูลดิสครีตอินพุตจะถูกจัดในรูปแบบหนึ่งบิตเรียงกันไป (1-ON, 0=OFF) บิตตำแหน่ง LSB จะเป็นค่าแรกของดิสครีตอินพุตในไบต์แรก ถ้าจำนวนของดิสครีตอินพุตไม่ลงตัวเป็นหน่วยไบต์ บิตที่เหลือจะถูกเติมด้วยบิตศูนย์ให้เต็มไบต์สุดท้าย

.

ในรูปที่ 24 มาสเตอร์ได้ทำการร้องขอค่าดิสครีตอินพุตจาก 10197 ถึง 10218 จากสแลฟหมายเลข 17 สแลฟได้ตอบกลับดังเมสเสจตอบกลับดังรูปข้างล่าง พิจารณาที่สถานะอินพุต 10204–10197 โดยอยู่ในรูปเลขฐานสิบหก AC หรือฐานสอง 1010 1100 อินพุต 10204 จะอยู่ที่ตำแหน่ง MSB ส่วนอินพุต 10197 อยู่ที่ตำแหน่ง LSB ของไบต์ ดังนั้นจากซ้ายไปขวา อินพุต 10204 ถึงอินพุต 10197 จะมีค่า ON–OFF–ON–OFF–ON–ON–OFF–OFF

.

รูปที่ 24 Read Input Status

.
3.3 Read Holding Register (Function Code 03) 

ฟังก์ชั่นนี้ทำให้มาสเตอร์สามารถดึงค่าในรีจิสเตอร์ของสแลฟได้ โดยทั่วไปคือค่าเซตติ้งหรือพารามิเตอร์ของอุปกรณ์นั้น ๆ ฟิลด์ดาต้าของเฟรมร้องขอจะประกอบด้วยที่อยู่แอดเดรสที่อ้างอิงถึงตำแหน่งรีจิสเตอร์ตัวแรกตามด้วยจำนวนรีจิสเตอร์ที่ต้องการอ่าน ฟิลด์ดาต้าของเฟรมตอบสนองจะประกอบด้วย จำนวนไบต์ของข้อมูลของรีจิสเตอร์ที่ถูกอ่านตามด้วยค่าที่อ่านได้เป็นจำนวนหลาย ๆ ไบต์

.

เนื้อหาข้อมูลของแต่ละรีจิสเตอร์ที่ร้องขอ (ขนาด 16 บิต) จะถูกตอบกลับในรูปของสองไบต์ติดต่อกัน (โดยไบต์บนจะถูกส่งก่อน)  ในรูปที่ 25 มาสเตอร์ร้องขอค่าโฮลดิ้งรีจิสเตอร์ที่ 40108–40110 จากสแลฟหมายเลขที่ 17 สแลฟตอบกลับโดยรีจิสเตอร์ 40108 มีขนาดสองไบต์ 0x02 และ 0x2B หรือ 555  ส่วนรีจิสเตอร์ 40109-40110 มีค่าเท่ากับ 0 และ 100 ตามลำดับ 

.

รูปที่ 25 Read Holding Register

.
3.4 Reading Input Register (Function Code 4)

ฟังก์ชั่นนี้อนุญาตให้มาสเตอร์ สามารถอ่านค่าอินพุตรีจิสเตอร์จากหลาย ๆ รีจิสเตอร์ในอุปกรณ์สแลฟ โดยทั่วไปอินพุตรีจิสเตอร์จะมีไว้เก็บค่าวัดอะนาลอก

.

ฟิลด์ข้อมูลของเฟรมร้องขอจะประกอบด้วยแอดเดรสของอินพุตรีจิสเตอร์ตัวแรกตามด้วยจำนวนรีจิสเตอร์ที่ต้องการอ่าน ฟิลด์ข้อมูลของเฟรมตอบสนองจะประกอบด้วยจำนวนไบต์ของข้อมูลรีจิสเตอร์ที่ถูกอ่านประกอบด้วยกันหลาย ๆ ไบต์ที่เป็นค่าภายในรีจิสเตอร์ ข้อมูลในแต่ละรีจิสเตอร์จะถูกส่งในรูปแบบสองไบต์ติดต่อกัน (ไบต์บนจะถูกส่งก่อน) ช่วงค่าตำแหน่งของรีจิสเตอร์ที่เป็นไปได้จะอยู่ระหว่าง 0-4095

.

ในรูปที่ 26 มาสเตอร์ได้ร้องขอข้อมูลอินพุตรีจิสเตอร์หมายเลข 30009 จากสแลฟหมายเลข 17 หลังจากนั้นอุปกรณ์สเลฟจะตอบสนองโดยแจ้งค่าภายในรีจิสเตอร์เท่ากับ 10 

.

รูปที่ 26 Read Input Register

.
3.5 Force Single Coil (Function Code 5) 

ฟังก์ชั่นนี้อนุญาตให้มาสเตอร์สามารถทำการเปลี่ยนสถานะของคอยล์ภายในตัวอุปกรณ์สแลฟฟิลด์ดาต้าของเฟรมร้องขอจะประกอบด้วยแอดเดรสของคอยล์และสถานะที่ต้องการจะเปลี่ยนสำหรับคอยล์นั้น ๆ ค่าฐานสิบหก 0xFF00 นั้นจะทำการแอกตีฟหรือจ่ายไฟให้คอยล์ ในขณะที่ค่า 0x0000 จะทำการดีแอกตีฟหรือยกเลิกจ่ายไฟคอยล์ ส่วนค่าอื่น ๆ นอกจากที่กล่าวจะไม่มีความหมายใด ๆ

.

ถ้าตัวอุปกรณ์สแลฟสามารถกระทำการบนคอยล์ที่ถูกร้องขอได้ มันจะตอบกลับด้วยเฟรมที่เหมือนเฟรมร้องขอจากมาสเตอร์ทุกประการ มิฉะนั้นมันจะส่งเฟรมที่บ่งบอกข้อผิดพลาดไปแทน ตัวอย่างคอยล์แอดเดรส 173 ของสแลฟหมายเลข 17 ถูกแอกตีฟ ถ้าคำสั่งทำสำเร็จสแลฟจะตอบกลับเหมือนเดิมทุกประการ ดังรูปที่ 27  

.

รูปที่ 27 การบังคับคอยล์

.
3.6 Preset Single Register (Function Code 06)

ฟังก์ชั่นนี้ทำให้มาสเตอร์สามารถเปลี่ยนแปลงข้อมูลภายในของโฮลดิ้งรีจิสเตอร์ในตัวอุปกรณ์สแลฟ ฟิลด์ดาต้าของเฟรมร้องขอจะประกอบด้วยแอดเดรสของโฮลดิ้งรีจิสเตอร์ตามด้วยค่าใหม่ที่ต้องการเขียนลงบนตัวรีจิสเตอร์นั้น (เขียนไบต์บนก่อน) 

.

ถ้าสแลฟสามารถเขียนค่าใหม่ลงบนรีจิสเตอร์ที่ต้องการได้ เฟรมตอบกลับจะเหมือนกับเฟรมร้องขอทุกประการ มิฉะนั้นการตอบสนองจะส่งเฟรมที่มีตัวบ่งบอกความผิดพลาดกลับมา

.

รูปที่ 28 แสดงการพยายามเปลี่ยนแปลงค่าในโฮลดิ้งรีจิสเตอร์หมายเลข 40002 เป็น 3 (0x0003) ของสแลฟหมายเลข 17 ถ้าทุกอย่างเรียบร้อยเฟรมตอบสนองจะเหมือนกับเฟรมร้องขอทุกประการ

.

เมื่อสแลฟแอดเดรสที่ถูกระบุเป็น 00 จะหมายถึงการส่งคำสั่งแบบบรอดคาสต์ ดังนั้นทุกสแลฟจะโหลดค่ารีจิสเตอร์ด้วยค่าที่กำหนดพร้อมกันและไม่ทำการตอบกลับ

.

รูปที่ 28 การบังคับคอยล์

.
3.7 Read Exception Status (Function Code 7) 

เฟรมขนาดสั้น ๆ ที่ร้องขอสถานะภายในอุปกรณ์สแลฟจำนวนแปดค่า สถานะจำนวนแปดสถานะนั้นได้ถูกกำหนดความหมายเป็นที่เรียบร้อยโดยมาตรฐาน ในกรณีพิเศษผู้ใช้หรือผู้ผลิตสามารถกำหนดความหมายของสถานะได้ สำหรับตัวอย่างนี้ควรเป็นสถานะระบบ เช่น สถานะของแบตเตอรี่ หรือแม้กระทั่งหน่วยความจำถูกป้องกันหรือไม่ หรือสถานะของระบบออนไลน์หรือไม่ ดังรูปที่ 29

.

รูปที่ 29 การอ่าน Exception Status

.

3.9 Force Multiple Coil หรือ Digital Output (Function Code 16) 

ฟังก์ชั่นนี้จะบังคับกลุ่มของคอยล์ที่เรียงติดกันไปตามสถานะ ON หรือ OFF ตามที่มาสเตอร์ต้องการ ดังตัวอย่างต่อไปนี้มีการบังคับตั้งค่า 10 คอยล์ เริ่มที่คอยล์ 20 แอดเดรส 19 หรือ 0x13 (ที่สแลฟ 17) ให้มีสถานะ ดังค่า 0xCD01 โดยตำแหน่งบิตที่ไม่ใช้จะถูกเติมด้วยค่าศูนย์ ส่วนเมสเสจที่ตอบกลับนั้นจะตอบกลับคล้ายกับเมสเสจร้องขอแต่ไม่มีส่วนของจำนวนไบต์ของข้อมูลตำแหน่งบิต ดังรูปที่ 30

.
ตำแหน่งบิต:    1    1  0   0    1   1   0   1  0  0  0  0 0 0 0 1
คอยล์     :     27 26 25 24 23 22 21 20 – – – – – – 29 28
.

ถ้าหมายเลขสแลฟเท่ากับศูนย์ระบุในเฟรมร้องขอโหมดบรอดคาสต์จะทำงานส่งผลให้สแลฟทุกตัวเปลี่ยนสถานะของชุดคอยล์ตามที่กำหนด 

รูปที่ 30 การบังคับหลายคอยล์

.
3.10 Force Multiple Register (Function Code 10) 

ฟังก์ชั่นนี้มีความคล้ายคลึงกับคำสั่งพรีเซตค่าบนรีจิสเตอร์ตัวเดียวและการบังคับหรือเปลี่ยนสถานะของคอยล์จำนวนหลายคอยล์ ในรูปที่ 31 อุปกรณ์สเลฟแอดเดรส 17 มี 2 รีจิสเตอร์เริ่มที่หมายเลข 40002 โดยตำแหน่งแรกที่แอดเดรส 01 โดยจะเปลี่ยนค่าภายในรีจิสเตอร์ให้เป็นค่า 0x000A และ 0x0102 ตามลำดับ ส่วนเมสเสจที่ตอบกลับนั้นจะตอบกลับคล้ายกับเมสเสจร้องขอแต่ไม่มีส่วนของจำนวนไบต์และข้อมูลที่จะเปลี่ยน

.

รูปที่ 31 การเขียนค่าหลายรีจิสเตอร์

.

4. การรายงานข้อผิดพลาด

เมื่อมีการส่งเมสเสจร้องขอไปยังสแลฟแล้ว สแลฟไม่สามารถปฏิบัติได้ สแลฟอ่านจะส่งเมสเสจแจ้งความผิดพลาดกลับมาโดยการเซตบิต MSB ของรหัสฟังก์ชั่นที่ได้รับให้เป็นหนึ่งและตามด้วยรหัสผิดพลาดจำนวน 1 ไบต์

.
ตารางที่ 3 รายการรหัสผิดพลาดที่สำคัญ

.

ตัวอย่างของการร้องขอที่ไม่ถูกต้องและการตอบกลับแจ้งข้อผิดพลาดจะถูกแสดงในรูปที่ 32 ตัวอย่างการร้องขอคือการอ่านสถานะของคอยล์ของตำแหน่ง 514 ถึง 521 ตำแหน่งเหล่านี้ไม่ถูกสนับสนุนใน PLC ดังนั้นจะมีการรายงานข้อผิดพลาดซึ่งจะตอบโดยใช้รหัส 2 (แอดเดรสไม่ถูกต้อง) 

.

รูปที่ 32 การร้องขอที่ผิดพลาด

.

4.1 ปัญหาและข้อผิดพลาดที่มักจะเกิด

ไม่ว่าจะเอาใจใส่ในขั้นตอนการติดตั้งอย่างไร ก็ไม่สามารถจะทำให้ได้ระบบที่ไม่มีข้อบกพร่องหรือปราศจากปัญหาเลย ปัญหาที่มักจะเกิดขึ้นมักจะมาจากการใช้อุปกรณ์หลายยี่ห้อหรือหลายตระกูลซึ่งสามารถแบ่งเป็นสองกลุ่มปัญหาหลัก ๆ ดังต่อไปนี้

.

1. เกี่ยวกับฮาร์ดแวร์ ซึ่งมักจะเกิดกับการทำไวร์ริ่งที่ผิดพลาดและการเสียหายในจุดเชื่อมต่อต่าง ๆ
2. เกี่ยวกับซอฟท์แวร์ ซึ่งมักจะเกิดขึ้นเมื่อมาสเตอร์พยายามดึงข้อมูลจากอุปกรณ์สแลฟที่ไม่มีหรือใช้หมายเลขฟังก์ชั่นที่ไม่ถูกต้อง หรือใช้ฟอร์แมตของเฟรมที่ไม่เป็นมาตรฐานที่อุปกรณ์สแลฟไม่สามารถเข้าใจได้

.
4.2 การใช้เครื่องมือทดสอบ

เพื่อที่จะแก้ไขปัญหา สิ่งที่ต้องการลำดับต้น ๆ ก็คือเครื่องมือทดสอบไม่ว่าจะเป็นแบบฮาร์ดแวร์ หรือซอฟท์แวร์ เพื่อที่พยายามจำกัดขอบเขตของปัญหา สิ่งที่มักจะสำคัญที่สุดในการแก้ไขก็คือคู่มือการใช้งานและติดตั้งอุปกรณ์นั้น ๆ นั้นเอง

.

เครื่องมือทดสอบประเภทฮาร์ดแวร์ที่มักจะเกี่ยวข้องนั้นคือ ตัวเบรกเอาต์ประเภท RS-232, ตัวคอนเวอร์เตอร์ประเภท RS-232 แปลงไปยัง RS-485, เครื่องมือทดสอบความต่อเนื่องของสายสัญญาณ, โวลต์มิเตอร์, ไขควง, คีมหนีบจับ, เครื่องมือเข้าหัวสาย, สายสัญญาณสำรอง เหล่านี้มักจะถูกใช้เพื่อทำให้แน่ใจว่าการลากสาย การเข้าหัวสายถูกต้อง และเป็นไปตามมาตรฐานและตามข้อแนะนำของคู่มือการใช้อุปกรณ์นั้น ๆ

.

สำหรับการตรวจสอบซอฟต์แวร์นั้น สิ่งที่ต้องการนั้นคือโปรโตคอลอะนาไลเซอร์ที่อยู่ในโหมดดักจับสัญญาณระหว่างอุปกรณ์มาสเตอร์และสแลฟ โปรโตคอลอะนาไลเซอร์อาจจะเป็นอุปกรณ์ฮาร์ดแวร์เฉพาะที่มักจะมีราคาแพงหรือเป็นซอฟต์แวร์ที่ติดตั้งบนคอมพิวเตอร์ทั่วไปก็ได้ดังรูปที่ 33

.

เป็นที่ทราบกันว่า โปรโตคอลอะนาไลเซอร์แบบซอฟต์แวร์จะประหยัดกว่าแต่อย่างไรก็ตามก็ยังต้องการฮาร์ดแวร์พิเศษคอยช่วยในการเชื่อมต่อเช่นกัน และก็ไม่สามารถแสดงผลแบบเวลาจริง ถ้ามีการทำทรานแซกชั่นด้วยความเร็วสูง

.

รูปที่ 33 โปรโตคอลอนาไลเซอร์

.
4.3 รายละเอียดการแก้ไขปัญหา
4.3.1 การไวร์ริ่งสัญญาณผิดพลาด
•  การไวร์ริ่ง RS-232 แบบสายสามเส้นสำหรับการสื่อสารแบบจุดต่อจุด

มีการไวร์ริ่งหลายประเภท เช่น แบบจุดต่อจุด, มัลติดรอปแบบสายสองเส้น, มัลติดรอปแบบสายสี่เส้น เป็นต้น สำหรับรูปแบบการสื่อสารแบบพอยต์ทูพอยต์หรือจุดต่อจุด โดยปกติที่มาตรฐานระดับฟิสิคอลจะใช้มาตรฐาน RS-232 โดยใช้ D คอนเน็กเตอร์แบบ 25 พินโดยที่จำนวนสายต่ำสุดที่ใช้แล้วทำงานได้คือ จำนวนสามเส้น    

.

คอนเน็กเตอร์ที่อยู่ฝั่งมาสเตอร์จะใช้ขาทรานสมิต (TxD-พิน 2), รีซีฟ (RxD-พิน 3) และขากราวด์ (คอมมอน-พิน 7) และส่วนฝั่งสแลฟจะใช้ขารีซีฟ (RxD-พิน 2), ทรานสมิต (TxD- พิน 3) และขาสัญญาณกราวด์ (คอมมอน-พิน 7)

.

สำหรับขาพินอื่น ๆ นั้นโดยหลัก ๆ แล้วจะถูกใช้ในการทำแฮนด์แช็คกิ้งระหว่างอุปกรณ์ 2 ตัว เพื่อควบคุมการไหลของข้อมูล ในปัจจุบันพินเหล่านี้ไม่ค่อยถูกนำมาใช้ในการควบคุมการไหลของข้อมูล โดยหันไปใช้การควบคุมการไหลแบบซอฟต์แวร์หรือโปรโตคอลมากกว่า

.

สืบเนื่องจากการพัฒนาของเทคโนโลยี VLSI ดังนั้นลายวงจรบนแผ่น PCB (Print Circuit Board) โดยเฉพาะฟุตปริ๊นต์ที่ถูกออกแบบนั้นจะมีขนาดเล็กลง ดังนั้นมาตรฐานทางฟิสิคอลจึงได้เปลี่ยนแปลงไปใช้ D คอนเน็กเตอร์แบบ 9 พินซึ่งมีขนาดเล็กกว่าแบบ 25 พิน โดยขาพินได้ถูกกำหนดตามมาตรฐานของ IBM ซึ่งที่ฝั่งมาสเตอร์ (DTE): ขาทรานสมิต (TxD:พิน 3) ขารีซีฟ (TxD:พิน 2) และขาสัญญาณกราวด์ (คอมมอน:พิน 5) และที่ฝั่ง DCE (สแลฟ) ขารีซีฟ  (RxD:พิน 3), ทรานสมิต (TxD: พิน 2) และขาพินสัญญาณกราวด์ (คอมมอน: พิน 5)   

.

ยิ่งกว่านั้นปัจจุบันยังมาใช้คอนเน็กเตอร์แบบ RJ-45 ที่มีการกำหนดขาพินเหมือน DB-9 ดังนั้นการเชื่อมสายไวร์ริ่งระหว่าง 2 อุปกรณ์ดังกล่าวจะต้องต่อเป็นสายตรงแบบพินต่อพินไม่จำเป็นต้องไขว้ ในลักษณะเช่นนี้ ขาทรานสมิตของมาสเตอร์จะต่อตรงเข้ากับขารีซีฟของสแลฟ สายสัญญาณแบบตรงสามารถจัดหาได้โดยง่ายในหลาย ๆ ระยะสายที่ต้องการ 

.

อุปกรณ์มาสเตอร์โดยปกติทั่วไปก็คือเครื่องคอมพิวเตอร์ทั่วไปหรือเครื่องเซิร์ฟเวอร์พร้อมติดตั้งโปรแกรมประยุกต์ที่มีการสื่อสารแบบ Modbus ดังนั้นโดยปกติแล้วคอมพิวเตอร์จึงจำเป็นต้องมีพอร์ต RS-232 หรือตัวคอนเวอร์เตอร์ สำหรับอุปกรณ์สแลฟแล้วโดยปกติผู้ใช้สามารถเลือกชนิดพอร์ตสื่อสารได้ไม่ว่าเป็น RS-232 หรือ RS-458 สำหรับการติดต่อสื่อสาร  

.

แต่อย่างไรก็ตามก็มีบางผู้ผลิตยังพยายามทำให้ผู้ใช้กลับมาใช้ผลิตภัณฑ์ของเขาโดยการดัดแปลงมาตรฐานเพื่อประโยชน์ของบริษัท แต่ก็ไม่ยากเกินไปในการดัดแปลงให้เข้ากับมาตรฐานสากล

.

รูปที่ 34 แสดงขาพิน RJ-45 และ DB-9 สำหรับ RS-232

.

ตัวอย่างปัญหาเกี่ยวกับชนิดสายสัญญาณ ในกรณีที่ 1 ผู้ผลิตได้ทำการดัดแปลงมาตรฐานของพินของ RS-232 ตามมาตรฐานของผู้ผลิต เหตุการณ์กรณีนี้จำเป็นต้องมีคู่มือของอุปกรณ์นั้น ๆ เพื่อที่ผู้ใช้สามารถแก้ไขปัญหาได้เอง

.

ด้วยความสามารถของเครื่องมือทดสอบความต่อเนื่องของสายสัญญาณ เช่น มิเตอร์ และการใช้ตัวเบรกเอาต์แบบ RS-232 ผู้ใช้ก็สามารถวิเคราะห์หาขาพินบนสายสัญญาณและสร้างสายสัญญาณสำรองโดยไม่ต้องพึ่งพาบริษัทผู้ผลิต

.

ในกรณีที่ 2 ผู้ผลิตได้ฝังตัวคอนเวอร์เตอร์ RS-232 เป็น RS-485 ลงในตัวสายสัญญาณและนี้จะทำให้ใช้สายมาตรฐานของ RS-232 ไม่ได้ ด้วยความช่วยเหลือของมัลติมิเตอร์ คุณสามารถประเมินแรงดันไฟฟ้าระหว่างการทำงาน และสามารถถอดลอกแบบมาตรฐานของผู้ผลิตที่ใช้ได้
ในทางปฏิบัติ RS-485 แบบมัลติดรอปมักจะถูกนำมาใช้เช่นกัน

.

การติดตั้งอาจใช้จำนวนสายแบบสองเส้นหรือสี่เส้นก็ได้ ในกรณีที่มีมาสเตอร์เพียงตัวเดียวจะใช้แบบสองเส้นหรือสี่เส้นก็ได้ ส่วนในกรณีมีมาสเตอร์หลายตัวจะสามารถใช้แบบสองเส้นเท่านั้น

.

รูปที่ 35 การเชื่อมต่อโดยสายสัญญาณที่ไม่มาตรฐาน

.

•  การไวร์ริ่ง RS -485/ RS-422 แบบสี่เส้นสำหรับมัลติดรอป

การเชื่อมต่อแบบสี่เส้นอันที่จริงแล้วก็คือมาตรฐาน RS-422 ที่มีหนึ่งไดรฟ์เวอร์เท่านั้นที่เชื่อมต่อกับรีซีฟเวอร์หลาย ๆ ตัว หรือมีตัวไดรฟ์เวอร์หลาย ๆ ตัวเชื่อมต่อเข้ากับรีซีฟเวอร์เพียงตัวเดียว เมื่อใช้การสื่อสารแบบ RS-422 แบบสี่เส้น รูปแบบการเชื่อมต่อแบบมัลติดรอปและรีพีตเตอร์สามารถนำมาประยุกต์ใช้ได้ 

.

ในกรณีที่มีหนึ่งไดรฟ์เวอร์ซึ่งเป็นของมาสเตอร์และที่เหลือเป็นรีซีฟเวอร์ของอุปกรณ์สแลฟหลาย ๆ ตัว สแลฟจะรับคำสั่งจากการเชื่อมต่อจากตัวไดรฟ์เวอร์ของมาสเตอร์ ส่วนการตอบสนองจะผ่านไลน์ไดรฟ์เวอร์ของสแลฟที่ทุกตัวถูกเชื่อมต่อเจ้าด้วยกันและส่งสัญญาณไปยังตัวรีซีฟเวอร์ของมาสเตอร์ดังรูปที่ 36

.

รูปที่ 36 การไวร์ริ่ง RS-485/ RS-422 แบบสี่เส้น

.

รูปที่ 37 แสดงขาพิน RJ-45 และ DB-9 สำหรับ RS-485/ RS-422 แบบสี่เส้น

.
•  การไวร์ริ่ง RS-485 แบบสองเส้นสำหรับแบบมัลติดรอป

การเชื่อมต่อแบบสองเส้นที่จริงแล้วคือมาตรฐาน RS-485 ที่ทั้งตัวไดรฟ์เวอร์และรีซีฟเวอร์ถูกเชื่อมต่อกับสายสัญญาณคู่เดียวกัน เมื่อมีการใช้ RS-485 แบบสองเส้น ข้อความจะถูกส่งและรับบนสายสัญญาณคู่เดียวกัน (ดังรูปที่ 38) ความระมัดระวังที่ต้องใส่ใจก็คือการทำการแอกตีฟไดรฟ์เวอร์เมื่อต้องการส่งข้อมูลและอินแอกตีฟไดรฟ์เวอร์เมื่อต้องการรับข้อมูลเพื่อไม่ให้เกิดการชนของสัญญาณ เหล่านี้สามารถควบคุมได้โดยใช้ซอฟต์แวร์หรือฮาร์ดแวร์ 

.

โดยปกติจำนวนโหนดสูงสุดในทางกายภาพของ RS-485 ในหนึ่งเครือข่ายอยู่ที่ 32 โหนด ถ้ามีจำนวนโหนดมากกว่าที่กำหนด ตัวรีพีตเตอร์จะต้องถูกนำมาใช้

.

ระบบนี้จะทำงานคล้ายคลึงกับระบบสี่เส้นยกเว้นว่าตัวมาสเตอร์ส่งค่าสั่งร้องขอไปยังสแลฟและสแลฟจะตอบสนองไปยังมาสเตอร์บนคู่สายสัญญาณเดียวกัน จำไว้ว่าระบบกราวด์ชีลด์ควรถูกเชื่อมต่อไปยังกราวด์ระบบโดยใช้จุดต่อเพียงจุดเดียวซึ่งจะป้องกันการเกิดกราวด์ลูปที่เป็นสาเหตุให้เกิดการทำงานผิดพลาดได้

.

รูปที่ 38 การไวร์ริ่ง RS-485 แบบสองเส้น

.

รูปที่ 39 แสดงขาพิน RJ-45 และ DB-9 สำหรับ RS-485 แบบสองเส้น

.
•  กราวดิ้ง

กราวดิ้งมีไว้สำหรับการทำสัญญาณลอจิกเพื่ออ้างอิงของทุก ๆ ตัวคอนโทรลเลอร์ รวมทั้งทุก ๆ อุปกรณ์สื่อสารบนระบบเครือข่ายเดียวกันที่จะต้องอ้างอิงระบบกราวด์เดียวกัน ถ้ามีระบบจ่ายไฟฟ้าเพียงระบบเดียวทุกทุกอุปกรณ์จะอ้างอิงระบบกราวด์เดียวกันโดยอัตโนมัติ แต่เมื่อไหร่มีระบบจ่ายไฟฟ้าหลายระบบมักจะมีสองทางเลือกที่มักถูกพิจารณาในระบบกราวด์

.

• เชื่อมต่อเอาต์พุตของระบบจ่ายไฟเข้ากับระบบดินระบบจ่ายไฟ ถ้าระบบกราวด์ดีเพียงพอ ทุกคอนโทรลเลอร์จะอ้างอิงกราวด์เดียวกัน ในบางอาคารที่เก่า ระบบกราวด์อาจจะไม่คงที่เปลี่ยนแปลงตามสภาพแรงดันไฟฟ้าในกรณีนี้ทางเลือกที่สองควรนำมาพิจารณา

.

• นำตำแหน่ง GND ของแต่ละคอนโทรลเลอร์ ต่อเข้าด้วยกันเพื่อให้มีศักย์ไฟฟ้าเท่ากัน
• บริเวณที่ที่ไม่สามารถที่ทำให้ทุกคอนโทรลเลอร์อ้างอิงกราวด์เดียวกัน การใช้ตัว RS-485 รีพีตเตอร์คั้นระหว่างคอนโทรลเลอร์ที่ศักย์กราวด์แตกต่างกันจึงเป็นทางเลือกหนึ่ง ตัวรีพีตเตอร์คือวิธีที่ดีเยี่ยมในการทำความสะอาดสัญญาณและเพิ่มระยะทางในพื้นที่มีสัญญาณรบกวนสูง

.
4.3.2 การขัดข้องในการเชื่อมต่อ
• RS-232 ไดรฟ์เวอร์ชำรุด

ไดรฟ์เวอร์ RS-232 อาจถูกทดสอบด้วยใช้โวลต์มิเตอร์แบบอิมพีแดนซ์สูง ปรับมิเตอร์ให้อยู่ในช่วงวัดค่าแรงดันไฟฟ้ากระแสตรง จิ้มโพรบสีแดงบนขาทรานสมิต (TxD) และจิ้มโพรบสีดำบนสัญญาณกราวด์ (คอมมอน) ในขณะที่โหนดไม่ส่งสัญญาณใดใด (ไฟ TX ไม่ติด) มันควรมีแรงดันไฟฟ้าอยู่ระหว่าง -5 และ -25 Vdc ระหว่างพิน ค่านี้สามารถเรียกว่าสถานะว่างหรือสถานะไอเดิลของตัว RS-232 ไดรฟ์เวอร์

.

เมื่อโหนดกำลังส่งสัญญาณ แรงดันไฟฟ้าจะเคลื่อนไหวระหว่าง ±5 และ ±25 Vdc มันอาจจะยากที่จะสังเกตความบกพร่องที่บอดเรตสูง ๆ ดังนั้นออสซิลโลสโคปอาจจะถูกใช้ในการวิเคราะห์ปัญหาขั้นสูงที่ความเร็วการส่งสูง ถ้าแรงดันไฟฟ้าคงที่ที่ตำแหน่งใด ๆ ระหว่าง -25 และ +25 Vdc และไม่เคลื่อนไหวเปลี่ยนแปลงในขณะที่หลอด TX กระพริบ แล้วตัวทรานสมิตเตอร์อาจจะชำรุด 

.
• RS-232 รีซีฟเวอร์ชำรุด

กรณีนี้ต้องใช้ตัวลูปแบ็กแบบ RS-232 หรือ ตัว RS-232 เบรกเอาต์พร้อมด้วยจัมเปอร์ที่ถูกติดตั้งระหว่างขาส่งและขารับ หลังจากที่ทำการเชื่อมต่อพอร์ตสื่อสาร โหนดจะถูกทดสอบ โหนดจะถูกทำให้ส่งข้อมูลและในขณะเดียวกันนั้นหลอด TxD ของโหนดจะต้องกระพริบ และหลอด RxD จะต้องกระพริบเช่นเดียวกัน ถ้าเป็นไปตามที่คาดการณ์ สามารถสรุปได้ว่าตัวรีชีฟเวอร์ของโหนดอยู่ในสภาพดี ถ้าหลอด RxD ไม่กระพริบในเวลาเดียวกันกับหลอด TxD กระพริบ แล้ว RS -232 รีชีฟเวอร์อาจจะชำรุดได้

.

วิธีการอื่น ๆ สองโหนดอาจถูกเชื่อมต่อเข้าด้วยกันด้วยสายเคเบิลที่ถูกทดสอบว่าใช้งานได้แน่นอนและถ้าไดรฟ์เวอร์ทั้งสองทำงานเป็นปกติ ถ้าหนึ่งในสองโหนดกำลังส่งสัญญาณไปให้อีกตัวหนึ่ง โหนดตัวที่สองจะแสดงว่ารับสัญญาณได้หรือไม่โดยการกระพริบหลอด RxD ตามหลอด TxD ของโหนดแรก นั้นหมายความว่าตัวรีซีฟเวอร์ของโหนดตัวที่สองน่าจะมีสภาพปกติ ในกรณีเดียวกันถ้าโหนดตัวที่สองส่งข้อมูล หลอด RxD ของโหนดที่หนึ่งจะต้องกระพริบตามหลอด TxD ตามโหนดที่หนึ่ง

.
• RS-485 ไดรฟ์เวอร์ชำรุด

ไดรฟ์เวอร์ของ RS-485 อาจจะถูกทดสอบด้วยใช้โวลต์มิเตอร์แบบค่าอิมพีแดนซ์สูง โดยการตั้งค่ามิเตอร์ให้อยู่ในตำแหน่งวัดค่าแรงดันไฟฟ้า DC จิ้มโพรบสีแดงเข้ากับเทอร์มินอล TX+ และจิ้มโพรบสีดำเข้ากับเทอร์มินอล TX- ในขณะที่โหนดไม่ได้ส่งข้อมูล (หลอด TX จะดับ) ค่าแรงดันไฟฟ้าจะอยู่ที่ประมาณ -4V ระหว่างสาย มันอาจเป็นเรื่องยากที่จะตรวจเจอข้อบกพร่องที่อัตราบอดเรตที่สูง 

.

ออสซิลโลสโคปน่าจะเป็นอุปกรณ์ทดสอบที่เหมาะสมที่สุด ระดับแรงดันไฟฟ้าที่ต่ำที่สุดที่ในวัดได้สำหรับบอดเรตระหว่าง 1200 ถึง 19200 จะประมาณ -1.6 Vdc ถ้าแรงดันไฟฟ้าอยู่คงที่ประมาณ +4 หรือ -4  หรือ 0 และไม่เคลื่อนไหวตามหลอด TX แล้วตัวทรานสมิตเตอร์บางทีอาจชำรุดได้

.
• RS-485 รีซีฟเวอร์ชำรุด

กรณีนี้ต้องการสองโหนดเชื่อมถึงกันด้วยสายสัญญาณที่ผ่านการตรวจสอบว่าใช้งานได้จริง และ RS-485 ไดรฟ์เวอร์ทำงานได้ทั้งคู่ ถ้าหนึ่งในโหนดส่งข้อมูลให้อีกโหนด โหนดตัวที่สองจะแสดงว่าได้รับข้อมูลหรือสัญญาณโดยการกระพริบหลอด RX ตามการส่งของโหนดส่ง  

.
4.3.3 ปัญหาที่เกี่ยวกับซอฟต์แวร์
สิ่งที่สำคัญในการพิจารณาคือ ไม่มีการตอบสนองต่อเมสเสจของมาสเตอร์จากสแลฟ นี้อาจหมายความว่าอาจไม่มีตัวอุปกรณ์สแลฟ หรือมีการเกิด CRC Error เนื่องจากมีสัญญาณรบกวนหรือฟอร์แมตของเมสเสจผิดพลาด  การแจ้งความผิดพลาดบางปัญหา ตัวอุปกรณ์  Modbus สามารถรายงานความผิดพลาดได้โดยผ่านวอตช์ด็อก
.
5. สรุป

โปรโตคอล Modbus เป็นโปรโตคอลที่มีความซับซ้อนไม่สูง และมีจำนวนฟังก์ชั่นการทำงานไม่มาก แต่ก็ยังเป็นนิยมใช้โดยเฉพาะในระบบงานที่ต้องการความแม่นยำสูงหรือมีความวิกฤติสูง เช่น โรงไฟฟ้า เหตุผลก็คือ Modbus ใช้เวลาในการประมวลผลต่ำ ดังนั้นไม่ว่าเทคโนโลยีจะก้าวไกลแค่ไหน Modbus ก็ยังคงอยู่ไปอีกนาน

.

ในบทความต่อไปผู้เกี่ยวจะกล่าวถึงโปรโตคอลระดับเดียวกับ Modbus แต่มีฟังก์ชั่นการทำงานมากกว่า และนิยมใช้ในระบบป้องกันทางไฟฟ้า นั้นก็คือโปรโตคอล SPA-bus โปรดติดตามครับ

.

เอกสารอ้างอิง

1. J.E Goldman and P.T Rawles, Applied Data Communications. Addison-Wesley, New York,2001
2. J. Fulcher, an Introduction to Microcomputer Systems: Architecture and Interfacing. Addison-Wesley, Sydney,1989
3. S. Mackay, E. Wright, D. Reynders and .J Park, Practical Industrial Data Network: Design, Installation and Troubleshooting. IDC Technologies, Perth,2004
4. J.R. Vacca, High-speed Cisco Networks: Planning, Design, and Implemention. CRC Press LLC, Florida,2001   
5.  MODBUS.ORG, MODBUS Over Serial Line Specification and Implementation Guide V1.0, 2002  

สงวนลิขสิทธิ์ ตามพระราชบัญญัติลิขสิทธิ์ พ.ศ. 2539 www.thailandindustry.com
Copyright (C) 2009 www.thailandindustry.com All rights reserved.

ขอสงวนสิทธิ์ ข้อมูล เนื้อหา บทความ และรูปภาพ (ในส่วนที่ทำขึ้นเอง) ทั้งหมดที่ปรากฎอยู่ในเว็บไซต์ www.thailandindustry.com ห้ามมิให้บุคคลใด คัดลอก หรือ ทำสำเนา หรือ ดัดแปลง ข้อความหรือบทความใดๆ ของเว็บไซต์ หากผู้ใดละเมิด ไม่ว่าการลอกเลียน หรือนำส่วนหนึ่งส่วนใดของบทความนี้ไปใช้ ดัดแปลง โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร จะถูกดำเนินคดี ตามที่กฏหมายบัญญัติไว้สูงสุด