Forum

Forum

3 binární vstupy př...
 
Notifications
Clear all

3 binární vstupy připojené na 1 analogový vstup


radek
(@radek)
Prominent Member
Joined: 6 years ago
Posts: 867
Topic starter  

Chybělo mi doma pár binárních vstupů pro připojení magnetů od oken. A na těch pár vstupů mi přišlo zbytečné kupovat další extension, popř. řešit quido, tak jsem to provedl tak, že jsme přes jednoduchý odporový dělič připojil 3 binární vstupy na 1 analogový vstup.

odporovy delic

Na vstupy A, B, C se připojí binární signály (bezpotenciály, které spínají 24V) a na výstup D se zapojí analogový vstup loxone.

V ideálním případě by odpory měli mít hodnoty R=24,5kohm, 2R=49kohm, 4R=98kohm.

Já jsem měl po ruce R=20kohm, 2R=68kohm, 4R=100kohm

V loxone je je potřeba analogový vstup nějakým způsobem rozdělit na 8 možných kombinací, které mohou nastat. Já jsem to udělal přes blok status, kde jsem jednotlivým stavům (s malým rozptylem napětí) přiřadit 1 z 8 stavů.

odporovy delic loxone

Funguje to dobře, až na jednu věc. Ve chvíli, kdy otáčím klikou na okně nastane na cca. 3s mezistav, který neodpovídá ani jedné finální hodnotě. Je to možná tím, že když se oddalují magnety od sebe vznikne na jejich kontaktu nějaký odpor, který mí to rozhodí. Bohužel loxone ho zaznamená po ty cca. 3s mi to zobrazuje jako neznámý stav.

Nevíte někdo, jak tyto přechodové stavy "vyhladit"? Ideál nějaká funkce, která mi analogové hodnoty, kratší než třeba 3s nebude zobrazovat na výstupu (tz. bude je ignorovat). Já jsme nic takového nenašel - práce s analog. signálem je v configu hodně omezená 🙁

 


Quote
L
 L
(@l)
Famed Member Admin
Documentator
Joined: 8 years ago
Posts: 2889
 

@radek: Neveril sem, ze tohle reseni nekdo fakt nekdy uvede do praxe ;-)).

Jinak s tim vyhlazovanim, teoreticky by to mohlo jit pres Loxone program. Tim by ses zbavil i toho bloku status. Na loxone program lze privest az 8 AI a muzes si napsat v nem rovnou logiku, co to pak vyhazuje ven na AQ


ReplyQuote
radek
(@radek)
Prominent Member
Joined: 6 years ago
Posts: 867
Topic starter  

Určitě to v picoC půjde, jen bych v něm musel umět programovat 🙁

Umí mě někdo nakopnout, kde dělám chybu?

Když dojde ke změně na vstupu, počká 5s a potom na 1. výstup zapíše 1 (pokud je vstup <2) nebo 2 (pokud je vstup >2).

char Napeti[128];
float f1;
int nEvents;
while(TRUE)
{
nEvents = getinputevent();
if (nEvents & 0xe)
{
sleep (5000);
f1 = getinput(0);
if (f1 > 2)
{
setoutput(0,2);
}
else
{
setoutput(0,1);
}
}
sleep(5000);
}

ReplyQuote
L
 L
(@l)
Famed Member Admin
Documentator
Joined: 8 years ago
Posts: 2889
 

hod si tam trace vystupy do logu, at vidis co to dela. takto na prvni pohled mi to prijde ok.

printf("aaa")

ReplyQuote
L
 L
(@l)
Famed Member Admin
Documentator
Joined: 8 years ago
Posts: 2889
 

jinak co mne jeste napada, bacha na to, ze ne vsechno picoC dela dobre. obcas dela uplny nesmysly.

osobne bych se vyhnul promennym co mimo scope kdyz to neni nezbytne nutne. mam pocit, ze to i nejak zlobilo

 

radsi takto:

 

while(TRUE)
{
int nEvents = getinputevent();
if (nEvents & 0xe)
{
sleep (5000);
float f1 = getinput(0);
if (f1 > 2)
{
setoutput(0,2);
}
else
{
setoutput(0,1);
}
}
sleep(5000);
}

ReplyQuote
radek
(@radek)
Prominent Member
Joined: 6 years ago
Posts: 867
Topic starter  

Díky, správná varianta tvoje jen s tím, že float f1 musel mít na začátku.

Ještě netuším, jak mu vnutit pod if dvojitou podmínku. Myslel jsem že toto bude OK:

 if ((f1 > 0) && (f1 < 0,03))
{
setoutput(0,1);
}

Ale křičí, že brackets not closed. Když vnitřní závorky zruším, zase píše ')' expected 

Zkoušel jsem && nahradit za AND a taky nic.


ReplyQuote
L
 L
(@l)
Famed Member Admin
Documentator
Joined: 8 years ago
Posts: 2889
 

To jsou presne ty radosti s PicoC, kdy jim poradne nefunguje parser jazyka

Kazdopadne v tomto pripade tam mas spatne desetinou carku. ma to byt tecka.

melo by stacit:

 

if ( f1>0 && f1<0.03)

  setoutput(0,1);



pripadne

if ( f1>0 && f1<0.03)

{

  setoutput(0,1);

}

ReplyQuote
L
 L
(@l)
Famed Member Admin
Documentator
Joined: 8 years ago
Posts: 2889
 

carkou oddelujes parametry, tecka je jako desetina. proto se mu to pravdepodobne nelibi.

