Diskuse Elektrika.cz

HYBRIDNÍ zóna => Technická podpora výrobce TECO Kolín radí odborníkům => Téma založeno: Petr Liskar 29.05.2012, 01:51



Název: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Petr Liskar 29.05.2012, 01:51
Situace: Programuji Tecomat Foxtrot. Mám POU volanou v úloze, kterou chci spouštět, pokud je první bit systémové proměnné System_S.S25 roven jedné. Tento bit chci nastavit na základě nějaké podmínky v jiné/jiných POU a shodit při vykonání daného POU. Existuje nějaký jednoduchý zápis či přiřazení, kterým bych mohl daný konkrétní bit ovlivnit?


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: SMILEK 29.05.2012, 10:47
Přece ":="     ;)


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Postránecký Petr 29.05.2012, 12:00
Situace: Programuji Tecomat Foxtrot. Mám POU volanou v úloze, kterou chci spouštět, pokud je první bit systémové proměnné System_S.S25 roven jedné. Tento bit chci nastavit na základě nějaké podmínky v jiné/jiných POU a shodit při vykonání daného POU. Existuje nějaký jednoduchý zápis či přiřazení, kterým bych mohl daný konkrétní bit ovlivnit?

Udělal bych to takto:
- Hodnotu bytu bych uložil do proměnné
- Dosadil do vzorce x= Proměnou AND 1 (prvni bit vysledkem je 1 pokud je "nahozen" a 0 pokud ne)
- porovnaní a nějaká akce



Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Jirka Š. Svejkovský 29.05.2012, 12:14
Neznám prostředí Mosaic, ale pokud chcete přehodit libovolný bit, použijte operaci xor:

1000b xor 10b = 1010b (překlopí druhý bit)

Zápis na překlopení prvního bitu by vypadal asi takto:

System_S.S25 = System_S.S25 xor 1

Pokud je systémová proměnná System_S.S25 readonly, pracoval bych s její kopií.


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Petr Liskar 29.05.2012, 13:10
Přece ":="     ;)
Hmm, a zkusel jsi to?


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Petr Liskar 29.05.2012, 13:21
Neznám prostředí Mosaic, ale pokud chcete přehodit libovolný bit, použijte operaci xor:

1000b xor 10b = 1010b (překlopí druhý bit)
Spíš OR než XOR, potřebuji bit zaručeně nahodit (shodit na nulu se dá pro změnu ANDem).
Hledal jsem jednodušší způsob, než se matlat s ORem a s ANDem. Konkurence například umožňuje nadefinování aliasu nad zvolený bit a dál se v operacích pracuje s názvem aliasu a prgramátor se o nic nestará. Popřípadě syntaxe přiřazení umožňuje jít až na zvolený bit dané proměnné přímo...

Takže mě čeká psaní vlastní knihovny, aby bylo možno Teco rozumně použít...  >:(

Pokud je systémová proměnná System_S.S25 readonly, pracoval bych s její kopií.
Ne, je RW a tato konkrétně řídí spouštení určité skupiny úloh.



Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: SMILEK 29.05.2012, 18:08
No dobrá,  tedy vážně:

VAR_GLOBAL
   mujNastavovany Bit  AT %S25.1  : BOOL;   
END_VAR


a v POU pak volat:
IF moje_podminka THEN mujNastavovany Bit := hodnota; END_IF
 ;)


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Milan Bydžovský 29.05.2012, 19:24
Alias na první bit lze zapsat jako:

VAR_GLOBAL
  alias_na_prvy_ bit_s25 AT System_S.S25.0 : BOOL;
END_VAR

Kromě definice proměnné lze použít zápis s bitovým indexem i přímo v kódu:

zápis může vypadat např. takto:

System_S.S25.0 := hodnota;



Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: SMILEK 29.05.2012, 19:45
System_S.S25.0 := hodnota;

A myslíte, že to bude v praxi fungovat? Měl jsem pocit, že S25.0 si přepisuje samotný systém (plánování P9) a uživatelsky ovlivnitelné jsou až bity S25.1-7.  Tak jsem v příkladu přepsal nultý bit na první (S25.1).   (dance)


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Jiří Schwarz 29.05.2012, 20:13
Koukám, že mi asi trochu ujel vlak...
Já bych to dokázal maximálně pro nějaký PIC pomocí instrukce  BSF f,b


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Petr Liskar 29.05.2012, 20:19
Alias na první bit lze zapsat jako:
VAR_GLOBAL
  alias_na_prvy_ bit_s25 AT System_S.S25.0 : BOOL;
END_VAR
OK, až na to, že chci nastavit první, nikoliv nultý bit.

Kromě definice proměnné lze použít zápis s bitovým indexem i přímo v kódu:
zápis může vypadat např. takto:
System_S.S25.0 := hodnota;
Jo, to kupodivu funguje taky, byť s předchozí výhradou. jsem děkující...


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Petr Liskar 29.05.2012, 20:20
A myslíte, že to bude v praxi fungovat? Měl jsem pocit, že S25.0 si přepisuje samotný systém (plánování P9) a uživatelsky ovlivnitelné jsou až bity S25.1-7.  Tak jsem v příkladu přepsal nultý bit na první (S25.1).   (dance)
Kušuj, rejpale, tady přece mají radit odborníci...  ;)


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: SMILEK 29.05.2012, 21:25
Pokud je pravda tohle:
Já bych to dokázal maximálně pro nějaký PIC pomocí instrukce  BSF f,b

tak nejspíš není pravda tohle:
Koukám, že mi asi trochu ujel vlak...

Protože pokud tu zrovna nefrajeříme s přímým adresováním a řízenou aktivací úloh (bez čehož se dá ve většině aplikací velmi pohodlně žít),  tak je to celé jen variace na starý dobrý Pascal. Je to stejné jako na silnici. Své místo tu má profík TIR a stejně tak děda s kloboukem, vezoucí pytel jablek ze zahrádky. Výhodou PLC od Tecomatu je, že každý si může najít to své. Šikovný neprogramátor si ovládání svého domu nakliká ve FoxToolu, programátor si vybere dle svého zaměření ze sedmi jazyků (některé jsou grafické,  jiné textové),  profík na tom stejném PLC bude Profibusem či Modbusem řídit průmyslovou linku. Je to stavebnice (jo, jsem hračička, vyrostl jsem s Merkurem  ;)),  ze které se dá udělat regulátor domácího topení či světel a stejně tak velín dálničního tunelu.   


Název: Re: Jakým přiřazovacím příkazem mohu nastavit konkrétní bit v proměnné typu byte?
Přispěvatel: Milan Bydžovský 30.05.2012, 09:29
OK, až na to, že chci nastavit první, nikoliv nultý bit.
Jo, to kupodivu funguje taky, byť s předchozí výhradou. jsem děkující...

Rádo se stalo. Omlouvám se za nepochopení, já chápal první bit jako bit s indexem nula ;-)