Více čidel na RS485
Re: Více čidel na RS485
Další co by mě zajímalo je ... co udělá čidlo po tom, co příjme po RS485 zprávu, která není pro něj ?
Re: Více čidel na RS485
Podívej se na ten kód
Předpokládejme že je před RS485.write() přijímací buffer prázdný, tedy RS485.available()==0
Pak pošleš RS485.write("*BE0+045.8C");
a pak se hned ptáš while (RS485.available() > 0)
Ale v tom okamžiku je stále ještě tedy RS485.available()==0, protože se ještě pravděpodobně vysílá z vysílacího bufferu a čidlo nedostalo zatím kompletní zprávu. Takže se z toho while neprovede nic.
Kód: Vybrat vše
if (counter==10) {
RS485.write("*BE0+045.8C"); // protokol -> *B=instrukce E0= adresa cidla a pak teplota
while (RS485.available() > 0) { // Read serial input:
int inChar = RS485.read();
Pak pošleš RS485.write("*BE0+045.8C");
a pak se hned ptáš while (RS485.available() > 0)
Ale v tom okamžiku je stále ještě tedy RS485.available()==0, protože se ještě pravděpodobně vysílá z vysílacího bufferu a čidlo nedostalo zatím kompletní zprávu. Takže se z toho while neprovede nic.
Re: Více čidel na RS485
Nic ignoruje jí. To šlape na 100%. Zkusil jsem tu zapojit na sběrnici 10 čidel a krásně jedno po druhém čtu.
Jak z Terminálu - s 485 převodníkem, tak i tady v tom prográmku, kdy měním kody...
Jsou to čidla od Papoucha.com TQS1 a nové TQS3. šlapou jak švýcary...
Jak z Terminálu - s 485 převodníkem, tak i tady v tom prográmku, kdy měním kody...
Jsou to čidla od Papoucha.com TQS1 a nové TQS3. šlapou jak švýcary...
Re: Více čidel na RS485
Ondro to máš asi pravdu, ale jak to, že to s jedním funguje a i když dám po vysílání delay(2000) tak ho stejně přečtu, protože visí v Bufferu.
A další čidlo je oslovováno stejně až za dlouho...
i když nastavím ten můj pseudo counter na čtení po minutě 
A další čidlo je oslovováno stejně až za dlouho...


Re: Více čidel na RS485
Už v momentě prvního platného přijatého znaku je něco v "bufferu" ... jenže ten znak má několik 0/1 + start a stop ... parita? ... ani náhodou se tam nestihne dostat. A pak už není counter 10ondraN píše: ↑19 pro 2019, 19:23Podívej se na ten kódPředpokládejme že je před RS485.write() přijímací buffer prázdný, tedy RS485.available()==0Kód: Vybrat vše
if (counter==10) { RS485.write("*BE0+045.8C"); // protokol -> *B=instrukce E0= adresa cidla a pak teplota while (RS485.available() > 0) { // Read serial input: int inChar = RS485.read();
Pak pošleš RS485.write("*BE0+045.8C");
a pak se hned ptáš while (RS485.available() > 0)
Ale v tom okamžiku je stále ještě tedy RS485.available()==0, protože se ještě pravděpodobně vysílá z vysílacího bufferu a čidlo nedostalo zatím kompletní zprávu. Takže se z toho while neprovede nic.


Re: Více čidel na RS485
No počkej, dokud cykl neopustí smyčku, tak je pořád tam kde je counter 20. Teprve pak vyleze ven a projede celý SW
a teprve znova na začatku Loop je counter +1. To taky asi nebude problém, když ostatní zakometuju - jakýkoli - a nechám běžet jen jedno.
tak nevím, asi děláme někde jinou chybu.
a teprve znova na začatku Loop je counter +1. To taky asi nebude problém, když ostatní zakometuju - jakýkoli - a nechám běžet jen jedno.
tak nevím, asi děláme někde jinou chybu.
Re: Více čidel na RS485
Pokud jedna část programu samostatně pracuje .... a druhá část samostatně pracuje taky .... a dohromady obě nefungují, tak je problém nejspíše tam, jak režíruješ jejich obsluhu současně.
Re: Více čidel na RS485
Já vím, že nic nevím...... jasně že dělám někde chybu, proto tu žádám o radu, či změnu kodu.
Prostě jak obsloužit jednoho, pak si dát pauzu a obsloužit druhého atd atd. Kde dělám chybu?
Prostě jak obsloužit jednoho, pak si dát pauzu a obsloužit druhého atd atd. Kde dělám chybu?
Re: Více čidel na RS485
Zkus u každého čidla vložit tohle"
Kód: Vybrat vše
if (counter==10) {
while(RS485.available()>0){
RS485.read();
} // vyprazdni cely prijimaci buffer
RS485.write("*BE0+045.8C"); // protokol -> *B=instrukce E0= adresa cidla a pak teplota
while(RS485.available()==0){
delay(1);
} // ceka, dokud nezacne cidlo neco posilat, pozor, pokud cidlo bude odpojene tak se odtud program nedostane, nutne zaradit nejaky timeout
//tady uz je neco v prijimacim bufferu, tak mohu zacit cist a zpracovavat
while (RS485.available() > 0) { // Read serial input:
int inChar = RS485.read();
delay(2); // male zpozdeni aby se buffer nevycetl rychleji, nez se staci plnit
inString += (char)inChar; //PŘÍKLAD *BE0+045.8C
Re: Více čidel na RS485
Zkus něco takovéhodle:
Kód: Vybrat vše
if (counter==20)
{
while (RS485.available()) // vymaže buffer, kdyby v něm náhodou byly nějaké zbytky dat z předchozích čidel
{
RS485.read();
}
// odeslání žádosti
RS485.write(84); //84,77,73,13 = "TMI"<CR>
RS485.write(77); // u tohoto je M=adresa
RS485.write(73);
RS485.write(13);
delay(800); // měření trvá až 700 ms, tak se dá ještě nějaká rezerva na přenos
while (RS485.available() > 0) // pak bych jen převedl celý přijímací buffer do řetězce
{ // Read serial input: //PŘÍKLAD "*M+020.8C"<CR>
int inChar = RS485.read();
inString += (char)inChar;
}
adr = inString.charAt(1); // na závěr z řetězce vysosat potřebné údaje
hodnota = inString.substring(4,6).toInt() * 10;
hodnota = hodnota + inString.substring(7,8).toInt();
Serial.print(adr); Serial.print(" ");
Serial.println(hodnota);
inString = "";
}
if (counter==30)
{
// to samý jako při (counter==20) - kromě adresy v žádosti
}
if (counter==40)
{
// to samý jako při (counter==20) - kromě adresy v žádosti
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host