AND/OR nejsou klicova slova, pro and je spravne &&, pro or pak ||, kdyz das jen &, tak je bitovy and, nebo | bitovy or


ReplyQuote
radek
(@radek)
Prominent Member
Joined: 6 years ago
Posts: 867
Topic starter  

Perfekt, teď funguje OK. Pokud by někdo potřeboval, toto je správná verze programu:

float f1;
while(TRUE)
{
int nEvents = getinputevent();
if (nEvents & 0xe)
{
sleep (10000);
f1 = getinput(0);
if ((f1 > 0) && (f1 < 0.03)) {
setoutput(0,1);
} else if (f1 > 2.12 && f1 < 2.16) {
setoutput(0,2);
} else if (f1 > 3.01 && f1 < 3.05) {
setoutput(0,3);
} else if (f1 > 4.67 && f1 < 4.71) {
setoutput(0,4);
} else if (f1 > 7.91 && f1 < 7.95) {
setoutput(0,5);
} else if (f1 > 8.89 && f1 < 8.93) {
setoutput(0,6);
} else if (f1 > 9.32 && f1 < 9.36) {
setoutput(0,7);
} else if (f1 > 9.97) {
setoutput(0,8);
}
}
sleep(5000);
}

Je ale zvláštní, že na analogovém vstupu Loxone trvá cca. 10s než tam po 1. změně hodnoty detekuje 2. změnu. Je to strašně dlouhej čas, netuším co celou dobu dělá. 10s je opravdu doba po které se změní hodnotu přímo na analog. vstupu Extensionu v configu.


ReplyQuote
chucky
(@chucky)
Estimable Member
Joined: 5 years ago
Posts: 135
 

Zdravím,

nepomohlo by nastavit na analogovém vstupu citlivost na průměr za 1s?

 

analog

ReplyQuote
L
 L
(@l)
Famed Member Admin
Documentator
Joined: 8 years ago
Posts: 2889
 

@radek: a nedela ti to zpozdeni ty "delay" v kodu? protoze dle kodu ti to tam 10sek ceka a az pak znova testuje vstup


ReplyQuote
radek
(@radek)
Prominent Member
Joined: 6 years ago
Posts: 867
Topic starter  

V programu to není určitě. Já když změním odpor, tak přímo v configu na tom analogovém vstupu vidím, že se měřené napětí změní až cca. 10s potom. Program je až za tím vstupem extensionu.

Tohle mi dělá třeba i u PIR čidel ve kterým mám i senzor intenzity osvětlení. Taky trvá dobu, než se mi změna zobrazí v configu. Dřív jsem to přikládal za vinu PIR čidlu, ale asi bude problém spíš v Loxone.

Na tu citlivost se zkusím doma ještě podívat, ale myslím tam mám teď nastaveno 30s.

 


ReplyQuote
smotek7
(@smotek7)
Noble Member Moderator
Documentator
Joined: 5 years ago
Posts: 1452
 

@L nečudujem sa @ager tak ma vyriešené tlačítka v nich odpory.

Trochu bolo trápenie s configom ale ide to. 

Mozno pridá skusenosti.

@radek nemáš tam nastavené na tom vstupe nejaké priemerovanie?

Odozva musí byt rádovo ms, na tých rezistoroch chodí aj viac klik.


ReplyQuote
ager
 ager
(@ager)
Estimable Member
Joined: 5 years ago
Posts: 144
 

Ahojte,

Teraz som to az cital.. @smotek7 pise spravne ja mam na 8 analogovych vstupoch spravene vsetky tlacitka 🙂 zatial ziadny problem...vsetko slape aj dvojklik aj trojklik...

Toto je ina situacia lebo okenne kontakty su neni tlacitka ale ostavaju zapnute...

ale mam to takto v configu pre kazdy analogovy vstup vid foto

ai1

co sa tyka analogovej zmeny tak ta je v mS len toto nastav v configu pre Analogovy vstup...zato mas problem tych 10s

ai2

No a co sa tyka toho stavu pri otvarani tak to som mal aj ja a preto tam mam 2x analogovu pamat ktora mi tieto stavy riesila. To znamena ze pokial je na vstupe nejaka zmena tak az po nejakom case prepne analogova pamat tuto hodnotu na vystup aby som vylucil ze bude zapinat nieco ine...inak to neslo dost som sa natrapil zakial som to dostal do finalneho stavu...proste zapinalo ine tlacitka niekedy ale takto to uz ide na 100%. V mojom pripade ta prva Analogova pamat reaguje ked je nejaka zmena na vstupe od 0.2-10V ale ty tam mas stale nejaku inu hodnotu takze treba vymysliet aby to robilo ked bude nejaka zmena...teraz ma nic nenapada....porozmyslam

Co sa tyka odporov ako si zapojil, kedze pripajas 24V a Ai je do 10V tak by si tam mal dat este jeden odpor do serie pre istotu aby si neodpalil Ai.  

 

This post was modified 4 years ago by ager

ReplyQuote
radek
(@radek)
Prominent Member
Joined: 6 years ago
Posts: 867
Topic starter  

Na analogovej vstup muzes pripojit i 24VDC (je to napsany i na Loxone strankach).

Maji vestavenej vnitrni odpor 10kohm.

EDIT: Tak chyba odhalena, opravdu to bylo v tom průměrování. Jak jsem ho vypnul, tak se mi změna začala projevovat hned.

This post was modified 4 years ago by radek

ReplyQuote
Share: