cykly a uživatelské nastavení

Volná diskuse k projektu AMiTsys Junior

cykly a uživatelské nastavení

Příspěvekod partikam » čtv 11. bře 2010 23:02:01

1 otázka:
Dobrý den, mám takový problém. Mám sedm senzorů měření toploty (ni1000) a každou proměnnou porovnávám pomocí HYST, pokud teplota překročí určitou hranice mám pro to nastaven case, ale každej bit mám nastaven zvlášť a chtěl bych to nastavit nějak pomocí cyklu. Uvedu příklad (jak bych to zhruba udělal v C++) :
for (i=0;i<6;i++)
{ if promenna [i]
let.....
}

Zkrácený příklad toho, jak to mám vytvořeno v Detstudiu:
Ni1000 #AI00_0, teplota0, 6180
Ni1000 #AI00_1, teplota1, 6180
Ni1000 #AI00_2, teplota2, 6180

Hyst teplota0, nadmerna_C.0, 70.0, 2.0, 0x0000
Hyst teplota1, nadmerna_C.1, 70.0, 2.0, 0x0000
Hyst teplota2, nadmerna_C.2, 70.0, 2.0, 0x0000

If nadmerna_C.0
let prepinani=5
endif
If nadmerna_C.1
let prepinani=5
endif
If nadmerna_C.2
let prepinani=5
endif

A právě abych nemusel pro každý bit nastavovat zvlášť podmínku, když vše nastavuji tak, aby se to přeplo na stejný case, tak bych to chtěl dát do nějakého cyklu??

2 otázka:
Mám v programu různé senzory a v případě spuštění vykonají nějakou podmínku. Ovládání semaforů mám nastaveno tak, že stále nějak svítí dokud se to programově či uživatelem(mám tam použit bitswitchkey) nezmění. Programově - pokud čidlo identifikuje nějaké škodlivé chemikálie..., tak všechny semafory ihned budou svítit červeně. Potřebuji, ale vědět, jak nastavit to, aby když senzor identifikuje např.: kouř. splní svou podmínku a semafory svítí červeně, protože jsou nepříznivé podmínky, ale po tom co se podmínky zlepší a senzor již nic nehlásí nechci, aby se mi zaply semafory na zelenou(tak jak je nastaveno programově, když jsou vyhovující podmínky), ale chci, aby svítili pořád červeně, než se vše nezkontrolují uživatelé, jestli není něco rozbité apod... a pak aby až uživatel po určitém čase, jak uzná, že je vše v pořádku a je možno pokračovat v provoze, spustil zelenou a ne aby to udělal program před tím, než se vše zkontroluje???

Doufám, že jsem se vyjádřil dostatečně výstižně a děkuji vám za odpovědi.
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: cykly a uživatelské nastavení

Příspěvekod kupcik » pon 15. bře 2010 10:09:57

ad 1) mě napadá, co takhle, kdyby jsi nevyhodnocoval každý bit zvlášť, ale celé nadmerna_C? Když ukládáš do každého bitu zvlášť, tak předpokládám, že ze začátku tam máš samé nuly. A pokud libovolný hyst sepne, tak už tam nulu desítkově nemáš. Takže podle mě stačí jedna podmínka "prepinani=if(nadmerna_C>0,5,prepinani)"
ad 2) zkus se podívat na modul ErrSig jestli to není to, co potřebuješ. Takhle to zní, že vyžaduješ kvitaci poruchy uživatelem.
Nebo tak, měl jsi na mysli toto: vyskytne se porucha -> semafory červené . Porucha skončí, semafory stále červené a čeká se na uživatele až to vypne -> zelená. To potom rovněž můžes použít klasický RS modul. Porucha = Set na červenou, Uživatel = Reset na červenou, Zelená = inv(červená).
Michal Kupčík
Technická podpora (support@amit.cz)
AMiT spol. s r.o.
Uživatelský avatar
kupcik
 
Příspěvky: 29
Registrován: pát 16. říj 2009 12:51:12

Re: cykly a uživatelské nastavení

Příspěvekod partikam » ned 21. bře 2010 15:08:57

1)

Dobrý den, děkuji za odpověď. Měření teploty už mně bez problémů funguje a mám to už i prakticky vyzkoušeno(pokud teplota překročí hranici=>všechno jede a uživatel nemůže zasahovat------pokud se teplota dostane do normálu=>bezpečnostní opatření se vypnou=>ale semafory svítí červeně dokud uživatel nezasáhne), ale vyskytl se mě při praktickém testování mého programu takový problém. Uvedu vám příklad:
BinIn #DIO0_0, 0x0000, @kour
if @kour
let pom = 1
endif

