Több arduino összekötése RS485-el.

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. szeptember 5. péntek, 12:13

Üdvözlet.

Az arduino RS485 használatára lennék kíváncsi. Ha valaki egy kicsit elmagyarázná vagy adna egy megyar leírást hogy mit hogyan azt megköszönném.
A következőt szeretném megoldani:
Lenne egy master ami rá van kötve egy ethernet shieldre. Ez tud komunikálni egy szerverrel. Feltölti az adatokat és vissza is kapja az eredményeket. Ez mellett lenne/lennénke slave arduinok amik érzékelőket vagy reléket kezelnek.
Úgy gondolom hogy ehhez a kommunikációhoz az RS485 lenne a jó. Fizikailag nem egymás mellett lennének az egységek.
Elgondolásom szerint a master végig kérdezi az összes slave egységet és vagy feladatot ad nekik vagy infót kér tőlük.

Viszont nem találtam jelenleg egy könnyen érthető leírást hogy miként is kell a kódot megírni hozzá. Addig eljutottam hogy egy MAX485 chippel szerelt egység jó lehet a feladatra. Amit innen még be is lehet olcsón szerezni.http://www.ebay.com/itm/MAX485-Module-R ... 0858839773

Avatar
spotlite
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2011. február 23. szerda, 7:00
Tartózkodási hely: Érd-Parkváros
Kapcsolat:

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: spotlite » 2014. szeptember 5. péntek, 13:52

Szia!

Én is ebben a cipőben járok, de nekem sem sikerül összehozni. Fizikai réteg működik, de a kommunikációt megvalósító letölthető libary nem nagyon működik... többféle is van. Belefáradtam, és vettem az összes egységhez netkártyát, de az meg folyamatosan lefagy pár perc lekérdezés után. Nagyon kíváncsi leszek, hogy valakinek sikerült-e már ilyet létrehozni. :cry:

kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. szeptember 5. péntek, 14:55

Most találtam egy oldalt ahol A és B karaktert küld ki és ha megérkezik akkor a megfelelő slave ledje felvillan.
https://sites.google.com/site/grcbyte/electronica/arduino/rs485-serial

Avatar
spotlite
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2011. február 23. szerda, 7:00
Tartózkodási hely: Érd-Parkváros
Kapcsolat:

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: spotlite » 2014. szeptember 7. vasárnap, 5:30

Nem próbáltam ki, de ennél új protokollt hoznál létre, amit Róbert többször is hangsúlyozott, hogy erre már vannak kész kódnyelvek. Viszont a mi esetünkben ahol főleg vezérlésre, és nem nagy adatmennyiség átvitelére kell a rendszer, lehet hogy egyszerűbb egy ilyen könnyen átláthatóbb működést létrehozni. Jelenleg egy irányba küld adatot, és végül is egy karakter jelentheti az adatirány megfordulását is, vagyis a válaszolás lehetőségét. Valamelyik nap visszaépítem a már korábban tesztelgetésre épített próba áramkörömet, és kipróbálom.

kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. szeptember 8. hétfő, 9:50

Amennyire látom ezt a példakódot át lehet alakítani akár úgy is hogy bárki írhat a buszra. Mivel minden elem figyeli a buszt így minden adat eljut mindegyik eszközhöz. Utána már csak fel kell építeni egy adatszerkezetet hogy mi milyen sorrendben van az adatsorban. Így mindenki kitudja szűrni a neki való adatokat. A master csak azért kell hogy legyen aki osztogatja a jogokat hogy mikor ki írhat a buszra. Így nem lesz keveredés. Legalábbis én így gondolom. Átnéztem a MAX485 chipet. Onnan nekem ez derül ki. Maga a chip Full duplex módban üzemel. Rendeltem 10 chipet ebayrol. Ha megérkezik akkor tudom tesztelni Én is.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9886
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: Robert » 2014. szeptember 8. hétfő, 10:03

A Modbus protokoll alapelvét ne akarjátok felülírni. Felesleges és a ModBus eléggé kiforrott már...

A 75176-os IC csak szintillesztő, nem protokollkonverter!

kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. szeptember 8. hétfő, 10:38

Természetesen nem akarjuk felülírni. Én személy szerint a legegyszerűbb megoldást keresem arra hogy több arduino eszköz egymásnak tudjon adatokat továbbítani.
Ha erre van megoldás azt szívesen veszem ha elmondod. Több helyen láttam hogy RS485 el meg lehet oldani, viszont konkrét megoldást még nemigen találtam. Eddig az a legértelmezhetőbb amit korábban beszúrtam.
A lényeg hogy ne csak 2 eszköz tudjon kommunikálni és több 10-100 méteres távolság se jelentsen gondot.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9886
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: Robert » 2014. szeptember 8. hétfő, 10:56


kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. szeptember 8. hétfő, 11:45

Van jópár verzió. Az egyforma verziók passzolnak csak vagy egyik a másikhoz is. Ha jól látom a slave és a master nem egyformán követi a verzió változást.

kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. október 8. szerda, 19:45

