Forum
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.
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ů.
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á 🙁
@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
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);
}
hod si tam trace vystupy do logu, at vidis co to dela. takto na prvni pohled mi to prijde ok.
printf("aaa")
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);
}
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.
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);
}
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
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.
Zdravím,
nepomohlo by nastavit na analogovém vstupu citlivost na průměr za 1s?
@radek: a nedela ti to zpozdeni ty "delay" v kodu? protoze dle kodu ti to tam 10sek ceka a az pak znova testuje vstup
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.
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
co sa tyka analogovej zmeny tak ta je v mS len toto nastav v configu pre Analogovy vstup...zato mas problem tych 10s
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.
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.