บทที่ 21: การเขียนโปรแกรมติดต่อกับพอร์ต RS485

UTEN BOONLIAM Avatar
บทที่ 21 / 26

บทที่ 21: การเขียนโปรแกรมติดต่อกับพอร์ต RS485

RS485 (Recommended Standard no. 485) คือมาตรฐานการสื่อสารข้อมูลดิจิทัลแบบอนุกรม (serial communication) ซึ่งถูกกำหนดขึ้นครั้งแรกในปี ค.ศ. 1998 โดยความร่วมมือของ TIA (Telecommunications Industry Association) และ EIA (Electronic Industries Association) มาตรฐาน RS485 ถูกใช้อย่างแพร่หลายในโรงงานอุตสาหกรรม เนื่องจากสามารถส่งสัญญาณได้ไกลและยังสามารถส่งพร้อม ๆกันได้หลายจุด

สำหรับการรับ/ส่งข้อมูลดิจิตอลแบบ RS485 นั้น จะส่งข้อมูลโดยใช้สายไฟเพียงแค่ 2 เส้นคือ A และ B เป็นตัวบอกค่ารหัสดิจิตอล(Digital code) โดยใช้ความแตกต่างของแรงดันไฟฟ้าระหว่างขั้ว A และ B เป็นตัวบอกว่าเป็นสัญญาณดิจิตอลค่า 1 หรือ 0

มาตรฐาน RS485 สามารถเชื่อมต่อการรับส่งข้อมูลแบบเครือข่าย (Network) โดยมีอุปกรณ์ในเครือข่ายได้สูงสุดถึง 32 ตัว ซึ่งในเครือข่ายนั้น จะต้องมีอุปกรณ์อยู่ 1 ตัว ทำหน้าที่คอยจัดคิวการสื่อสารในเครือข่าย ซึ่งเราจะเรียกอุปกรณ์ตัวนี้ว่า “Master” และอุปกรณ์ส่วนที่เหลือเราจะเรียกว่า “Slave” โดยที่ Slave แต่ละตัวจะมีหมายเลข Address ของตัวเอง และเมื่อตัว Master ต้องการสั่งการตัว Slave ตัว Master จะส่งชุดคำสั่งพร้อมระบุหมายเลข Address ไปยังอุปกรณ์ Slave ทุกตัว เมื่ออุปกรณ์ Slave ได้รับคำสั่งและคำสั่งนั้นมีหมายเลข Address ตรงกับตัวเอง อุปกรณ์ Slave ถึงจะทำตามคำสั่งของ Master เป็นลำดับไป

RS485 สามารถส่งสัญญาณได้ไกลสูงสุดถึง 1,200 เมตร ซึ่งถือว่าเป็นระยะทางที่ไกลมาก เพียงพอต่อการใช้งานในโรงงานอุตสาหกรรมอย่างแน่นอนและจะเห็นได้ชัดว่าระยะการส่งสัญญาณได้ถูกพัฒนาขึ้นมากจนทิ้งห่างมาตรฐานรุ่นเก่าอย่าง RS232 ที่สามารถส่งสัญญาณได้เพียง 15 เมตร เท่านั้น

สำหรับบอร์ด Arduino Learning Kit มีพอร์ต RS485 อยู่บนตัวบอร์ดซึ่งสามารถนำไปศึกษาการเขียนโปรแกรมโดยใช้ Protocol Modbus ซึ่งเป็นโปรโตคอลที่ใช้เป็นมาตรฐานเครื่องมือวัดในระบบโรงงานอุตสาหกรรม โดย IC ที่ใช้บนบอร์ดคือเบอร์ SN75176 ซึ่งเป็นตัวแปลงสัญญาณระหว่าง UART <–> RS485 โดยสามารถต่อใช้งานสุงสุดถึง 32 Node

สำหรับการใช้งานพอร์ต RS485 จะต้องทำการสับ DIP Switch ตำแหน่ง 1 และ 2 (ส่วนตำแหน่ง 3 เป็นของ Buzzer)ให้อยู่ตำแหน่ง ON เสียก่อน และเมื่อใช้เสร็จก็ให้สลับให้อยู่ตำแหน่ง OFF ทั้งนี้เหตุผลเพราะขาที่ใช้ติดต่อกับ RS485 ถูกใช้ร่วมกัน LED RGB

สำหรับขาที่ใช้ในการติดต่อสื่อสารกับไอซี SN74176 ซึ่งเป็นตัวแปรงสัญญาณจาก RS485 เป็น UART ดูได้จากตารางด้านล่าง

MAX485 RO (RX) MAX485 DI (TX)
Arduino Uno 9 10
Arduino Nano 9 10
ESP32(ESP-WROM-32) 25 26