Megvannak a chipek a teszteléshez. Leszedtem a master v10 és slave v8 verziót.
Egy kis segítség kellene hogyan tudok kérést és választ lekódolni. A mintakód nem teljesen tiszta.
Amit meg akarok oldani:
Master kérdez a slavetől hogy mik az aktuális adatok pl az érzékelőknél.
Slave válaszol és küldi az értékeket.

Vagy master utasítja a slavet egy feladat végrehajtására.
Slave válaszol hogy megtette.

Avatar
spotlite
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2011. február 23. szerda, 7:00
Tartózkodási hely: Érd-Parkváros
Kapcsolat:

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: spotlite » 2014. október 8. szerda, 21:03

A minták között lévő példaprogit te sem érted :roll: ...akkor már ketten vagyunk.

kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. október 8. szerda, 22:23

Annyit talán sikerült megfejteni hogy az enum részben van megadva az adatszerkezet. Utána az elküldendő adatcsomagot a modbus_configure() -al be kell állítani. Ezek után a loopban a modbus_update(); résszel mindig kiküldi az aktuális értékeket. De hogy a másik oldalt hogy dolgozom fel az adatokat azt még nem sikerült kideríteni. De folyamatosan újra és újra olvasom a kódot.

Avatar
vkp
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2012. február 10. péntek, 7:00

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: vkp » 2014. október 8. szerda, 22:31

Tudom, hogy ronda, de működik :)

Az alapja az itteni soroskapcsolgatós, belefűzve az rs485-ös részek.

Az arduino oldalán egy max485 van, a másik oldalon egy usb-rs485, ami simán putty-ból serial portként megy.

/*
SerialLED
Soros porton kapcsolgathato LED
60 nap alatt arduino tanfolyam
(c) TavIR http://www.tavir.hu
*/

int inByte = 0;
// bejovo adat
int adatjott =0;
//eddig hany adatot kaptam?
char be ='b';
// Valtozo bekapcsolashoz
char ki ='k';
// Valtozo kikapcsolashoz

#include <SoftwareSerial.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define SSerialRX 9 //Serial Receive pin
#define SSerialTX 6 //Serial Transmit pin

#define SSerialTxControl 7 //RS485 Direction control
#define RS485Transmit HIGH
#define RS485Receive LOW
#define Pin13LED 4
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX

/*-----( Declare Variables )-----*/
int byteReceived;
int byteSend;


void setup()
{
Serial.begin(9600);
RS485Serial.begin(9600);
// soros sebesseg
pinMode(13, OUTPUT);
// D13: LED
Serial.println("Start...");
RS485Serial.println("Startby...");
pinMode(Pin13LED, OUTPUT);
pinMode(SSerialTxControl, OUTPUT);

digitalWrite(SSerialTxControl, RS485Receive); // Init Transceiver

// Start the software serial port, to another device
RS485Serial.begin(9600); // set the data rate
}

void loop()
{
if (RS485Serial.available() > 0) {
// van adat feldolgozasra?
inByte = RS485Serial.read();
// 1 byte beolvasasa
delay(100);
// 100 ms szunet
adatjott++;
// szamlalo novelese
if (inByte == be) {
digitalWrite(Pin13LED, HIGH);
// Ha B jon, bekapcsol
digitalWrite(SSerialTxControl, HIGH);
RS485Serial.println("Bekapcsolva");
// Soroson visszairjuk mi is volt
digitalWrite(SSerialTxControl, LOW);
}
if (inByte == ki) {
digitalWrite(Pin13LED, LOW);
// Ha K jon, kikapcsol
digitalWrite(SSerialTxControl, HIGH);
RS485Serial.println("Kikapcsolva");
// Soroson visszairjuk mi is volt
digitalWrite(SSerialTxControl, LOW);
}
}
}

kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. október 8. szerda, 23:20

Hali!
Ez is használható lehet, de jelenleg arduinok közötti RS485 adatforgalmat szeretnénk kiépíteni. Ehhez pedig kell Master és Slave kód.

kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Több arduino összekötése RS485-el.

HozzászólásSzerző: kukuri » 2014. október 17. péntek, 22:50

Hali.
Összeraktam a két arduinot + a max485 ic ket.
Feltöltve a mintaprogit a két mikrovezérlőre elég jól működött. Az A0 vezeték változtatásával változott a ledek fényereje is.
Hagytam hogy fusson egy ideig. 1-2 nap futás után egyszer csak nem akart elindulni. Az egyik UNO-n azt vettem észre hogy az RX led folyamatosan világít. Kicseréltem a MAX485 ic-t de semmi. Ezek után ismét megnéztem a rajzot. https://code.google.com/p/simple-modbus/downloads/detail?name=RS485%20Connection%20Schematic.pdf&can=2&q= ekkor vettem észre hogy Én csak a két BUS vezeték közé tettem ellenállást. Máshova nem a panelen.
Lehetséges hogy mindkét panelt hazavágtam ezzel? Új progit látszólag lehet rá tölteni, de a modbus demó már nem akar rajta menni.


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég