- Komunikasyon ng Serial na RS-485
- Pagkonekta sa RS-485 kay Arduino
- USB sa RS-485 Converter Module
- Simpleng Modbus Master Software
- Kailangan ng Mga Tool
- Diagram ng Circuit
- Programming Arduino UNO para sa RS-485 MODBUS Alipin
- Pagsubok sa Arduino UNO bilang Rs485 Modbus Slave
Ang Modbus ay isang Serial Communication protocol na natuklasan ng Modicon noong 1979 at ginagamit ito para sa paglilipat ng data sa mga serial line sa pagitan ng mga pang-industriya na elektronikong aparato. Gumagamit ang RS-485 Modbus ng RS-485 para sa mga linya ng paghahatid. Dapat pansinin na ang Modbus ay isang software protocol at hindi isang hardware protocol. Nahahati ito sa dalawang bahagi tulad ng Modbus Master at Modbus Slave. Sa RS-485 Modbus network mayroong isang Master at 127 Mga Alipin bawat isa na may natatanging address mula 1 hanggang 127. Sa proyektong MAX485 Arduino na ito, gagamitin namin ang Arduino Uno bilang Alipin para sa serial na komunikasyon.
Ang modbus ay kadalasang ginagamit sa mga PLC (Programmable Logic Controllers). At bukod dito, ang Modbus ay ginagamit din sa Pangangalaga ng Kalusugan, Transportasyon, Pag-aautomat sa Bahay atbp. Ang Modbus ay may 255 mga code ng pag-andar at higit sa lahat may tatlong tanyag na bersyon ng Modbus:
- MODBUS RTU
- MODBUS ASCII
- MODBUS / TCP
Ano ang pagkakaiba sa pagitan ng Modbus ASCII at Modbus RTU?
Ang Modbus RTU at Modbus ASCII ay nagsasalita ng parehong protokol. Ang pagkakaiba lamang ay ang mga byte na inililipat sa wire ay ipinakita bilang binary na may RTU at bilang nababasa na ASCII sa Modbus RTU. Gagamitin ang tutorial na Modbus RTU.
Ang tutorial na ito ay tungkol sa paggamit ng komunikasyon sa RS-485 Modbus sa Arduino UNO bilang Alipin. Dito namin mai - install ang Simple Modbus Master Software sa PC at kinokontrol ang dalawang LEDs at Servo Motor sa pamamagitan ng paggamit ng RS-485 bilang linya ng paghahatid. Ang mga LEDs at servo motor na ito ay konektado sa Slave Arduino at kinokontrol ng pagpapadala ng mga halaga gamit ang Master Modbus Software. Dahil ang tutorial na ito ay gumagamit ng RS-485, inirerekumenda na dumaan muna sa RS485 Serial Communication sa pagitan ng Arduino Uno at Arduino Nano. Maaari ding magamit ang RS485 sa iba pang mga tagakontrol para sa serial na komunikasyon:
- Ang RS-485 Serial Communication sa pagitan ng Raspberry Pi at Arduino UNO
- Serial Communication sa pagitan ng STM32F103C8 at Arduino UNO gamit ang RS-485
Magsimula tayo sa pamamagitan ng paggalugad ng ilang background tungkol sa RS-485 at Modbus. Dagdagan din ang nalalaman tungkol sa iba't ibang mga proteksyon ng Serial Communication dito.
Komunikasyon ng Serial na RS-485
Ang RS-485 ay isang hindi magkasabay na serial na komunikasyon na protokol na hindi nangangailangan ng orasan. Gumagamit ito ng diskarteng tinatawag na kaugalian signal upang ilipat ang binary data mula sa isang aparato patungo sa isa pa.
Kaya ano ang kaugalian na paraan ng paglipat ng signal na ito ??
Gumagawa ang pagkakaiba-iba na paraan ng signal sa pamamagitan ng paglikha ng isang boltahe ng kaugalian sa pamamagitan ng paggamit ng positibo at negatibong 5V. Nagbibigay ito ng isang komunikasyon na Half-Duplex kapag gumagamit ng dalawang wires at ang Full-Duplex ay nangangailangan ng 4 na apat na mga wire.
Sa pamamagitan ng paggamit ng pamamaraang ito:
- Sinusuportahan ng RS-485 ang mas mataas na rate ng paglipat ng data na maximum na 30Mbps.
- Nagbibigay din ito ng maximum na distansya ng paglipat ng data kumpara sa RS-232 na protocol. Naglilipat ito ng data hanggang sa 1200-meter na maximum.
- Ang pangunahing bentahe ng RS-485 kaysa sa RS-232 ay ang maraming alipin na may solong Master habang ang RS-232 ay sumusuporta lamang sa solong alipin.
- Maaaring magkaroon ng maximum na 32 mga aparato na konektado sa RS-485 na protocol.
- Ang isa pang bentahe ng RS-485 ay immune sa ingay habang gumagamit sila ng kaugalian na pamamaraan ng signal upang ilipat.
- Ang RS-485 ay mas mabilis kumpara sa I2C protocol.
Pagkonekta sa RS-485 kay Arduino
Ang RS-485 Module ay maaaring konektado sa anumang microcontroller na mayroong serial port. Para sa paggamit ng module na RS-485 na may mga microcontroller, kailangan ng isang module na tinatawag na 5V MAX485 TTL hanggang RS485 na batay sa Maxim MAX485 IC dahil pinapayagan nito ang serial komunikasyon sa distansya ng 1200 metro. Ito ay bidirectional at kalahating duplex at may rate ng paglipat ng data na 2.5 Mbps. Ang module na ito ay nangangailangan ng isang boltahe ng 5V.
Pin-Out ng RS-485:
Pangalan ng Pin |
Paglalarawan ng Pin |
VCC |
5V |
A |
Hindi Inververt na Input ng Receiver Non-Inverting Driver Output |
B |
Inverting Receiver Input Pagbalik-tanaw ng Output ng Driver |
GND |
GND (0V) |
R0 |
Receiver Out (RX pin) |
RE |
Receiver Output (LOW-Enable) |
DE |
Output ng Driver (MATAAS-Paganahin) |
DI |
Input ng Driver (pin na TX) |
USB sa RS-485 Converter Module
Ito ay isang USB to RS485 Converter Adapter module na sumusuporta sa WIN7, XP, Vista, Linux, Mac OS at nagbibigay ng isang madaling gamitin na interface ng RS485 sa pamamagitan ng paggamit ng COM port sa computer . Ang modyul na ito ay aparato na plug-and-play . Walang mga istraktura ng utos, anuman ang ipinadala sa Virtual COM Port ay awtomatikong na-convert sa RS485 at kabaligtaran. Ang module ay ganap na nagpapatakbo ng sarili mula sa USB bus. Kaya, hindi na kailangan ng panlabas na supply ng kuryente para sa pagpapatakbo.
Nagpapakita ito bilang isang Serial / COM port at naa-access mula sa mga application o hyper-terminal. Nagbibigay ang converter na ito ng komunikasyon na kalahating-duplex na RS-485. Ang saklaw ng rate ng Baud ay 75 bps hanggang 115200 bps, maximum hanggang 6 Mbps.
Upang magamit ang aparatong ito mayroong iba't ibang mga Modbus Software na magagamit sa internet. Sa tutorial na ito ang isang software na tinatawag na Simple Modbus Software ay ginagamit.
Simpleng Modbus Master Software
Ang aplikasyon ng Modbus Master Software ay kinakailangan upang magpadala ng data sa alipin na Modbus RS-485 Arduino aparato sa pamamagitan ng COM.
Ang simpleng Modbus Master ay isang software ng pagsubok sa komunikasyon ng data. Maaari mong i-download ang Simple Modbus Master mula sa ibinigay na link at malaman ang higit pa tungkol dito sa pamamagitan ng pag-refer sa Manwal ng Software.
Bago gamitin ang software, mahalagang pamilyar sa mga sumusunod na terminolohiya.
Slave ID:
Ang bawat alipin sa isang network ay nakatalaga ng isang natatanging address ng yunit mula 1 hanggang 127. Kapag humiling ang master ng data, ang unang byte na ipinapadala nito ay ang Slave address. Sa ganitong paraan alam ng bawat alipin pagkatapos ng unang byte kung hindi papansinin ang mensahe.
Pag-andar ng code:
Ang pangalawang byte na ipinadala ng Master ay ang Function code. Sinasabi ng bilang na ito sa alipin kung aling talahanayan ang maa-access at kung babasahin mula o sumulat sa talahanayan.
Mga sinusuportahang code ng Pag-andar ng Rehistro:
Code ng Pag-andar |
Kilos |
Pangalan ng Talahanayan |
04 (04 hex) |
Basahin |
Mga Rehistro ng Input ng Analog |
03 (03 hex) |
Basahin |
Mga Rehistro ng May hawak na Output ng Analog |
06 (06 hex) |
Sumulat ng solong |
Rehistro ng Hawak ng Output ng Analog |
16 (10 hex) |
Sumulat ng maramihang |
Mga Rehistro ng May hawak na Output ng Analog |
Mga sinusuportahang Coil Function code:
Code ng Pag-andar |
Kilos |
Pangalan ng Talahanayan |
02 (02 hex) |
Basahin |
Mga Discrete Input Contact |
01 (01 hex) |
Basahin |
Discrete Output Coil |
05 (05 hex) |
Sumulat ng solong |
Discrete Output Coil |
15 (0F hex) |
Sumulat ng maramihang |
Discrete Output Coil |
CRC:
Ang CRC ay nangangahulugang suriin ang Cyclic Redundancy. Ito ay dalawang byte na idinagdag sa dulo ng bawat mensahe ng Modbus para sa pagtuklas ng error.
Kailangan ng Mga Tool
Hardware
- Arduino UNO
- MAX-485 TTL hanggang RS-485 Converter Module
- USB sa RS-485 Converter Module
- LED (2)
- 1k-Resistor (2)
- 16x2 LCD display
- 10k Potensyomiter
- Servo Motor SG-90
Software
- Simpleng Modbus Master
Diagram ng Circuit
Koneksyon ng Circuit sa pagitan ng MAX-485 TTL hanggang sa RS-485 converter module at Arduino UNO:
Arduino UNO |
MAX-485 TTL hanggang RS-485 Converter Module |
0 (RX) |
RO |
1 (TX) |
DI |
4 |
DE & RE |
+ 5V |
VCC |
GND |
GND |
Koneksyon ng Circuit sa pagitan ng MAX-485 TTL hanggang RS-485 Module at USB sa RS-485 converter:
MAX-485 TTL hanggang RS-485 Modyul ng Converter |
USB sa RS-485 Module Nakakonekta sa PC |
A |
A |
B |
B |
Mga Koneksyon sa Circuit sa pagitan ng Arduino UNO at 16x2 LCD display:
16x2 LCD |
Arduino UNO |
VSS |
GND |
VDD |
+ 5V |
V0 |
Upang makontrol ang pin ng potensyomiter para sa kaibahan / kontrol ng ilaw ng 16x2 LCD |
Ang RS |
8 |
RW |
GND |
E |
9 |
D4 |
10 |
D5 |
11 |
D6 |
12 |
D7 |
13 |
A |
+ 5V |
K |
GND |
Koneksyon ng Circuit sa pagitan ng 2 LEDs, Servo Motor at Arduino UNO:
Arduino UNO |
LED1 |
LED2 |
Servo Motor |
2 |
Anode sa pamamagitan ng 1k risistor |
- |
- |
5 |
- |
Anode sa pamamagitan ng 1k risistor |
- |
6 |
- |
- |
PWM pin (Orange) |
+ 5V |
- |
- |
+ 5V (PULA) |
GND |
Cathode GND |
Cathode GND |
GND (Kayumanggi) |
Programming Arduino UNO para sa RS-485 MODBUS Alipin
Ang Arduino UNO ay naka-configure bilang Modbus Slave. Gayundin, ang Arduino UNO ay nakakabit na may dalawang LEDs at isang Servo Motor. Kaya't ang alipin na Arduino ay kinokontrol mula sa Master Modbus Software. Ang komunikasyon sa pagitan ng Arduino UNO at ng Modbus Master Software ay nagagawa sa pamamagitan ng paggamit ng RS-485 module. Para sa pagkonekta nito sa PC, ginagamit ang USB sa RS-485 converter module. At ang Arduino UNO na may MAX-485 TTL sa RS-485 converter module, ang buong pag-setup ay titingnan ang file na sumusunod:
Para sa paggamit ng Modbus sa Arduino UNO, isang silid-aklatan
Sa una, isama ang kinakailangang library. Ang aklatan ng ModbusRTU ay para sa paggamit ng komunikasyon sa RS-485 Modbus, at ang likidong kristal na aklatan ay para sa paggamit ng LCD na may Arduino UNO, at ang librong servo ay para sa paggamit ng Servo motor na may Arduino UNO.
# isama
Ngayon ang mga LED anode pin na konektado sa Arduino pin 2 at 5 ay tinukoy bilang LED1 at LED2.
#define led1 2 # detefine led2 5
Susunod na bagay para sa pag-access sa klase ng Liquid Crystal ay idineklara sa mga LCD pin (RS, E, D4, D5, D6, D7) na konektado sa Arduino UNO.
LiquidCrystal lcd (8,9,10,11,12,13);
Kapag tapos na ang LCD, ipasimula ang object ng servo para sa klase ng Servo. Simulan din ang bagay ng bus para sa klase ng Modbus.
Servo servo; Modbus bus;
Susunod para sa pag-iimbak ng mga halaga para sa komunikasyon ng Modbus isang array ay idineklara sa tatlong halagang pinasimulan ng zero.
uint16_t modbus_array = {0,0,0};
Sa pag- andar ng pag- setup , una ang LCD ay naka-set sa 16x2 mode at isang maligayang mensahe ang ipinapakita at na-clear.
lcd.begin (16,2); // Lcd nakatakda sa 16x2 mode lcd.print ("RS-485 Modbus"); // Welcome Message lcd.setCursor (0,1); lcd.print ("Arduino Slave"); pagkaantala (5000); lcd.clear ();
Pagkatapos nito, ang mga LED1 at LED2 na pin ay itinakda bilang mga output pin.
pinMode (led1, OUTPUT); pinMode (led2, OUTPUT);
Ang servo pulse pin na konektado sa PWM pin 6 ng Arduino ay nakakabit.
servo.attach (6);
Ngayon para sa komunikasyon sa Modbus ang mga sumusunod na parameter ay nakatakda. Ang Unang '1' ay kumakatawan sa Slave ID, pangalawang '1' ay kumakatawan na gumagamit ito ng RS-485 upang ilipat ang data at ang '4' ay kumakatawan sa RS-485 DE&RE pin na konektado sa Arduino UNO.
bus = Modbus (1,1,4);
Ang alipin ng Modbus ay nakatakda sa 9600 baudrate.
Ang loop ay nagsisimula sa kahulugan ng bus poll at bus.poll () ay ginagamit upang magsulat at makatanggap ng halaga mula sa master Modbus.
bus.poll (modbus_array, sizeof (modbus_array) / sizeof (modbus_array));
Ginagamit ang pamamaraang ito upang suriin kung mayroong magagamit na data sa serial port.
Kung mayroong anumang data na magagamit sa serial port ang Modbus RTU library ay susuriin ang mensahe (suriin ang address ng aparato, haba ng data, at CRC) at isasagawa ang kinakailangang pagkilos.
Halimbawa upang magsulat o magbasa ng anumang halaga mula sa master, ang ModbusRTU ay dapat makatanggap ng isang hindi naka-sign na 16-bit integer array at ang haba nito mula sa Master Modbus. Nagdadala ang array na ito ng data na nakasulat mula sa master.
Sa tutorial na ito mayroong tatlong mga array para sa anggulo ng LED1, LED2 at Servo motor.
Una upang i-ON o i-OFF ang LED1 modbus_array ay ginamit.
kung (modbus_array == 0) // Nakasalalay sa halaga sa modubus_array na isinulat ni Master Modbus { digitalWrite (led1, LOW); // LED OFF kung 0 lcd.setCursor (0,0); lcd.print ("L1: OFF"); } iba pa { digitalWrite (led1, HIGH); // LED ON kung ang halaga maliban sa 0 lcd.setCursor (0,0); lcd.print ("L1: ON"); }
Susunod upang i-ON o OFF ang LED2 modbus_array ay ginagamit.
kung (modbus_array == 0) // Nakasalalay sa halaga sa modbus_array na isinulat ng Master Modbus { digitalWrite (led2, LOW); // LED OFF kung 0 lcd.setCursor (8,0); lcd.print ("L2: OFF"); } iba pa { digitalWrite (led2, HIGH); // LED ON kung ang halaga maliban sa 0 lcd.setCursor (9,0); lcd.print ("L2: ON"); }
Susunod upang maitakda ang anggulo ng motor ng Servo ang ginamit na modbus_array at halaga ay nakalimbag sa 16x2 LCD display.
int pwm = modbus_array; servo.write (pwm); lcd.setCursor (0,1); lcd.print ("Servo anggulo:"); lcd.print (pwm); pagkaantala (200); lcd.clear ();
Tinatapos nito ang pag-program ng Arduino UNO para sa pagtatrabaho nito bilang MODBUS Slave. Ang susunod na hakbang ay susubukan ito bilang Modbus Slave.
Pagsubok sa Arduino UNO bilang Rs485 Modbus Slave
Matapos makumpleto ang mga koneksyon sa circuit at ang code ay na-upload sa Arduino UNO, oras na upang ikonekta ang USB sa RS-485 module sa PC kung saan naka-install ang Simple Modbus Master software.
Buksan ang manager ng aparato at suriin ang COM port alinsunod sa iyong PC kung saan nakakonekta ang USB sa RS-485 Module at pagkatapos nito buksan ang software na Simple Modbus Master 8.1.1.
1. Matapos mabuksan ang Modbus Software ngayon buksan ang pagpipiliang Sumulat.
2. Matapos mabuksan ang Simple Modbus Master Writing . Itakda ang mga parameter
Mode sa RTU, COM port ayon sa iyong PC (ang sa akin ay COM6), Baud sa 9600, Data Bits 8, Stop bit 1, Parity Wala at Slave ID bilang 1.
3. Pagkatapos nito itakda ang unang magparehistro bilang 40001 at mga halagang isusulat ay 3 at ang function code bilang 16 (Isulat ang Holding Register).
Pagkatapos nito isulat ang 1 hanggang 40001 (Para sa LED1 on) at 1 hanggang 40002 (Para sa LED2 on) at 90 hanggang 40003 (Para sa Servo Motor Angle) at pagkatapos ay i-click ang SEND button.
Maaari mong makita ang parehong katayuang LED na ON at servo angulo sa 90 degree.
4. Pagkatapos nito ipasok ang 40001 bilang 1 at 40002 bilang 0 at 40003 bilang 180 at i-click ang SEND button.
5. Ngayon nagsusulat ng 135 hanggang 40003 at 40001 bilang 0 at 40002 bilang 1.
Ganito magagamit ang RS-485 Modbus sa serial na pakikipag-usap sa Arduino UNO bilang Alipin. Sa susunod na tutorial gagamitin namin ang Arduino Uno bilang master sa pagsisimula ng MODBUS.
Hanapin ang kumpletong code at isang video ng Pagpapakita sa ibaba.