switch pom
case=1
let @zelena=false
let @oranzova=not @oranzova
let @cervena2=true
....................
endcase
let @oranzova=false
let @cervena2=false
........
endswitch


=>program funguje, až na jednu maličkost. Pokud totiž žádná podmínka neplatí, chci, aby se provedlo to co mám zapsáno mezi endcase a endswitch, ale tohle nefunguje. V nápovědě máte uvedeno, že je to implicitní větev pro všechny ostatní hodnoty proměnné. Mohli by jste mně poradit, jak na to, či uvést jiný způsob, jak to provést. Děkuji

2) A kdyby jste mi mohli poradit, jak udělat noční režim?? Uvažoval sem o použití příkazu Dayplan, ale spíše bych to chtěl pro simulaci, aby např. 30s lampy svítily a dalších 30s nesvítily. Děkuji vám za odpovědi.....
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: cykly a uživatelské nastavení

Příspěvekod kupcik » pon 22. bře 2010 10:11:58

Zdravím. Zkusil jsem vlastní program se switch a funguje mi to dle nápovědy. Co ti to teda dělá? Vždy se si to provede, nebo naopak nikdy? Spíš bych řekl že nikdy a potom bych určitě hledal chybu v programu. S pomocí inspektora to určitě najdeš. Ale jestli opravdu vidíš, ve ve switch máš ošetřeno "pom" v rozmezí <1 , 3> (např.) a při 4 se ti nic neprovede (např let pom2=pom2+1), tak ti potom doporučím daný kód mezi EndCase - EndSwitch smazat a dát to do ifu, který dáš hned za switch.

Chápu to správně, že chceš vytvořit astabilní klopný obvod? Den, Noc, Den, Noc... Potom použij dva TONy 1. - IN - LDN(@Back), PT - LDd(30000), Q - ST(@Out), 2. - IN - LD(@Out), PT - LDd(30000), Q - ST(@Back). A pracuj s @Out. Pokud chceš tento astabil zapínat/vypínat, dej před první IN ještě LD(@On).
Michal Kupčík
Technická podpora (support@amit.cz)
AMiT spol. s r.o.
Uživatelský avatar
kupcik
 
Příspěvky: 29
Registrován: pát 16. říj 2009 12:51:12

Re: cykly a uživatelské nastavení

Příspěvekod partikam » pon 22. bře 2010 13:12:20

1)Program mám vytvořen tak, že mám 4* binin=>načteny ze vstupů a k tomu mám udělané podmínky pro každý alias v BININ jednu podmínku a pokud to platí, tak k tomu mám přiřazen daný CASE + navíc tam mám, že pokud třeba platí dvě podmínky či všechny podmínky v jednu chvíli, tak mám pro to zvlášť další CASE. A chci, aby pokud ze vstupu nebude načtena žádná hodnota, které by odpovídala daná podmínka, aby se provedlo to co mám mezi endcase-endswitch. Přepínaní CASE podle toho, který ze vstupů je načten funguje, ale pokud ze vstupu není "nic" načteno =>žádná podmínka neplatí=> žádná čidlo není spuštěnu a jsou ideální podmínky=> chci provést to mezi endcase - endswitch, ale při praktické zkoušce mi jede neustále všechno, ale mělo by to fungovat takto=> Mám to nastaveno tak, že pokud žádná podmínka neplatí nic není spuštěno pouze semafory, které by se mohli měnit červená-zelená...
Popřípadě, jak mám udělat tu podmínku mezi swich-case?

2)Ano chci udělat den-noc-den-noc. Mohl bych vás poprosit o bližší přiblížení vaší odpovědi. Děkuji
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: cykly a uživatelské nastavení

Příspěvekod Kozdera » pon 22. bře 2010 14:19:59

1) A není nakonec váš problém v tom, že si v případě že není nahozen žádný ze čtyř vstupních bitů tak si program pamatuje poslední hodnotu?
Protože jesli chápu správně váš popis máte program, který převede kombinace aliasů na číselné hodnoty
tedy
Kód: Vybrat vše
if @alias1
 let pom = 1
endif
if @alias2
 let pom = 2
endif
let @aliasX = @alias1 and @alias2
if @aliasX
 let pom = 3
endif

.....
switch pom
....

Máte ale ve svém programu průchod pro podmínku, když jsou všechny aliasy nula? Protože nemáte-li ve vašem programu ošetřen tento stav, tak při jeho nastání si bude systém pamatovat poslední hodnotu proměnné pom.

2) Na přepínání den a noc bych asi osobně použil modul SyncMark, kde si nastavíte periodicitu a čas spínání. Modul na jeden průběh programu nahodí výstupní bit od kterého můžete provést další programové ošetření.
Jan Kozdera
NEUMAN EL, spol. s r.o.
Kozdera
 
Příspěvky: 96
Registrován: stř 07. kvě 2008 14:29:48

Re: cykly a uživatelské nastavení

Příspěvekod jarda » pon 22. bře 2010 16:16:36

Zdravím, podle mého je to moc složité. Zjednodušil bych to na:
Kód: Vybrat vše
BinIn #DIO0_0, 0x0000, @kour
if @kour
     Let @zelena=false; @oranzova=not @oranzova; @cervena2=true
else
     Let @oranzova=false; @cervena2=false
endif


K časové plánu: pokud by to mělo být pro odstavení v různou dobu použil bych DeyPlan. pokud by to měl být "cyklovač", tak nejjednodušší je udělat proces s periodou co požadujete a do tohoto procesu umístit už vámi použitou konstrukci @bit = not @bit. Následně dřívější kód zavřete do IFu s touto podmínkou.
Jarda Valter
Uživatelský avatar
jarda
 
Příspěvky: 118
Registrován: sob 12. dub 2008 9:43:03
Bydliště: Jindřichův Hradec

Re: cykly a uživatelské nastavení

Příspěvekod partikam » pon 22. bře 2010 20:17:13

1)Ano, mám to programově uděláno tak, jak uvádíte. Podmínku pro to, když budou vstupní bity nulové nemám. Počítal jsem s tím, že je to ošetřeno právě mezi endcase-endswitch => pokud by ty podmínky neplatily, provedlo by to vše mezi tím. Jsem teprve začátečník, tak bych se ještě zeptal, jak to provést pokud budou ty vstupní bity nulové? Napadá mě jedině do každé podmínky vložit ELSE, ale to asi nebude to pravé.

2)Pro ten cyklus den-noc jsem si vytvořil nový proces s periodou 30000ms a osvětlení mně 30s svítí poté 30s ne. Funguje bez problémů.
let @nocnirezim=not @nocnirezim
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: cykly a uživatelské nastavení

Příspěvekod Kozdera » pon 22. bře 2010 21:21:30

Mějme tedy čtyři digitální vstupy, které načtete do aliasů. Aliasy budou na proměnné např. vstupy a to na bitech 0 až 3. Do těch hodnoty budete načítat pomocí BinIn
Kód: Vybrat vše
let pom = 0 // zhozeni do vychoziho stavu
// nahozen prvni alias
if @alias1
 let pom = 1
endif
// nahozen druhy alias
if @alias2
 let pom = 2
endif
// nahozen napr prvni a treti alias
let pom = if(@alias1 and @alias3 , 2, pom)

// dalsi kombinace ktere potrebujete osetrit
// nasleduje switch


uvedena konstrukce bude mit za nasledek, ze kdyz nebude splnena zadna z uvedenych podminek bude v promenne pom nula a ve switchi pak nechate 0 pro defaultni vetev nebo udelate vetev pro hodnotu nula.
Jan Kozdera
NEUMAN EL, spol. s r.o.
Kozdera
 
Příspěvky: 96
Registrován: stř 07. kvě 2008 14:29:48

Re: cykly a uživatelské nastavení

Příspěvekod partikam » úte 23. bře 2010 0:07:06

Děkuji, už je to téměř podle mích představ. Když jsou vstupní bity v log.0 =>fungují pouze semafory, ale =>když je vstupní bit přepnut do log.1, tak to funguje jak je definováno v daném case, ale připadá mi, že jak jsem tam dodal "let pom = 0" tak, když je v tom vstupním bitu 1 tak vše jede, ale zřejmě po každém načtení procesu od začátku jakoby , když narazí na instrukci let pom=0 všechno rychle vypne a jak narazí na podmínky opět zapne. :) Asi nějak jak uvádíte v poznámce "zhození do výchozího stavu". Do výchozího stavu to potřebuju dostat jen tehdy jsou-li vstupní bity v log.0, ale pokud je tam log.1 potřebuji , aby to jelo neustále."

=> pokud se přechází z log.1 vstupu na log.0 tak už to funguje, jak jsem si představoval, že vše vypne a fungují jenom semafory.
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Další

Zpět na AMiTsys Junior

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník

cron