ตารางที่ 21. 1 ขาต่อใช้งาน

ขั้นตอนเขียนโปรแกรมติดต่อกับพอร์ต RS485 บนบอร์ด Arduino Learning Kit

  1. ทำการเชื่อมต่อ USB to RS485 เข้ากับบอร์ด Arduino Learning Kit กับคอมพิวเตอร์ดังรูปด้านล่าง

  1. ตรวจสอบดูว่าคอมพิวเตอร์เห็นพอร์ตของ RS485 หรือไม่ จากนั้นทำการเปิด Serial Terminal ของ RS485 ซึ่งในที่นี้เราใช้โปรแกรม putty เป็นตัว Serial Monitor ทำการกำหนดอัตราความเร็วให้กับพอร์ต RS485 เป็น 9600

  1. เปิดโปรแกรม Arduino IDE ขึ้นมา เลือกบอร์ดเป็นชนิด Arduino Uno, Nano หรือ ESP32 จากนั้นทำการ New sketch ขึ้นมา แล้วเขียนโปรแกรมตามตัวอย่างด้านล่าง

  1. เมื่อทำการเขียนโปรแกรมเสร็จเรียบร้อยแล้ว ทำการ upload โปรแกรมให้กับ Arduino จากนั้นสังเกตดูที่ Serial Terminal ของโปรแกรม Putty จะมีข้อความ “Hello World” แสดงขึ้นมาทุก ๆ 1วินาที

อธิบายการทำงานของโค้ด

  • บรรทัดที่ 1 – 2 เป็นการเรียกใช้ไลบรารี่ “SoftwareSerial” และประกาศออปเจ็คชื่อว่า rs485 ขึ้นมาใช้งาน โดยกำหนดพารามิเตอร์ให้ขา 9 เป็น RX และ ขา 10 เป็น TX

  • บรรทัดที่ 5 ในฟังก์ชัน setup เป็นการกำหนดอัตราความเร็วให้กับพอร์ต RS485

  • บรรทัดที่ 8 – 11 ในฟังก์ชัน loop กำหนดให้เขียนข้อมูลไปยังพอร์ต RS485 ด้วยข้อความ “Hello World” จากนั้นหน่วงเวลาไป 1 วินาที แล้วทำซ้ำคำสั่งเดิม

    1. ทำการดัดแปลงโค้ดข้างต้นตามตัวอย่างด้านล่าง โดยให้ Arduino อ่านค่าจากพอร์ต RS485

  1. ทดลองพิมพ์ข้อความใด ๆ ลงบนหน้าต่างของโปรแกรม Putty จากนั้นทำการสังเกตุการเปลี่ยนแปลงของหน้าต่าง Serial Monitor ของ Arduino IDE

อธิบายการทำงานของโค้ด

  • จากตัวอย่างโค้ดด้านบน ที่บรรทัด 8-14 ในฟังก์ชัน loop โปรแกรมจะคอยตรวจสอบว่ามีข้อมูลเข้ามาทางพอร์ต RS485 หรือไม่ ซึ่งถ้ามีข้อมูลเข้ามาให้เก็บค่าที่อ่านได้มาไว้ในตัวแปร c จากนั้นทำการตรวจสอบว่าค่าในตัวแปร c เท่ากับค่า 0 หรือไม่ ถ้าไม่เท่ากับ 0 ให้ทำการแสดงข้อมูลดังกล่าวออกมาทางพอร์ต Serial ของ Arduino

แบบฝึกหัดสำหรับทบทวนความเข้าใจและประยุกต์ใช้งานจริง

  1. ทำการเขียนโปรแกรมรับค่าจากพอร์ต RS485 แล้วนำมาตรวจสอบ โดย ถ้ารับค่า ‘a’ ให้พิมพ์คำว่า “Receive A” ออกทาง Serial Monitor และถ้ารับค่า ‘b’ ให้พิมพ์คำว่า “Receive B” ออกทาง Serial Monitor แต่ถ้ารับตัวอักษรอื่นมานอกเหนือจากนั้น ให้พิมพ์คำว่า “Not match any case”

 

 

 

  1. ทำการเขียนโปรแกรมรับค่าจากพอร์ต RS485 โดยนำค่าที่รับมาได้มานำมาประมวลผล แล้วสั่งให้บอร์ด Arduino Learning Kit ทำงานดังต่อไปนี้

  • “relay1=on” ให้รีเลย์ตัวที่ 1 เปิด

  • “relay1=off” ให้รีเลย์ตัวที่ 1 ปิด

  • “relay2=on” ให้รีเลย์ตัวที่ 2 เปิด

  • “relay2=off” ให้รีเลย์ตัวที่ 2 ปิด

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *