You are on page 1of 8

Giao tiếp Board PLC FX3U (FK3U) Với

Arduino Uno Bằng RS485


Mục lục
Giao tiếp Board PLC FX3U (FK3U) Với Arduino Uno Bằng RS485 ................................................ 1
Mục lục................................................................................................................................................ 2
I) PLC FX3U.................................................................................................................................. 3
1) Cấu hình............................................................................................................................... 3
2) Lệnh IVRD, IVWR ................................................................................................................. 4
2.1 Lệnh IVRD .................................................................................................................... 4
2.2 Lệnh IVWR ................................................................................................................... 4
3) Chương trình ....................................................................................................................... 5
II) Arduino Uno ............................................................................................................................ 5
1) Cấu hình............................................................................................................................... 5
2) Chương trình ....................................................................................................................... 5
I) PLC FX3U

1) Cấu hình

Thanh ghi Mô tả Bit đặc biệt Mô tả


đặc biệt
D8120 Cài đặt RS485 M8121 Refer FK3U
Manual
D8121 Cài địa chỉ trạm (0-15) PLC M8122 Lệnh yêu cầu gửi
dữ liệu
D8122 Send Data Surplus M8123 Cờ nhận dữ liệu
D8129 Thời gian Time Out M8124 Refer FK3U
Manual
M8129 Bit time out

D8120
No. Name Content
0(OFF) 1(ON)
B0 Data length 7 8
B1 Parity bit b2 b1
B2 0 0 None
0 1 Odd
1 1 Event
B3 Stop bit 1 2
B4 Transfer rate bps b7 b6 b5 b4
B5 0 0 1 1: 300
B6 0 1 0 0: 600
B7 0 1 0 1: 1200
0 1 1 1: 4800
1 0 0 0: 9600
1 0 0 1: 19200
B8 Start symbol Nothing Yes (D8124)
B9 Terminator Nothing Yes (D8125)
B10 Do not use
B11
B12 Communication b15 b14 b13 b12
B13 protocol 0 0 0 0 MITSUBISHI FX2N
B14 0 1 0 0 MODBUS RTU
B15 1 0 0 0 RTU MODBUS (IVRD, IVWR)
1 1 0 0 Free communication (RS,CCD)

2) Lệnh IVRD, IVWR

2.1 Lệnh IVRD

Lệnh IVRD được sử dụng đọc giá trị từ trạm Slave, trong đó

D0: 8byte cao là địa chỉ trạm tớ, 8byte thấp là mã đọc (03,04) ví dụ D0= H103,
trong đó địa chỉ trạm tớ là 01 và mã đọc là 03:Holding register

D1: địa chỉ đầu tiên muốn đọc ở trạm tớ (D1=k0 tương ứng với địa chỉ là 30001 ở
trạm tớ)

D2: địa chỉ đầu tiên muốn lưu trên PLC

K1: Số lượng thanh ghi muốn đọc (ở đây đọc 1 thanh ghi)

2.2 Lệnh IVWR

Lệnh IVWR được sử dụng để ghi giá trị từ trạm PLC xuống trạm tớ, trong đó

D10: 8byte cao là địa chỉ trạm tớ, 8byte thấp là mã ghi (06,16)

D11: Thanh ghi dữ liệu đầu tiên trên PLC cần ghi xuống trạm tớ

D12: Địa chỉ đầu tiên cần ghi dưới trạm tớ

K1: Số lượng thanh ghi cần ghi


3) Chương trình

Dưới đây là đoạn chương trình đọc ghi dữ liệu cơ bản từ PLC đến arduino Uno
Tốc độ truyền 9600
8E1, RTU Modbus

Địa chỉ trạm PLC là 0

II) Arduino Uno

1) Cấu hình

Thư viện cho Arduino: (Giải nén rồi copy cho vào đường dẫn C:\Program Files
(x86)\Arduino\libraries)

https://drive.google.com/file/d/1MPSntFqn4u3CBD6PLb_K3gMGlqVmhumc/view
?usp=sharing

Link tham khảo:

https://program-plc.blogspot.com/2015/11/plc-modbus-master-arduino-modbus-
slave.html

2) Chương trình
#include <modbus.h>

#include <modbusDevice.h>

#include <modbusRegBank.h>

#include <modbusSlave.h>

modbusDevice regBank;

modbusSlave slave;

#define RS485TxEnablePin 2 // Chân Control

#define RS485Baud 9600

#define RS485Format SERIAL_8E1

#define LED1 11

#define LED2 12

void setup()

//Assign the modbus device ID.

regBank.setId(1); // địa chỉ trạm là 1

/*

modbus registers follow the following format


00001-09999 Digital Outputs, A master device can read and write to these registers

10001-19999 Digital Inputs, A master device can only read the values from these
registers

30001-39999 Analog Inputs, A master device can only read the values from these
registers

40001-49999 Analog Outputs, A master device can read and write to these registers

Analog values are 16 bit unsigned words stored with a range of 0-32767

Digital values are stored as bytes, a zero value is OFF and any nonzer value is ON

*/

//Add Analog Input registers to the register bank

regBank.add(30001);

regBank.add(30002);

//Add Analog Output registers to the register bank

regBank.add(40001);

regBank.add(40002);

slave._device = &regBank;
slave.setBaud(&Serial,RS485Baud,RS485Format,RS485TxEnablePin);

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

void loop()

digitalWrite(LED1, regBank.get(40001));

digitalWrite(LED2, regBank.get(40002));

//regBank.set(30001, (word) analogRead(A0)); //from 0 – 1023

regBank.set(30001, (word) 111); // ghi giá trị 111 vào thanh ghi MODBUS 30001

regBank.set(30002, (word) analogRead(A1)); //from 0 – 1023

regBank.set(40001, (word) 112); // ghi giá trị 112 vào thanh ghi MODBUS 40001

slave.run();

You might also like