Truyền thông Modbus Arduino làm Slave

posted in: PLC, Vi điều khiển | 1

Modbus là một chuẩn giao thức truyền thông công nghiệp hoạt động theo nguyên tắc “Master – Slave”. Một Master có thể kết nối được với nhiều Slave. Hiện nay các thiết bị công nghiệp đa số đều sử dụng Modbus nên để arduino giao tiếp với PLC, HMI, biến tần… thì ta phải đưa được giao thức Modbus vào Arduino. استراتيجيات الروليت Các bạn nên đọc trước các bài viết về Modbus để hiểu thêm trước khi lập trình. لعبت البوكر

Nội dung hôm nay là:

“Sử dụng Modbus RS485 để giao tiếp giữa arduino và Modbus Poll”

  1. Chuẩn bị
  • Phần mềm Modbus Poll, Modbus Poll là trình giả lập chính Modbus được thiết kế chủ yếu để giúp các nhà phát triển thiết bị Modbus hoặc những người khác muốn thử nghiệm và mô phỏng giao thức Modbus. (Các bạn tự tải về trên mạng, mình tải ở trang qthang.net chạy được)
  • Mạch chuyển giao tiếp UART TTL to RS485 (Mạch này để chuyển UART sang RS485 đầu ra của mạch bạn có thể nối vào cổng truyền thông của các thiết bị Modbus khác).
  • Bộ chuyển USB to RS485 Converter (Mạch này giúp kết nối RS485 với cổng USB của máy tính)
  • Thư viện ModbusRtu cho Arduino

2. Sơ đồ đấu dây

3. Lập trình

Ở đây mình dùng thanh ghi au16data[0] để đóng cắt Led chân 12 và thanh ghi au16data[12] để lưu giá trị analog chân A0

#include <ModbusRtu.h>

// data array for modbus network sharing
uint16_t au16data[16] = {
  0, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, -1 };

/**
 *  Modbus object declaration
 *  u8id : node id = 0 for master, = 1..247 for slave
 *  port : serial port
 *  u8txenpin : 0 for RS-232 and USB-FTDI 
 *               or any pin number > 1 for RS-485
 */
Modbus slave(1,Serial,2); // this is slave @1 and RS-485 chân 2

void setup() {
  pinMode(12,OUTPUT);
  pinMode(A0,INPUT);
  Serial.begin(9600,SERIAL_8E1); // baud-rate at 9600
  slave.start();
}

void loop() {
  slave.poll( au16data, 16 );
  if (au16data[0]==1) digitalWrite(12,HIGH);
  else digitalWrite(12,LOW);
  au16data[12] = analogRead(A0);
}




4. Kết nối Modbus Poll với Arduino

Vào Connection > Connect cài đặt như sau

Trong đó 9600 là Baud rate và Even Parity là chế độ kiểm tra lỗi tương ứng với dòng lệnh Serial.begin(9600,SERIAL_8E1);

Sau khi kết nối thì các bạn vào Setup > Read/ Write Definition

Slave ID ở trên mình đặt là 1, các bạn có thể đổi giá trị khác trong code, chọn Function 03 (Các bạn đọc tài liệu để hiểu hơn về Modbus), Địa chỉ là 0 và số lượng là 16 thanh ghi.

Kết quả

Để bật đèn Led chân 12 thì các bạn kích đúp vào thanh ghi số 0 và đổi Value thành 1

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *