Zaslal: ne říjen 23 2016, 20:09 Předmět: Arduino UNO "MODBUS"
Přátelé potřebuji radu.
Ano nehodí se to jako průmyslové využití ale to teď neřešme.
Jedná se mi o to. Potřebuji rozjed HMI panel a arduino po rs485 s protokolem modbus rtu. drtím se stím už tři dny ale arduino vůbec neumím.
Pevodník který chci použít je MAX485
http://arduino-shop.cz/arduino/985-prevodnik-ttl-na-rs-485-1427700037.html
V arduinu budou registry na 8 relatek 1,2,3,4,5,6,7,8
Dále regist pro 4 digitalní vstupy 10001,10002,10003,10004
Dále tam potřebuji registr 2 analogove vstupy 30001,30002
A naposled regist 40001 na ultrazvukový senzor.
Už jsme daly dohromady kód který funguje skvěle přes USB v arduinu a simulatorem HMI panelu.
Takto nám to funguje na simulatoru uplně dokonale.
https://www.youtube.com/watch?v=RVCe_gXpAxI
Na převodníku to ale nefunguje vůbec je to asi tím že nemáme definovaný pin na arduinu který se stará o přepínání odesílání a přijímání paketů.
https://www.youtube.com/watch?v=JWPuOrG4poQ
Dokonce když propojím HMI s arduinem přes převodník tak se nic neděje data prolezou ale jen chvilkově když do toho zapnu simulator v PC-arduino ale HMI-arduino se neustale odpojuje a připojuje to není to správné řešení.
Proto žádám někoho o pomoc zda by dokázal v kódu který je níže ošetřit tu komunikaci pomocí RS485 HALF-DUPLEX (převodník MAX485)
//deklarování pinů relé karty
int rele1 = 4;
int rele2 = 5;
int rele3 = 6;
int rele4 = 7;
int rele5 = 8;
int rele6 = 9;
int rele7 = 10;
int rele8 = 11;
int ECHO = 12; // Echo pin z HC-SC04 na pinu 2
int TRIG = 13; // Trig pin z HC-SC04 na pin 3
//Setup the brewtrollers register bank
//All of the data accumulated will be stored here
modbusDevice regBank;
//Create the modbus slave protocol handler
modbusSlave slave;
regBank.add(30001); //regist pro teplotni senzor A0
regBank.add(30002); //regist pro teplotni senzor A1
regBank.add(40020); //registr pro data z ultrazvuku
slave._device = ®Bank;
//inicializace sériového portu s rychlostí 9600
slave.setBaud(9600);
když vysílá, musí být na převodníku DE na HIGH, když přijímá, musí být RE na LOW.
Proto je propoj dohromady a ovládej nějakým Dig. výstupem...
Ale hlavně nikde nevidím zachytávání nějakých přijatých dat na Rx portu nebo alespoň SoftwareSerial Rx portu ?
Leda, že by se o to starala nějaká z knihoven...
Tak to pro začátek nastav "natvrdo" jen na příjem napřímo připojením RE na GND a vyzkoušej to...
Děkuji za tvůj příspěvek.
Arduino je u mě kámen úrazu. Vůbec ho neumím
Pokud by zde byla dobrá duše která by mě zaslala upravený kod nebo knihovnu s kterým by to fungovalo na TX i na RX s tim automatickým přepínání a zapojením na piny, spadl by mi kámen ze srdce
Opravdu je potřeba jen těch pár relátek a zachování toho ultrazvuku.
Poznámka: S arduinem jsem přišel do kontaktu teprve tento týden
Já bych nejprve hardwarově nastavil pouze příjem ze 485 a zkusil bych, zda to šlape. A hlavně to dal na jiné piny než 0 a 1, kde běhá UPLOAD.
Pak by se vidělo.
Taky je možné, že má arduino průběžně odpovídat, že je přítomno, pak hardwarový pevně nastavený příjem nepomůže a nezbyde než rozpitvat knihovnu, kde se komunikace ztrácí...
To s tím příjmem jsem již zkošel ale HMI musí dostávat odpoveď od arduina aby vůbec zobrazilo ovladací prvky (tlačítka, hodnoty na displeji apod.)
Ty desky mám dvě objednal jsem si obě od číňana společně s těmi převodníky senzory vzdalenosti apod. Ještě mám na cestě ty usb/485 převodníky. S těmi bude možná lepší práce zjistit jak to funkuje. Teď nemám jak dostat 485ku do PC.
A hlavně musíš použít knihovnu v tomto novém odkazu, protože tam je to ovládání zapracované v souboru modbusSlave.cpp
V tom odkaze na začátku vlákna je sice taky tento soubor, ale řízení není podporováno...
//Setup the brewtrollers register bank
//All of the data accumulated will be stored here
modbusDevice regBank;
//Create the modbus slave protocol handler
modbusSlave slave;
//deklarování pinů relé karty
int rele1 = 4;
int rele2 = 5;
int rele3 = 6;
int rele4 = 7;
int rele5 = 8;
int rele6 = 9;
int rele7 = 10;
int rele8 = 11;
int ECHO = 12; // Echo pin z HC-SC04 na pinu 2
int TRIG = 13; // Trig pin z HC-SC04 na pin 3
regBank.add(30001); //regist pro teplotni senzor A0
regBank.add(30002); //regist pro teplotni senzor A1
regBank.add(40020); //registr pro data z ultrazvuku
slave._device = ®Bank;
//inicializace sériového portu s rychlostí 9600
slave.setBaud(&Serial,RS485Baud,RS485Format,RS485TxEnablePin);
Tak problém byl vyřešen
Změnilo se zadání adres registrů v HMI panelu a komunikace se ihned rozjela na výbornou.
Původně bylo zadáno pro digitální výstup1 - 0x1 změněno na 0x0001 a ejhle rozjelo se to.
Všem zůčastněným jak na Facebooku tak zde na fóru mockrát děkuji.
A pokusím se to dát nějak smysluplně dohromady kdyby se s tím chtěl taky někdo ještě potrápit.
Teď uvidíme jak se to bude chovat až jich pověsím 20 na linku
Ale to až zítra dnes už stačilo.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.