Hirdetés

Új hozzászólás Aktív témák

  • Igen csak van egy kis problémám vele, ez a feladat beadandó lenne egy tárgyból amiből egész félévben volt 3 óránk és semmit nem értünk belőle sajnos :D Mert ami volt óra azon is csak annyi volt hogy csináljátok. Így gyakorlatilag létrában egy és kapcsolatot nem tudok megvalósítani vagy hogy milyen komponensekkel lehet...

    Szia.

    "Így gyakorlatilag létrában egy és kapcsolatot nem tudok megvalósítani vagy hogy milyen komponensekkel lehet"

    Ez elég szomorú. Akkor nem tudom, hogy mit tanítanak ottan...

    Először is én akkor félreértettem a problémát, mert amit írtam megoldásként, az csak arra jó, amit először írtál (illetve amit én abból megértettem).

    Itt egy lehetséges megoldás létrában (ez CodeSys alapú, a te rendszeredet nem ismerem, ezt neked kell adaptálni). Tehát ez az általam először leírt megoldás, nem az ami neked ténylegesen kell, de ha ezt megérted, akkor már azt is meg tudod oldani:

    1. és 2. sor: 1Hz/50% kitöltésben előállítása
    3. és 4. sor: ez lépteti az "sh"-ban a bitet, illetve ellenőrzi, hogy fel kell e tölteni újból
    5.,6.,7.,8. sor: ezek 2 bemenetű ÉS kaput valósítanak meg, és kapcsolgatják Q0...Q3-at

    Az "sh.0" azt jelenti, hogy az "sh" nevű változó 0.-ik bitje. Általánosan igaz, hogy egy 1 bitesnél nagyobb változónak "változónév.bitszám" módon lehet hivatkozni a bitjeire (0-tól indul az index).

    Az időzítő-nél leveheted a jelet az m0-áról is és az m1-ről is. m0 alapból alacsony, m1 alapból magas.

    Változólista:

    VAR
    sh: BYTE := 1;
    m0: BOOL;
    m1: BOOL;
    ton1: TON;
    ton2: TON;
    ftrig1: F_TRIG;
    sh_eq_8: BOOL;
    ftrig2: F_TRIG;
    END_VAR
    VAR_OUTPUT
    Q0: BOOL;
    Q1: BOOL;
    Q2: BOOL;
    Q3: BOOL;
    END_VAR
    VAR_INPUT
    I0: BOOL;
    END_VAR

    Imi.

  • Szirty
    őstag

    Igen csak van egy kis problémám vele, ez a feladat beadandó lenne egy tárgyból amiből egész félévben volt 3 óránk és semmit nem értünk belőle sajnos :D Mert ami volt óra azon is csak annyi volt hogy csináljátok. Így gyakorlatilag létrában egy és kapcsolatot nem tudok megvalósítani vagy hogy milyen komponensekkel lehet...

    Hali!

    "Igen csak van egy kis problémám vele, ez a feladat beadandó lenne egy tárgyból amiből egész félévben volt 3 óránk és semmit nem értünk belőle sajnos"

    Tehát akkor lényegében két lehetséges megoldás van:
    1. Megcsinálja valaki helyetted
    2. Megpróbálja valaki megtanítani

  • Helló Bandi18!

    "Lehet hogy ez jó megoldás de nekem létranyelvben kell mindezt megvalósítanom :)"

    Ezt létrában is meg lehet csinálni :)

    Igen csak van egy kis problémám vele, ez a feladat beadandó lenne egy tárgyból amiből egész félévben volt 3 óránk és semmit nem értünk belőle sajnos :D Mert ami volt óra azon is csak annyi volt hogy csináljátok. Így gyakorlatilag létrában egy és kapcsolatot nem tudok megvalósítani vagy hogy milyen komponensekkel lehet...

  • Szirty
    őstag

    Lehet hogy ez jó megoldás de nekem létranyelvben kell mindezt megvalósítanom :).

    Helló Bandi18!

    "Lehet hogy ez jó megoldás de nekem létranyelvben kell mindezt megvalósítanom :)"

    Ezt létrában is meg lehet csinálni :)

  • Szia.

    - készíts egy időzítőt, ami a kívánt ütemet adja
    - legyen 4 ÉS kapu, amiknek a kimenete megy Q1...Q4-re, egyik bemenetük az időzítőre, másik bemenetük pedig egy shiftregiszterként használt BYTE-os változó bitjeire (a shiftregisztert töltsd fel kezdőértékkel, mondjuk 1-el)
    - a gomb felfutó éleinél léptesd a shift regisztert (SHL, SHR)
    - ha végiglépett, akkor töltsd fel a kívánt kezdőértékkel újból

    Így a SHIFT_BIT(1) van, akkor az első lámpa villog, ha SHIFT_BIT(2), akkor a második, stb. Vagyis a kívánt ÉS kaput engedélyezed a SHIFT-el, a többi kimenete néma marad.

    Imi.

    Lehet hogy ez jó megoldás de nekem létranyelvben kell mindezt megvalósítanom :).

  • Szirty
    őstag

    Szia Szirty

    "S7-nél alapból nincs kifejezetten olyan, hogy file rendszer."

    WAGO-ban van ilyen, de nem mindegyikben. 1.5M a 750-841-nél, de van CF-es változat is (max. 4GB). Azt hiszem a 8+3-at támogatja csak, de ez nem biztos. Itt tárolódik a PLC-hez írt program, az esetleges feltöltött WEBHMI (ha van ilyen, akkor html file-ok és java *.jar-ok), illetve ha valamit progiból ide mentesz a PLC működése közben, akkor az is. Van egy SysLibFile.Lib, benne open(), close(), seek(), delete(), meg minden egyéb FUNCTION-ban. És van erre épülő magasabb szintű FB (SaveVariable néven), megadsz neki egy változót, a változó méretét, Load vagy Save illetve a file nevét, és van 2 kimenete (error flag, és egy timestamp a file-ról). Ha beFTP-zek, akkor is ezeket látom. Azt hiszem, hogy könyvtárak nincsenek.

    "Persze úgy, hogy a CPU értesül a tápfesz megszünéséről, de ő maga pufferről néhányszáz ms ideig még üzemel, amennyi idő alatt iztonságosan kírja a RAM tartalmat."

    Igen, ez valószínű. Pl. most találtam: van ShutDown esemény, amihez POU hívást-t lehet rendelni. Ha nem lenne puffer, akkor ez nem lenne megvalósítható. Hopp, itt egy kérdésem lenne: van olyan speciális pufferes modul bármilyen PLC-hez, ami annyit pufferel, hogy 2-3 SMS-t is el tudjon küldeni ilyenkor ?

    "Ha tényleg így van, akkor ebből az következik, hogy teljesen mindegy hogy programból milyen gyakorisággal írsz adatokat"

    Megkérdezem a WAGO-t, remélem igen. Ha mégsem, akkor nem használom naplózásra. Bár gyanús, mert 1.5M a flash, 512k a program RAM és 256k az adat RAM mérete, itt nem tudja tárolni a teljes filerendszert.

    "Ezért ha a feltöltés megszakad vagy adathiba következik be, a feltöltött adatok nem jutnak szerephez."

    Ok.

    Köszi a segítséget.

    Imi.

    Hali moseras!

    "Van egy SysLibFile.Lib, benne open(), close(), seek(), delete(), meg minden egyéb FUNCTION-ban."

    Jut eszembe: Omron CS1G-nél használtam ilyet. Ott van file szintű hozzáférés és éppen logra használtam.
    Valószínű, hogy ott minden írás ténylegesen a flash-re ment. Tehát hosszú távon tönkreteszi. De ha nem ms-enként kell bele írni, akkor 10 év is eltelhet mire probléma jelentkezik. Az említett gép minden munkafolyamat közben méréseket végzett és ezek eredményeit írta ki CSV file-ba CompactFlash kártyára. 10-20 mp-enként írt egy-egy adatcsomagot. Kb 8 éve megy, amennyire tudom nem kellett még CF kártyát cserélni (nem is lenne egyszerű, mert néhány MB-os a mérete).

    Nyilván egy 2GB-os flash memóriát nem tud 512k RAM-ban tárolni, hogy ne a flasht cseszegesse íráskor.
    De azt megteheti, hogy úgy működik mint a write cache memória: Olvasni a flash-ről olvas (vagy a RAM-ból ha változott már) de írni a RAM-ba ír. Így a RAM csak a változásokat tartalmazza, nem az egész filerendszert. Ha meg nagyon nagy mennyiségű adatot ír, akkor úgy sincs mit tenni, ki kell írni üzem közben is néha.

    "Hopp, itt egy kérdésem lenne: van olyan speciális pufferes modul bármilyen PLC-hez, ami annyit pufferel, hogy 2-3 SMS-t is el tudjon küldeni ilyenkor ?"

    Ezt így konkrétan nem tudom, de könnyen megoldható a dolog egy aksival. :]

  • Szia Bandi18!

    Szerintem kicsit pontosabban kellene meghatározni a feladatot, hogy érthető legyen.

    "Q1-Q4 kiménetek és ezeket sorban kellene villogtatni gombnyomásra timerrel illetve mind a 4-et egy bizonyos idő elteltével."

    Gombnyomásra, vagy timerrel (időre)? Vagy gombnyomás után időzítve?
    Egymás után pontosan mit jelent? Bekapcsol az egyik, majd a másik, harmadik, stb? Vagy bekapcsol az egyik, majd amikor a második, akkor ez első kikapcsol, majd bekapcsol a harmadik és a második ki, vagy hogy?
    Mind a 4 villogtatása hogyan értendő? Egyszerre felvillannak (ki be kapcsolnak)?

    Igen valóban lehet hogy így pontatlan sorry :). Szóval gombnyomásra elindul a program ami meghúz egy időzítőt elvileg. Lényeg hogy felvilan az első ég x mp-ig elalszik felvillan a 2. ég x mp-ig és így tovább. És Zelioban van egy olyan opció hogy megadhatunk idősávot amíg ezt csinálja (pontosan a nevét most nem tudom...) majd ha ez lejár akkor váltson át arra hogy mind a4 villog egyszerre. Pl a 6-20-ig terjedő időtartományban menjen az első ciklus majd ha eléri a 20 órát akkor váltson át arra hogy mind a 4 villog és így tovább.

    Remélem így már érthetőbb kicsit. És köszönöm hogy próbáltok segíteni .

  • Szevasz moseras!

    "Gondolom ez egy FLASH alapú eszköz, ha én ezt folyamatos naplózásra használnám, akkor ez nem fog behalni 100k-200k írás után ?"

    S7-nél alapból nincs kifejezetten olyan, hogy file rendszer.
    A háttértárat inkább memóriaként kezeli nem file-szerűen.
    A programot FLASH memóriában tárolja. Legalábbis az újabb típusok, a régebbiek háttértelepes RAM-ban, de most maradjunk a FLASH-es verziónál.
    Szerintem úgy megy, hogy amikor elindul a PLC, akkor mindent betölt a FLASH-ból RAM-ba (aminek nincs háttértelepes tápja) és üzem közben csak a RAM-ot használja. Abba írja az adatokat és abból is olvassa. Amikor elmegy atápfesz, akkor a RAM teljes tartalmát kiírja FLASH memóriába. Persze úgy, hogy a CPU értesül a tápfesz megszünéséről, de ő maga pufferről néhányszáz ms ideig még üzemel, amennyi idő alatt iztonságosan kírja a RAM tartalmat.
    Ha tényleg így van, akkor ebből az következik, hogy teljesen mindegy hogy programból milyen gyakorisággal írsz adatokat.

    "A másik kérdésem, hogy ha otthonról frissítem a PLC progiját (router-en VPN+dyndns beállítva), és mondjuk a feltöltés közepén beüt valami krakk, akkor mi lesz a PLC-vel ?"

    S7-nél ez úgy megy, hogy a feltöltés alatt lévő blokk semmilyen szerepet nem kap mindaddig, amíg a feltöltés teljes egészében és sikeresen be nem fejeződött. Amíg ez meg nem történik, a régi változat fut, ami feltöltés előtt is benne volt.
    Ezért ha a feltöltés megszakad vagy adathiba következik be, a feltöltött adatok nem jutnak szerephez.

    Szia Szirty

    "S7-nél alapból nincs kifejezetten olyan, hogy file rendszer."

    WAGO-ban van ilyen, de nem mindegyikben. 1.5M a 750-841-nél, de van CF-es változat is (max. 4GB). Azt hiszem a 8+3-at támogatja csak, de ez nem biztos. Itt tárolódik a PLC-hez írt program, az esetleges feltöltött WEBHMI (ha van ilyen, akkor html file-ok és java *.jar-ok), illetve ha valamit progiból ide mentesz a PLC működése közben, akkor az is. Van egy SysLibFile.Lib, benne open(), close(), seek(), delete(), meg minden egyéb FUNCTION-ban. És van erre épülő magasabb szintű FB (SaveVariable néven), megadsz neki egy változót, a változó méretét, Load vagy Save illetve a file nevét, és van 2 kimenete (error flag, és egy timestamp a file-ról). Ha beFTP-zek, akkor is ezeket látom. Azt hiszem, hogy könyvtárak nincsenek.

    "Persze úgy, hogy a CPU értesül a tápfesz megszünéséről, de ő maga pufferről néhányszáz ms ideig még üzemel, amennyi idő alatt iztonságosan kírja a RAM tartalmat."

    Igen, ez valószínű. Pl. most találtam: van ShutDown esemény, amihez POU hívást-t lehet rendelni. Ha nem lenne puffer, akkor ez nem lenne megvalósítható. Hopp, itt egy kérdésem lenne: van olyan speciális pufferes modul bármilyen PLC-hez, ami annyit pufferel, hogy 2-3 SMS-t is el tudjon küldeni ilyenkor ?

    "Ha tényleg így van, akkor ebből az következik, hogy teljesen mindegy hogy programból milyen gyakorisággal írsz adatokat"

    Megkérdezem a WAGO-t, remélem igen. Ha mégsem, akkor nem használom naplózásra. Bár gyanús, mert 1.5M a flash, 512k a program RAM és 256k az adat RAM mérete, itt nem tudja tárolni a teljes filerendszert.

    "Ezért ha a feltöltés megszakad vagy adathiba következik be, a feltöltött adatok nem jutnak szerephez."

    Ok.

    Köszi a segítséget.

    Imi.

  • Hellosztok

    Egy kis segítségre lenne szükségem. Itech tárgynév alatt PLC-t kell programoznunk illetve csak szimulálnunk. A Zelio Soft 2-őt használjuk, és problémám lenne egy feldattal. Lényege hogy adott Q1-Q4 kiménetek és ezeket sorban kellene villogtatni gombnyomásra timerrel illetve mind a 4-et egy bizonyos idő elteltével. Utóbbit sikerült megvalósítanom de a többivel küszködök. Ha valaki tudna segítnei azt megköszönném :)

    Üdv Bandi

    Szia.

    - készíts egy időzítőt, ami a kívánt ütemet adja
    - legyen 4 ÉS kapu, amiknek a kimenete megy Q1...Q4-re, egyik bemenetük az időzítőre, másik bemenetük pedig egy shiftregiszterként használt BYTE-os változó bitjeire (a shiftregisztert töltsd fel kezdőértékkel, mondjuk 1-el)
    - a gomb felfutó éleinél léptesd a shift regisztert (SHL, SHR)
    - ha végiglépett, akkor töltsd fel a kívánt kezdőértékkel újból

    Így a SHIFT_BIT(1) van, akkor az első lámpa villog, ha SHIFT_BIT(2), akkor a második, stb. Vagyis a kívánt ÉS kaput engedélyezed a SHIFT-el, a többi kimenete néma marad.

    Imi.

  • Szirty
    őstag

    Hellosztok

    Egy kis segítségre lenne szükségem. Itech tárgynév alatt PLC-t kell programoznunk illetve csak szimulálnunk. A Zelio Soft 2-őt használjuk, és problémám lenne egy feldattal. Lényege hogy adott Q1-Q4 kiménetek és ezeket sorban kellene villogtatni gombnyomásra timerrel illetve mind a 4-et egy bizonyos idő elteltével. Utóbbit sikerült megvalósítanom de a többivel küszködök. Ha valaki tudna segítnei azt megköszönném :)

    Üdv Bandi

    Szia Bandi18!

    Szerintem kicsit pontosabban kellene meghatározni a feladatot, hogy érthető legyen.

    "Q1-Q4 kiménetek és ezeket sorban kellene villogtatni gombnyomásra timerrel illetve mind a 4-et egy bizonyos idő elteltével."

    Gombnyomásra, vagy timerrel (időre)? Vagy gombnyomás után időzítve?
    Egymás után pontosan mit jelent? Bekapcsol az egyik, majd a másik, harmadik, stb? Vagy bekapcsol az egyik, majd amikor a második, akkor ez első kikapcsol, majd bekapcsol a harmadik és a második ki, vagy hogy?
    Mind a 4 villogtatása hogyan értendő? Egyszerre felvillannak (ki be kapcsolnak)?

  • Szirty
    őstag

    Sziasztok

    Használtátok e már a PLC-k filerendszerét naplózásra ?

    A példákban azt látom, hogy bizonyos változókat (egész struktúrákat) lementenek a filerendszerbe egy adott néven, majd PLC_START eseménykor visszaolvassák. Gondolom ez egy FLASH alapú eszköz, ha én ezt folyamatos naplózásra használnám, akkor ez nem fog behalni 100k-200k írás után ? Vagy ne használjam naplózásra ?

    A másik kérdésem, hogy ha otthonról frissítem a PLC progiját (router-en VPN+dyndns beállítva), és mondjuk a feltöltés közepén beüt valami krakk, akkor mi lesz a PLC-vel ? Timeout-ra fut, és újraindul a régi progival, vagy leáll az egész ?

    Erre sem találok utalást a pdf-ekben :(

    Köszi.

    Imi.

    Szevasz moseras!

    "Gondolom ez egy FLASH alapú eszköz, ha én ezt folyamatos naplózásra használnám, akkor ez nem fog behalni 100k-200k írás után ?"

    S7-nél alapból nincs kifejezetten olyan, hogy file rendszer.
    A háttértárat inkább memóriaként kezeli nem file-szerűen.
    A programot FLASH memóriában tárolja. Legalábbis az újabb típusok, a régebbiek háttértelepes RAM-ban, de most maradjunk a FLASH-es verziónál.
    Szerintem úgy megy, hogy amikor elindul a PLC, akkor mindent betölt a FLASH-ból RAM-ba (aminek nincs háttértelepes tápja) és üzem közben csak a RAM-ot használja. Abba írja az adatokat és abból is olvassa. Amikor elmegy atápfesz, akkor a RAM teljes tartalmát kiírja FLASH memóriába. Persze úgy, hogy a CPU értesül a tápfesz megszünéséről, de ő maga pufferről néhányszáz ms ideig még üzemel, amennyi idő alatt iztonságosan kírja a RAM tartalmat.
    Ha tényleg így van, akkor ebből az következik, hogy teljesen mindegy hogy programból milyen gyakorisággal írsz adatokat.

    "A másik kérdésem, hogy ha otthonról frissítem a PLC progiját (router-en VPN+dyndns beállítva), és mondjuk a feltöltés közepén beüt valami krakk, akkor mi lesz a PLC-vel ?"

    S7-nél ez úgy megy, hogy a feltöltés alatt lévő blokk semmilyen szerepet nem kap mindaddig, amíg a feltöltés teljes egészében és sikeresen be nem fejeződött. Amíg ez meg nem történik, a régi változat fut, ami feltöltés előtt is benne volt.
    Ezért ha a feltöltés megszakad vagy adathiba következik be, a feltöltött adatok nem jutnak szerephez.

  • Hellosztok

    Egy kis segítségre lenne szükségem. Itech tárgynév alatt PLC-t kell programoznunk illetve csak szimulálnunk. A Zelio Soft 2-őt használjuk, és problémám lenne egy feldattal. Lényege hogy adott Q1-Q4 kiménetek és ezeket sorban kellene villogtatni gombnyomásra timerrel illetve mind a 4-et egy bizonyos idő elteltével. Utóbbit sikerült megvalósítanom de a többivel küszködök. Ha valaki tudna segítnei azt megköszönném :)

    Üdv Bandi

  • Sziasztok

    Használtátok e már a PLC-k filerendszerét naplózásra ?

    A példákban azt látom, hogy bizonyos változókat (egész struktúrákat) lementenek a filerendszerbe egy adott néven, majd PLC_START eseménykor visszaolvassák. Gondolom ez egy FLASH alapú eszköz, ha én ezt folyamatos naplózásra használnám, akkor ez nem fog behalni 100k-200k írás után ? Vagy ne használjam naplózásra ?

    A másik kérdésem, hogy ha otthonról frissítem a PLC progiját (router-en VPN+dyndns beállítva), és mondjuk a feltöltés közepén beüt valami krakk, akkor mi lesz a PLC-vel ? Timeout-ra fut, és újraindul a régi progival, vagy leáll az egész ?

    Erre sem találok utalást a pdf-ekben :(

    Köszi.

    Imi.

  • Hali moseras!

    "Ez így jól hangzik, de mi van akkor, ha el kell indítanom valamit 17:40:28-kor, és az RTC-t olvasó taszk mondjuk 17:40:27 legvégén olvasott be értéket"

    Ha te végzed az idő bekövetkeztének a figyelését, akkor ezt a problémát elkerülheted, ha az idő összehasonlítását (beállított és az óra) nem egyenlőségre vizsgálod, hanem nagyobb relációra és erre teszel egy él figyelést.
    Vagyis ha az RTC-ből olvasott idő nagyobb mint a beállított, akkor bebillentesz egy bitet. Ezt a bitet figyeli a programod, hogy mikor változik 0-ról 1-re.
    Ennél csak arra kell figyelni, hogy ha állítják az RTC-t, átállás van téli nyári időszámításra, vagy a beállított időt állítják úgy, hogy az állítás következtében teljesül a feltétel, akkor is "jelezni" fog.

    Ha az idő figyelését a rendszerre bízod, akkor nyilván rajta múlik hogyan kezeli az ilyen esetet. Mint pl. S7-nél vannak timer interruptok (beállított időpontban meghív egy blokkot).

    "Ha van n darab taszkom, amik egy közös GLOBAL területen lévő változót írnak/olvasnak (mint pl. az előbb), akkor mi a megoldása annak, hogy az olvasó taszk csak akkor nyúljon bele, ha az író taszk már végzett az írással"

    Ez nagyon rendszerfüggő.
    De szerintem nem kell ezzel as problémával számolni, mivel a több taszk ellenére is csak egy dolgot képes elvégezni egy időben. Tehát amikor éppen ír, akkor biztos hogy nem fog olvasni, és viszont.
    Ha az írás/olvasás több adatot érint amely hosszabb idő és elvileg megszakítható, akkor csak onnan kapsz választ a kérdésedre ha megnézed az adott rendszer timing dolgait. S7-hez van ilyen, nem tudom wagohoz van-e. Ebben le van írva hogy minek mekkora a prioritása és mi mit képes félbeszakítani és mit nem.

    Szerintem két taszk nem egymástól teljesen függetlenül aszinkron módon fut.
    Nekem akkor volt ilyen jellegű problémám, amikor operátorpanellel kellett kommunikálni (PLC JOB-ok futtatása a panelen). De ott voltak szemafor jellegű jelzések, amivel lehett koordinálni nikor ki írjon.

    Szia Szirty!

    Mint pl. S7-nél vannak timer interruptok (beállított időpontban meghív egy blokkot).

    Ilyen itt is van, akkor ezt fogom használni. Csak azt nem értem, hogy akkor az example-ek miért nem ezzel oldják meg ?

    Köszi az ötleteket.

    Imi.

  • Hali moseras!

    "Ez így jól hangzik, de mi van akkor, ha el kell indítanom valamit 17:40:28-kor, és az RTC-t olvasó taszk mondjuk 17:40:27 legvégén olvasott be értéket"

    Ha te végzed az idő bekövetkeztének a figyelését, akkor ezt a problémát elkerülheted, ha az idő összehasonlítását (beállított és az óra) nem egyenlőségre vizsgálod, hanem nagyobb relációra és erre teszel egy él figyelést.
    Vagyis ha az RTC-ből olvasott idő nagyobb mint a beállított, akkor bebillentesz egy bitet. Ezt a bitet figyeli a programod, hogy mikor változik 0-ról 1-re.
    Ennél csak arra kell figyelni, hogy ha állítják az RTC-t, átállás van téli nyári időszámításra, vagy a beállított időt állítják úgy, hogy az állítás következtében teljesül a feltétel, akkor is "jelezni" fog.

    Ha az idő figyelését a rendszerre bízod, akkor nyilván rajta múlik hogyan kezeli az ilyen esetet. Mint pl. S7-nél vannak timer interruptok (beállított időpontban meghív egy blokkot).

    "Ha van n darab taszkom, amik egy közös GLOBAL területen lévő változót írnak/olvasnak (mint pl. az előbb), akkor mi a megoldása annak, hogy az olvasó taszk csak akkor nyúljon bele, ha az író taszk már végzett az írással"

    Ez nagyon rendszerfüggő.
    De szerintem nem kell ezzel as problémával számolni, mivel a több taszk ellenére is csak egy dolgot képes elvégezni egy időben. Tehát amikor éppen ír, akkor biztos hogy nem fog olvasni, és viszont.
    Ha az írás/olvasás több adatot érint amely hosszabb idő és elvileg megszakítható, akkor csak onnan kapsz választ a kérdésedre ha megnézed az adott rendszer timing dolgait. S7-hez van ilyen, nem tudom wagohoz van-e. Ebben le van írva hogy minek mekkora a prioritása és mi mit képes félbeszakítani és mit nem.

    Szerintem két taszk nem egymástól teljesen függetlenül aszinkron módon fut.
    Nekem akkor volt ilyen jellegű problémám, amikor operátorpanellel kellett kommunikálni (PLC JOB-ok futtatása a panelen). De ott voltak szemafor jellegű jelzések, amivel lehett koordinálni nikor ki írjon.

    Szia Szirty!

    "Vagyis ha az RTC-ből olvasott idő nagyobb mint a beállított, akkor bebillentesz egy bitet. Ezt a bitet figyeli a programod, hogy mikor változik 0-ról 1-re"

    Ez jó ötlet. Tehát akkor a probléma ezek szerint valós...
    Akkor fogom bekapcsolni, ha "valós_idő >= bekapcs_idő AND valós_idő < kikapcs_idő"

    "timing dolgait. S7-hez van ilyen, nem tudom wagohoz van-e."

    Nyomozok, de eddig nem találtam.

    "Ebben le van írva hogy minek mekkora a prioritása és mi mit képes félbeszakítani és mit nem."

    Igen, nyilván ez a kérdés. A demo-kban nem figyelnek erre a problémára. Arra gondoltam, hogy lehet, hogy a taszkok nem is szakíthatóak félbe. Így nem jelentkezne a probléma. Ha ez nem lenne megoldva, akkor biztos találtam volna rá utalást, hogy erre figyelni kell.

    Köszi.

    Imi.

  • And
    veterán

    Hali And!

    "Az alany egyébként egy C7-621-es volt, ezért a változó megtalálása sem ment olyan egyszerűen az 'ömlesztett' I/O-címek miatt"

    Ilyenkor legjobb a HW configból kiindulni. Ott látható melyik bemenetnek mi a címe.

    "Eredetileg valamilyen globális, már a bemenet konfigurációjánál megadható skálázásra gondoltam, de sajna úgy nem megy."

    Ilyet az Omron analóg modulok tudnak (pl.)
    Itt csak annyit lehet tenni, hogy beállítjuk a modul méréshatárát (0-5V, 0-10V, -10-+10V, stb)

    "Kicsit macerás volt így elsőre, bújni kellett a helpet, de végül sikerült."

    A következő gyorsabban megy majd :)

    (Szia! Próbáltam én a HW-konfigurációból kiindulni, de nem sok sikerrel. Ez C7-es, úgyhogy a hw-konfigban egyedül a 621-es CPU látszódik, egyetlen I/O-tömbbel. A ki- és bemenetek címe ugyanaz a bazinagy tartomány. Ennek nincsenek fizikai moduljai, mint pl. egy S7-300-nak, az összes I/O-ja integrált, ezért okozott problémát. Mondjuk szerencsére csak 4 analóg bemenete van ;).)

  • Szirty
    őstag

    Köszönöm a válaszod! A program több helyen hivatkozik az említett PIW-re, amely az érték megjelenítésén túl egy PID-szabályozásnak is az ellenőrzőjele. Ezért az utolsó javaslatodnak megfelelően létrehoztam egy FC-t, amelyik átskálázza a bemeneti értéket. Azzal valóban nem mentem volna sokra, ha csak a kijelzőn változik az érték. Az alany egyébként egy C7-621-es volt, ezért a változó megtalálása sem ment olyan egyszerűen az 'ömlesztett' I/O-címek miatt, de egy 4..20mA-es szimulátor segített ebben. Eredetileg valamilyen globális, már a bemenet konfigurációjánál megadható skálázásra gondoltam, de sajna úgy nem megy. Kicsit macerás volt így elsőre, bújni kellett a helpet, de végül sikerült. Kösz :R!

    Hali And!

    "Az alany egyébként egy C7-621-es volt, ezért a változó megtalálása sem ment olyan egyszerűen az 'ömlesztett' I/O-címek miatt"

    Ilyenkor legjobb a HW configból kiindulni. Ott látható melyik bemenetnek mi a címe.

    "Eredetileg valamilyen globális, már a bemenet konfigurációjánál megadható skálázásra gondoltam, de sajna úgy nem megy."

    Ilyet az Omron analóg modulok tudnak (pl.)
    Itt csak annyit lehet tenni, hogy beállítjuk a modul méréshatárát (0-5V, 0-10V, -10-+10V, stb)

    "Kicsit macerás volt így elsőre, bújni kellett a helpet, de végül sikerült."

    A következő gyorsabban megy majd :)

  • And
    veterán

    Helló And!

    "Magyarul van egy 4..20mA-es távadó, amelyik elromlott, és nem pont ugyanolyan méréstartományú eszközt tesznek a helyére, mert az eredetivel megegyező épp nincs kéznél."

    Természetesen megoldható, lényegében egyszerű szorzással és összeadással át lehet skálázni.
    De valószínűnek tartom, hogy az eredeti program is tartalmaz skálázást. Legalábbis ha van a rendszerben valami megjelenítő és a mért értéket kiírja, akkor mindenképpen.
    Én ezt a programrészt keresném és módosítanám megfelelően.

    Én az analóg jelek kezelését mindig úgy csinálom meg, hogy a program módosítása nélkül egyszerűen beállításokkal módosítható legyen a skálázás. persze ha van HMI a rendszerben.
    Ha az említett progra nem így van megcsinálva, akkor meg kell keresni benne hogyan kezeli a eolvasott értéket.

    Persze azt is meg lehet csinálni, hogy az eredetileg beolvasott értéket skálázva adjuk át neki. Ezt valószínűleg egyszerűbb megcsinálni, mert így nem kell nagyon belenyúlni az eredeti programba, csak a PIW olvasását kell átirányítani egy változóra, amit egy általunk írt blokk szolgáltat...

    Ezen a linken van ilyesmiről szó. Az FC109 skáláz. (de ha jól emlékszek, akkor ennek REAL a kimenete).

    Köszönöm a válaszod! A program több helyen hivatkozik az említett PIW-re, amely az érték megjelenítésén túl egy PID-szabályozásnak is az ellenőrzőjele. Ezért az utolsó javaslatodnak megfelelően létrehoztam egy FC-t, amelyik átskálázza a bemeneti értéket. Azzal valóban nem mentem volna sokra, ha csak a kijelzőn változik az érték. Az alany egyébként egy C7-621-es volt, ezért a változó megtalálása sem ment olyan egyszerűen az 'ömlesztett' I/O-címek miatt, de egy 4..20mA-es szimulátor segített ebben. Eredetileg valamilyen globális, már a bemenet konfigurációjánál megadható skálázásra gondoltam, de sajna úgy nem megy. Kicsit macerás volt így elsőre, bújni kellett a helpet, de végül sikerült. Kösz :R!

  • Szirty
    őstag

    Sziasztok

    Újabb kérdéseim lennének PLC-vel kapcsolatban:

    1.Van egy PLC (WAGO), van benne RTC. A gyártó azt javasolja, hogy az RTC-t olvasó részt külön programba tegyük, azt szervezzük külön taszkba, és ezt T#1s0ms időnként alacsony prioritással futtassuk meg. Az RTC értékét pedig ez a taszk tegye le egy GLOBAL DT-be. Ez így jól hangzik, de mi van akkor, ha el kell indítanom valamit 17:40:28-kor, és az RTC-t olvasó taszk mondjuk 17:40:27 legvégén olvasott be értéket, és legközelebb pedig csak 17:40:29 legelején (ez elvileg megtörténhet, hogy mondjuk 1002 msec-enként kerül sorra, hiszen az ütemező több nagyobb prioritással futó taszkot ütemezett be). Szóval ilyenkor kimaradt az én várt másodpercem !? Mi ennek a korrekt megoldása ?

    2. Ha van n darab taszkom, amik egy közös GLOBAL területen lévő változót írnak/olvasnak (mint pl. az előbb), akkor mi a megoldása annak, hogy az olvasó taszk csak akkor nyúljon bele, ha az író taszk már végzett az írással (illetve fordítva, addig ne írjon bele, amíg a másik ki nem olvasta) ? Tehát semaphor(), mutex(). lock() stb-re gondolok...
    Kell e ilyen ide ?

    Köszi.

    Imi.

    Hali moseras!

    "Ez így jól hangzik, de mi van akkor, ha el kell indítanom valamit 17:40:28-kor, és az RTC-t olvasó taszk mondjuk 17:40:27 legvégén olvasott be értéket"

    Ha te végzed az idő bekövetkeztének a figyelését, akkor ezt a problémát elkerülheted, ha az idő összehasonlítását (beállított és az óra) nem egyenlőségre vizsgálod, hanem nagyobb relációra és erre teszel egy él figyelést.
    Vagyis ha az RTC-ből olvasott idő nagyobb mint a beállított, akkor bebillentesz egy bitet. Ezt a bitet figyeli a programod, hogy mikor változik 0-ról 1-re.
    Ennél csak arra kell figyelni, hogy ha állítják az RTC-t, átállás van téli nyári időszámításra, vagy a beállított időt állítják úgy, hogy az állítás következtében teljesül a feltétel, akkor is "jelezni" fog.

    Ha az idő figyelését a rendszerre bízod, akkor nyilván rajta múlik hogyan kezeli az ilyen esetet. Mint pl. S7-nél vannak timer interruptok (beállított időpontban meghív egy blokkot).

    "Ha van n darab taszkom, amik egy közös GLOBAL területen lévő változót írnak/olvasnak (mint pl. az előbb), akkor mi a megoldása annak, hogy az olvasó taszk csak akkor nyúljon bele, ha az író taszk már végzett az írással"

    Ez nagyon rendszerfüggő.
    De szerintem nem kell ezzel as problémával számolni, mivel a több taszk ellenére is csak egy dolgot képes elvégezni egy időben. Tehát amikor éppen ír, akkor biztos hogy nem fog olvasni, és viszont.
    Ha az írás/olvasás több adatot érint amely hosszabb idő és elvileg megszakítható, akkor csak onnan kapsz választ a kérdésedre ha megnézed az adott rendszer timing dolgait. S7-hez van ilyen, nem tudom wagohoz van-e. Ebben le van írva hogy minek mekkora a prioritása és mi mit képes félbeszakítani és mit nem.

    Szerintem két taszk nem egymástól teljesen függetlenül aszinkron módon fut.
    Nekem akkor volt ilyen jellegű problémám, amikor operátorpanellel kellett kommunikálni (PLC JOB-ok futtatása a panelen). De ott voltak szemafor jellegű jelzések, amivel lehett koordinálni nikor ki írjon.

  • Sziasztok

    Meg lehet e oldani a direkt címzésű változók tömb-be rakását ?

    Tehát e helyett

    Valtozo AT %QX0.0: BOOL;

    valami ilyent:

    ValtozoTomb: ARRAY [1..8] OF BOOL :=
    AT %QX0.0,
    AT %QX0.1,
    AT %QX0.2,
    AT %QX0.3,
    AT %QX0.4,
    AT %QX0.5,
    AT %QX0.6,
    AT %QX0.7;

    Persze ezt a fordító nem fogadja el, de a probléma szemléltetésére jó.

    Köszi.

    Imi.

  • Sziasztok

    Újabb kérdéseim lennének PLC-vel kapcsolatban:

    1.Van egy PLC (WAGO), van benne RTC. A gyártó azt javasolja, hogy az RTC-t olvasó részt külön programba tegyük, azt szervezzük külön taszkba, és ezt T#1s0ms időnként alacsony prioritással futtassuk meg. Az RTC értékét pedig ez a taszk tegye le egy GLOBAL DT-be. Ez így jól hangzik, de mi van akkor, ha el kell indítanom valamit 17:40:28-kor, és az RTC-t olvasó taszk mondjuk 17:40:27 legvégén olvasott be értéket, és legközelebb pedig csak 17:40:29 legelején (ez elvileg megtörténhet, hogy mondjuk 1002 msec-enként kerül sorra, hiszen az ütemező több nagyobb prioritással futó taszkot ütemezett be). Szóval ilyenkor kimaradt az én várt másodpercem !? Mi ennek a korrekt megoldása ?

    2. Ha van n darab taszkom, amik egy közös GLOBAL területen lévő változót írnak/olvasnak (mint pl. az előbb), akkor mi a megoldása annak, hogy az olvasó taszk csak akkor nyúljon bele, ha az író taszk már végzett az írással (illetve fordítva, addig ne írjon bele, amíg a másik ki nem olvasta) ? Tehát semaphor(), mutex(). lock() stb-re gondolok...
    Kell e ilyen ide ?

    Köszi.

    Imi.

  • Szirty
    őstag

    Üdv! Szintén Siemens PLC-s kérdés: megoldható-e, hogy az egyik analóg bemenetet átskálázzuk? Magyarul van egy 4..20mA-es távadó, amelyik elromlott, és nem pont ugyanolyan méréstartományú eszközt tesznek a helyére, mert az eredetivel megegyező épp nincs kéznél. Ettől pedig a 20mA-es jel nyilván más értelmezést kap (a tartomány alja változatlan marad). Hogyan lehet ezt egyszerűen megváltoztatni, ha egyáltalán? Az eszközeink adottak a Siemens programjának módosításhoz, de sajnos ez egy komplett berendezés része, mi pedig hivatalból más PLC-vel szoktunk dolgozni (annál viszonylag egyszerűen meg tudnánk oldani a dolgot).

    Helló And!

    "Magyarul van egy 4..20mA-es távadó, amelyik elromlott, és nem pont ugyanolyan méréstartományú eszközt tesznek a helyére, mert az eredetivel megegyező épp nincs kéznél."

    Természetesen megoldható, lényegében egyszerű szorzással és összeadással át lehet skálázni.
    De valószínűnek tartom, hogy az eredeti program is tartalmaz skálázást. Legalábbis ha van a rendszerben valami megjelenítő és a mért értéket kiírja, akkor mindenképpen.
    Én ezt a programrészt keresném és módosítanám megfelelően.

    Én az analóg jelek kezelését mindig úgy csinálom meg, hogy a program módosítása nélkül egyszerűen beállításokkal módosítható legyen a skálázás. persze ha van HMI a rendszerben.
    Ha az említett progra nem így van megcsinálva, akkor meg kell keresni benne hogyan kezeli a eolvasott értéket.

    Persze azt is meg lehet csinálni, hogy az eredetileg beolvasott értéket skálázva adjuk át neki. Ezt valószínűleg egyszerűbb megcsinálni, mert így nem kell nagyon belenyúlni az eredeti programba, csak a PIW olvasását kell átirányítani egy változóra, amit egy általunk írt blokk szolgáltat...

    Ezen a linken van ilyesmiről szó. Az FC109 skáláz. (de ha jól emlékszek, akkor ennek REAL a kimenete).

  • And
    veterán

    Üdv! Szintén Siemens PLC-s kérdés: megoldható-e, hogy az egyik analóg bemenetet átskálázzuk? Magyarul van egy 4..20mA-es távadó, amelyik elromlott, és nem pont ugyanolyan méréstartományú eszközt tesznek a helyére, mert az eredetivel megegyező épp nincs kéznél. Ettől pedig a 20mA-es jel nyilván más értelmezést kap (a tartomány alja változatlan marad). Hogyan lehet ezt egyszerűen megváltoztatni, ha egyáltalán? Az eszközeink adottak a Siemens programjának módosításhoz, de sajnos ez egy komplett berendezés része, mi pedig hivatalból más PLC-vel szoktunk dolgozni (annál viszonylag egyszerűen meg tudnánk oldani a dolgot).

  • Szirty
    őstag

    Szirty!

    Ha szeretnék egy S7-es PLC-t programozni, vagyis elkezdeni, megtanulni, a programozói szoftvert hogyan érhetem el?Simatic manager a neve?Letölthető valahonnan?Vagy meg kell vásárolni a Siemenstől?

    Köszi..

    Helló Pato7!

    A szoftver neve Step 7 (nem Step 7 MicroWin!)
    Sajnos nem tudok konkrét linket adni, de létezik hozzá 30 napos licensz.
    Elvileg ez való arra hogy kipróbáld.

    Illetve van olyan is, hogy Step7 Lite, de arról meg nem tudom milyen licensz van hozzá.

  • Pato7
    csendes tag

    Szirty!

    Ha szeretnék egy S7-es PLC-t programozni, vagyis elkezdeni, megtanulni, a programozói szoftvert hogyan érhetem el?Simatic manager a neve?Letölthető valahonnan?Vagy meg kell vásárolni a Siemenstől?

    Köszi..

  • Pato7
    csendes tag

    Szia Szirty!

    Ennek a kábelnek a megépítéséről tudnál nekem valamilyen információt adni?

    Köszönöm. Üdv!!

    Szia!
    Nekem van egy ilyen kábelem, és még eladó is!
    Ha érdekel, árban megegyezünk!

  • Szirty
    őstag

    Köszi szépen a segítséget!
    Lelkesen próbálkozok :)
    Nem tudod hogy hol tudnék magyar nyelven találni alkatrész leírásokat? pl omron xy érzékelő vagy munkahenger, frekvenciaváltó. Esetleg FARA plc magyar nyelvű leírás, vagy a hozzá tartozó WINFPST program ismertetése :)
    Köszi előre is!

    Helló Fary86!

    Nem tudod hogy hol tudnék magyar nyelven találni alkatrész leírásokat? pl omron xy érzékelő vagy munkahenger, frekvenciaváltó.

    Danfoss FC300 frekvenciaváltó (magyar)
    Danfoss VLT5000 frekvenciaváltó (magyar)
    Omron CQM1H PLC (magyar)
    A Siemens S7-300 programozás alapjai (magyar)
    Mindenféle Omron doksik
    Siemens S7-200 PLC általános ismertető (magyar)
    Siemens S7-200 PLC részletes ismertető (magyar)

    "Esetleg FARA plc magyar nyelvű leírás"

    Ilyet sajnos nem tudok.

  • Szirty
    őstag

    Köszi mégegyszer.
    Kipróbáltam a openoffice Draw-t, de nagyon nehézkes. Azt hittem van valami spéci program, ami még a programot is legenerálja. :)
    Nem tudom, hogy hogyan szokták használni, de ha egy dolognak két irányba is tudnia kell mozogni, akkor ahhoz nem elég egy beavatkozó szerv ki- és bekapcsolása (gondolom a Set Y1 jelenti a beavatkozó szerv elindítását és a Rset Y1 pedig a kikapcsolását). sztem kellene a Valmi1-hez egy Y11 és Y12 beavatkozó szerv, aminek az előremozgását az Y11, a hátramozgását meg az Y12 végezné. Persze gond adódik ha mind a két szerv Set állapotban van.
    Mi a szokás? Milyen jelölésmódot alkalmaznak ilyen esetekben?
    Igérem nem zargatlak többet :)

    Hali!

    "Kipróbáltam a openoffice Draw-t, de nagyon nehézkes."

    Szerintem nagyon hasznos. De tény, hogy ez nem az a program ami helyetted rajzol. Ez az a program, amivel te rajzolsz.

    "sztem kellene a Valmi1-hez egy Y11 és Y12 beavatkozó szerv, aminek az előremozgását az Y11, a hátramozgását meg az Y12 végezné. Persze gond adódik ha mind a két szerv Set állapotban van."

    Jól gondolod.
    Van pár "ökölszabály" amikor ilyen két irányú mozgást kell vezérelni.
    - Keresztbe kell reteszelni az irány kimeneteket, ami megakadályozza, hogy egyszerre két irány legyen aktív
    - Nem használunk R/S tárolót ilyen kimeneteknél (max a közvetett vezérlésükhöz)

    "Milyen jelölésmódot alkalmaznak ilyen esetekben?"

    Hát a kérdésre nehéz egyértelműen válaszolni. Alapvetően a PLC memóriaterületeinek jelölése szerepel ott. Kimenet gyakran Q, bemenet általában I, stb.
    De lehetséges soknál a szimbolikus címzés is. Ennél a felhasználó adhatja meg a szimbólum nevet és ezt lehet odaírni. Szimbólumnévnek meg kézenfekvő a berendezés elektromos tervdoksijában szereplő tervjeleket használni. Pl. szelepek: Y, motorkapcsolók KM, Relék KA, visszajelzők H, stb, stb. (már ha kól értettem a kérdést)...

  • Fary86
    csendes tag

    Köszi szépen a segítséget!
    Lelkesen próbálkozok :)
    Nem tudod hogy hol tudnék magyar nyelven találni alkatrész leírásokat? pl omron xy érzékelő vagy munkahenger, frekvenciaváltó. Esetleg FARA plc magyar nyelvű leírás, vagy a hozzá tartozó WINFPST program ismertetése :)
    Köszi előre is!

  • akoel
    csendes tag

    Helló akoel!

    "Mivel tudtál ilyen ábrákat csinálni?"

    OpenOffice draw-al készítettem az ábrákat. Szerintem kiváló ilyesmire. Ebben a cikkben lévő diagramok és ábrák is azzal készültek (kivéve a programrészlet screenshotok persze).

    "Légyszi magyarázd el, hogy mi az Y1, Y2 és az F"

    Hát többet írtam volna ha többet sikerül kihámoznom belőle.
    Az ábrák azért ugyanazok, mert a te leírásod alapján készültek. És beletettem még a programban lévő változókat Y1, Y2 és az F. Szerintem az a létradiagram nem azt csinálja, mint amit az idődiagramok leírnak. Mint ha hiányozna a fele.
    Az Y1, Y2 és az F nyilván a beavatkozók lennének, tehát amik mozgásra késztetik a "valamiket".

    Köszi mégegyszer.
    Kipróbáltam a openoffice Draw-t, de nagyon nehézkes. Azt hittem van valami spéci program, ami még a programot is legenerálja. :)
    Nem tudom, hogy hogyan szokták használni, de ha egy dolognak két irányba is tudnia kell mozogni, akkor ahhoz nem elég egy beavatkozó szerv ki- és bekapcsolása (gondolom a Set Y1 jelenti a beavatkozó szerv elindítását és a Rset Y1 pedig a kikapcsolását). sztem kellene a Valmi1-hez egy Y11 és Y12 beavatkozó szerv, aminek az előremozgását az Y11, a hátramozgását meg az Y12 végezné. Persze gond adódik ha mind a két szerv Set állapotban van.
    Mi a szokás? Milyen jelölésmódot alkalmaznak ilyen esetekben?
    Igérem nem zargatlak többet :)

  • Szirty
    őstag

    Szirty
    Köszi a gyors reagálásért.
    Mivel tudtál ilyen ábrákat csinálni?
    Szóval, mint mondtam nem az enyém a jegyzet hanem a hugomé, akit ki kellene okosítanom. De összesen ez a jegyzet, amivel információt kaphattam. Nem állítom, hogy tökéletesen rajzolta le a táblán lévő dolgokat. De mondjuk az általd gyártott diagramok, ha jól látom alapvetően csak az előre és hátra rajzokban különbözik, na meg a késleletetésekben.
    Légyszi magyarázd el, hogy mi az Y1, Y2 és az F

    Azt mondod, hogy a program nem azt csinálja, amit én gondoltam, hogy csinál. Amit én gondoltam, azt a diagramok alapján képzeltem csak el. (Ha ez alapján másként van, légyszives javíts ki). Akkor ezek szerint a diagram és a létradiagram nem ugyanazt mutatják?

    Helló akoel!

    "Mivel tudtál ilyen ábrákat csinálni?"

    OpenOffice draw-al készítettem az ábrákat. Szerintem kiváló ilyesmire. Ebben a cikkben lévő diagramok és ábrák is azzal készültek (kivéve a programrészlet screenshotok persze).

    "Légyszi magyarázd el, hogy mi az Y1, Y2 és az F"

    Hát többet írtam volna ha többet sikerül kihámoznom belőle.
    Az ábrák azért ugyanazok, mert a te leírásod alapján készültek. És beletettem még a programban lévő változókat Y1, Y2 és az F. Szerintem az a létradiagram nem azt csinálja, mint amit az idődiagramok leírnak. Mint ha hiányozna a fele.
    Az Y1, Y2 és az F nyilván a beavatkozók lennének, tehát amik mozgásra késztetik a "valamiket".

  • akoel
    csendes tag

    Helló akoel!

    Szerintem valami keveredés van.
    A leírásodból valami ilyesmi idődiagram jön ki:

    A kéziraton lévő programrészlet azonban ezt nem tudja megcsinálni szerintem...

    Szirty
    Köszi a gyors reagálásért.
    Mivel tudtál ilyen ábrákat csinálni?
    Szóval, mint mondtam nem az enyém a jegyzet hanem a hugomé, akit ki kellene okosítanom. De összesen ez a jegyzet, amivel információt kaphattam. Nem állítom, hogy tökéletesen rajzolta le a táblán lévő dolgokat. De mondjuk az általd gyártott diagramok, ha jól látom alapvetően csak az előre és hátra rajzokban különbözik, na meg a késleletetésekben.
    Légyszi magyarázd el, hogy mi az Y1, Y2 és az F

    Azt mondod, hogy a program nem azt csinálja, amit én gondoltam, hogy csinál. Amit én gondoltam, azt a diagramok alapján képzeltem csak el. (Ha ez alapján másként van, légyszives javíts ki). Akkor ezek szerint a diagram és a létradiagram nem ugyanazt mutatják?

  • Szirty
    őstag

    Helló sziasztok.
    Segítséget szeretnék tőletek kérni! Szakdolgozat írásba vagyok, és nagyon elakadtam. Az a problémám hogy a témám nem valami kirobbanóan érdekes dolog, de sajnos mikor leadtam arra még nem gondoltam hogy majd nem tudok róla mit írni, csak arra hogy ezt a programot talán még én is meg tudom csinálni. Egy SAMSUNG FARA F700 as PLC-vel vezérlünk, egy gyártósorvégi lehordót, ami pozícióba állatja a dobozolt TV-ket úgy, hogy azok egymással szemben helyezkedjenek el négyesével a targonca előtt. Na most nekem az lenne a kérésem, hogy adjatok nekem ötleteket mégis miről lehetne összeírni 60.000 karaktert ezzel kapcsolatban. Nagyon tudnék örülni, hasonló témával, vagy bármilyen FARA plc-vel foglalkozó írásnak, esetleg szakdolgozatnak. Minden segítséget előre is köszönök szépen!

    Helló Fary86!

    "Na most nekem az lenne a kérésem, hogy adjatok nekem ötleteket mégis miről lehetne összeírni 60.000 karaktert ezzel kapcsolatban."

    Szerintem kisebb képet kéne berakni, mert így csak kb. a fele lesz látható...
    Szóval szerintem le kell írni a berendezést. Mi a feladata, milyen részekből áll. Hol milyen motorok, beavatkozó szervek, érzékrelők vannak, azoknak mi a feladata.
    le kell írni a program működését, A program mikor milyen helyzetben mit tesz. Ha esetleg alternatív működésmódok vannak, akkor azokat is.
    Kell egy ki/bemeneti lista, hogy a PLC melyik kimenetére és bemenetére mi van kötve. Ezeket az itt is mellékelt rajzzal alá lehet támasztani.
    Leírni a kezelőszerveket és azok funkcióit. Milyen lehetőségeket biztosít a kezelő számára a berendezés, hogyan kell kezelni.
    Ha a berendezésben van valami különlegesség (pl. különleges működésmód, esteleg egy frekvenciaváltós hajtás) akkor arra külön ki lehet térni.
    A programlista, gazdagon kommentezve, magyarázva hogy mi miért ban és mit csinál benne.
    Ilyesmivel össze lehet hozni a kívánt terjedelmet.

  • Fary86
    csendes tag

    Helló sziasztok.
    Segítséget szeretnék tőletek kérni! Szakdolgozat írásba vagyok, és nagyon elakadtam. Az a problémám hogy a témám nem valami kirobbanóan érdekes dolog, de sajnos mikor leadtam arra még nem gondoltam hogy majd nem tudok róla mit írni, csak arra hogy ezt a programot talán még én is meg tudom csinálni. Egy SAMSUNG FARA F700 as PLC-vel vezérlünk, egy gyártósorvégi lehordót, ami pozícióba állatja a dobozolt TV-ket úgy, hogy azok egymással szemben helyezkedjenek el négyesével a targonca előtt. Na most nekem az lenne a kérésem, hogy adjatok nekem ötleteket mégis miről lehetne összeírni 60.000 karaktert ezzel kapcsolatban. Nagyon tudnék örülni, hasonló témával, vagy bármilyen FARA plc-vel foglalkozó írásnak, esetleg szakdolgozatnak. Minden segítséget előre is köszönök szépen!

  • Szirty
    őstag

    Sziasztok
    Van egy házifeladatom Omron plc-re.
    Nem kell megijedni, nem mással akarom elkészíttetni, csak segítség kellene megértetni a dolgokat? Mellékeltem egy konzultációs feladatot (nem az enyém).
    Szóval az első három grafikon adott, a tobbit nekem kell megrajzolni.
    Azt gondolom, hogy az elvet értem, de lehet, hogy nem:
    -Van egy start jel ST, aminek a hatására valmi1 elmozdul, ezért az s1 véghelyzet érzékelő kikapcsol.
    -Amikor a valami1 elér egy pontot, az s2 végálláskapcsoló bekapcsol, a valmi1 megáll, elindul a valami2 és az s3 végálláskapcsoló kikapcsol.
    -Amikor valami2 elérte az s4 végálláskapcsolót, akkor az bekapcsol és a valami2 iránya megfordul.
    -Amikor végül a valami2 visszatér a kiindulási pontra, az s3 végálláskapcsoló bekapcsol, a valami2 megáll, az s2 kikapcsol és a valami1 elindul visszafelé.
    -Amikor a valami1 elérkezik a kiindulási pontra, akkor az s1 bekapcsol és a valami1 megáll.

    Remélem, hogy jól értelmeztem a rajzot.

    Namost, kérdéseim:
    -miért van az s2s3 jel külön ábrázolva?
    -mit jelent az F diagram?
    -Nem tudom hogyan jelöli a Set-Reset táblában és a létradiagramban a megállást és az irányváltást, mit jelent az Y1 és Y2

    előre is köszi a segítséget

    Helló akoel!

    Szerintem valami keveredés van.
    A leírásodból valami ilyesmi idődiagram jön ki:

    A kéziraton lévő programrészlet azonban ezt nem tudja megcsinálni szerintem...

  • akoel
    csendes tag

    Sziasztok
    Van egy házifeladatom Omron plc-re.
    Nem kell megijedni, nem mással akarom elkészíttetni, csak segítség kellene megértetni a dolgokat? Mellékeltem egy konzultációs feladatot (nem az enyém).
    Szóval az első három grafikon adott, a tobbit nekem kell megrajzolni.
    Azt gondolom, hogy az elvet értem, de lehet, hogy nem:
    -Van egy start jel ST, aminek a hatására valmi1 elmozdul, ezért az s1 véghelyzet érzékelő kikapcsol.
    -Amikor a valami1 elér egy pontot, az s2 végálláskapcsoló bekapcsol, a valmi1 megáll, elindul a valami2 és az s3 végálláskapcsoló kikapcsol.
    -Amikor valami2 elérte az s4 végálláskapcsolót, akkor az bekapcsol és a valami2 iránya megfordul.
    -Amikor végül a valami2 visszatér a kiindulási pontra, az s3 végálláskapcsoló bekapcsol, a valami2 megáll, az s2 kikapcsol és a valami1 elindul visszafelé.
    -Amikor a valami1 elérkezik a kiindulási pontra, akkor az s1 bekapcsol és a valami1 megáll.

    Remélem, hogy jól értelmeztem a rajzot.

    Namost, kérdéseim:
    -miért van az s2s3 jel külön ábrázolva?
    -mit jelent az F diagram?
    -Nem tudom hogyan jelöli a Set-Reset táblában és a létradiagramban a megállást és az irányváltást, mit jelent az Y1 és Y2

    előre is köszi a segítséget

  • bazsi1219
    csendes tag

    sziasztok!

    én plc-ből írom a szakdolgozatomat.van olyan aki tart ebből különórát illetve tud ebben segíteni? a választ előre is köszönöm!

  • Szirty
    őstag

    Szia.

    Köszi.

    >fizikai bemenetet kell olvasni (erre külön módszer van ugye)

    Remélem, még ilyennel nem találkoztam. Ha pl. egy %IX4.0-át írok, akkor a 64.-ik bitre hivatkozik, de mindig a process image-ben. Hogy direktben hogy lehet portot olvasni, azt még nem tudom.

    Imi.

    Hali moseras!

    "Hogy direktben hogy lehet portot olvasni, azt még nem tudom."

    Az teljesen típusfüggő!
    Rendszerint speciális utasítás vagy speciális memóriaterület elérésével lehetséges (esetleg sehogy némyelyik típusnál).

    Omron CS1 esetén pl. IO REFRESH (IORF) avagy FUN(097)
    S7-300/400-nál PIW olvasás

  • Hali!

    "Lehetnek független taszkok, akkor abba kell a "kritikus" bemenetem beolvasását belerakni."

    Csak arra kell vigyázni, hogy ilyenkor a fizikai bemenetet kell olvasni (erre külön módszer van ugye), mert a hagyományos input olvasás nem a fizikai bemenetet olvassa, hanem a "process image" táblát, ami akkor is csak normál PLC ciklusonként frissül, ha egy bemenetet 10 gyorsabban olvasunk (hagyományosan).

    Szia.

    Köszi.

    >fizikai bemenetet kell olvasni (erre külön módszer van ugye)

    Remélem, még ilyennel nem találkoztam. Ha pl. egy %IX4.0-át írok, akkor a 64.-ik bitre hivatkozik, de mindig a process image-ben. Hogy direktben hogy lehet portot olvasni, azt még nem tudom.

    Imi.

  • Szirty
    őstag

    Szia Szirty!
    Gondoltam hogy ezzel van a probléma. Sajnos nem nagyon értem mi az a PT Notify Area és a PT Control Area. Hiába olvasom a leírást :( Mit jelentenek ezel pontosan? Hogy kell beállítani ezeket a helyes működéshez?
    Köszi a segítséget!!!

    Hali arita!

    Nem tudom mivel konfigurálod, én még NT support tool-t használtam.

    "Sajnos nem nagyon értem mi az a PT Notify Area és a PT Control Area. Hiába olvasom a leírást :( Mit jelentenek ezel pontosan?"

    Nos mindkettő egy memóriaterület a PLC-ben, aminek a kezdőcímét az NT configjában be kell állítani.
    A PT status Control area 4 word méretű. Segítségével a PLC-ből a kijelzőt vezérelheted:
    Az egyik word arra szolgál, hogy a PLC-ből átválts egy megadott számú képernyőre.
    A PT status Notify Area word-jeit a terminál írja. Pl. megjelenik ott hogy éppen hanyas kép van kijelezve, megnyomtak-e nyomógombot, történt-e adatbevitel, stb.

    A leírását ebben a doksiban találod: NT reference manual
    A 64. oldalon (a PDF belső oldalszáma alapján ez az 52. oldal).

  • arita
    csendes tag

    Szia Szirty!
    Gondoltam hogy ezzel van a probléma. Sajnos nem nagyon értem mi az a PT Notify Area és a PT Control Area. Hiába olvasom a leírást :( Mit jelentenek ezel pontosan? Hogy kell beállítani ezeket a helyes működéshez?
    Köszi a segítséget!!!

  • Szirty
    őstag

    Szia.

    Lehetnek független taszkok, akkor abba kell a "kritikus" bemenetem beolvasását belerakni. Annak megadom, hogy pl. 10msec, akkor az a másik általános-tól függetlenül 10msec-ként lefut.

    Köszi.

    Imi.

    Hali!

    "Lehetnek független taszkok, akkor abba kell a "kritikus" bemenetem beolvasását belerakni."

    Csak arra kell vigyázni, hogy ilyenkor a fizikai bemenetet kell olvasni (erre külön módszer van ugye), mert a hagyományos input olvasás nem a fizikai bemenetet olvassa, hanem a "process image" táblát, ami akkor is csak normál PLC ciklusonként frissül, ha egy bemenetet 10 gyorsabban olvasunk (hagyományosan).

  • Szirty
    őstag

    Sziasztok!
    Egy Omron SRM1 típusú PLCre írtam programot, amihez HMI felületet kell készítenem egy NT30 típusú PT-vel. A bajom az, hogy amit rátöltöm a programokat a cuccokra és összedugom a PLC-t és az NT30-at, egy pillanatra megjelenik az általam készített kép, de aztán el is tűnik. :W Bármit csinálok nem jön elő :) A jó ebben az, hogy a múlt héten még működött és nem módosítottam semmit azóta. CQM1-el nem megy el a kép. Mi lehet ennek az oka?

    Helló arita!

    "A bajom az, hogy amit rátöltöm a programokat a cuccokra és összedugom a PLC-t és az NT30-at, egy pillanatra megjelenik az általam készített kép, de aztán el is tűnik."

    Ilyet akkor csinál az NT30, ha a start screen ugyan jól van beállítva (ezért az meg is jelenik egy pillanatra) de a PT Control area Screen number byte (vagy word, már nem emlékszem) egy olyan képre váltja át, ami nem létezik (vagy az említett byte/word tartalma nulla).

  • Szia,
    Meg kell próbálni a bemenetet frissíteni sűrűbben.

    PL. siemens-nél OB35-ben perifériálisan ( L PIW0 ) meghívod az aktuális bájtot, wordöt az OB35 ciklusidejének megfelelően. Ha az OB35 ciklus ideje 10ms akkor ennyi időnként "számlálhatsz" az aktuális bemenettel.

    Azt meg kell nézni, hogy a Wago –nak van-e ilyen lehetősége.

    Szia.

    Lehetnek független taszkok, akkor abba kell a "kritikus" bemenetem beolvasását belerakni. Annak megadom, hogy pl. 10msec, akkor az a másik általános-tól függetlenül 10msec-ként lefut.

    Köszi.

    Imi.

  • arita
    csendes tag

    Sziasztok!
    Egy Omron SRM1 típusú PLCre írtam programot, amihez HMI felületet kell készítenem egy NT30 típusú PT-vel. A bajom az, hogy amit rátöltöm a programokat a cuccokra és összedugom a PLC-t és az NT30-at, egy pillanatra megjelenik az általam készített kép, de aztán el is tűnik. :W Bármit csinálok nem jön elő :) A jó ebben az, hogy a múlt héten még működött és nem módosítottam semmit azóta. CQM1-el nem megy el a kép. Mi lehet ennek az oka?

  • Pelmo
    csendes tag

    Üdv Mindenkinek!

    Omron cpm1- hez adatkábelt, vagy bármilyen elkészítési információt keresnék.

    Köszönöm!

    Sziasztok!

    Mint szakmabeli ajánlom nektek ezt az oldalt:
    [link]
    Itt sok "okossság" van fent. Az ékes orosz nyelvtől ne ijedj meg elég ha a képet megnézed!
    De fel is teheted itt a kérdésed biztos segítenek orosz testvéreink:)
    Laci

  • Szirty
    őstag

    Szia Szirty!

    Ennek a kábelnek a megépítéséről tudnál nekem valamilyen információt adni?

    Köszönöm. Üdv!!

    Hali petv4!

    "Ennek a kábelnek a megépítéséről tudnál nekem valamilyen információt adni?"

    Kb. ugyanerre a kérdésre m.gabornak ezt a választ adtam:
    Sajna nincs ilyen rajzom és nem is tudok róla hogy közkézen forogna ilyesmi.

    Sajnos neked sem tudok mást mondani :-/

  • petv4
    csendes tag

    Hali!

    "Az sem lehetetlen, hogy én vagyok béna, igy annak is örülnék, ha valaki meg tudná mutatni 10percben, hogy hogy is nézne ki egy ilyen csatlakoztatás"

    A CIF001 nem egy kábel, hanem egy interfész. Így néz ki. Nem bekötni kell, hanem megépíteni (vagy megvásárolni) :)

    Szia Szirty!

    Ennek a kábelnek a megépítéséről tudnál nekem valamilyen információt adni?

    Köszönöm. Üdv!!

  • petv4
    csendes tag

    Üdv Mindenkinek!

    Omron cpm1- hez adatkábelt, vagy bármilyen elkészítési információt keresnék.

    Köszönöm!

    Sziasztok!

  • Sziasztok!

    Voltam egy WAGO-s bemutatón, ahol egy adott feladat végrehajtása közben a PLC-nek min. 5 ms, max. 52 ms, átlagban pedig 7 ms volt a ciklusideje. Ebből következik e az, hogy jelen esetben kevesebb mint 20 felfutó élet (1000/52 ms) tudnék számlálni egy DI bemeneten (mert ugye a legrosszabb esetben 2-szer is változhatna a jelem a bemeneten mielőtt egyszer kiolvasta volna a PLC) ?

    Vagyis ha biztosra akarok menni 20 Hz-re, akkor fel kell tennem egy számláló modult ?

    Köszi.

    Imi.

    Szia,
    Meg kell próbálni a bemenetet frissíteni sűrűbben.

    PL. siemens-nél OB35-ben perifériálisan ( L PIW0 ) meghívod az aktuális bájtot, wordöt az OB35 ciklusidejének megfelelően. Ha az OB35 ciklus ideje 10ms akkor ennyi időnként "számlálhatsz" az aktuális bemenettel.

    Azt meg kell nézni, hogy a Wago –nak van-e ilyen lehetősége.

  • Sziasztok!

    Voltam egy WAGO-s bemutatón, ahol egy adott feladat végrehajtása közben a PLC-nek min. 5 ms, max. 52 ms, átlagban pedig 7 ms volt a ciklusideje. Ebből következik e az, hogy jelen esetben kevesebb mint 20 felfutó élet (1000/52 ms) tudnék számlálni egy DI bemeneten (mert ugye a legrosszabb esetben 2-szer is változhatna a jelem a bemeneten mielőtt egyszer kiolvasta volna a PLC) ?

    Vagyis ha biztosra akarok menni 20 Hz-re, akkor fel kell tennem egy számláló modult ?

    Köszi.

    Imi.

  • Na, akkor felteszem újra kérdésem!

    Tudna nekem valaki segíteni? Mitsubishi PLC szeretnék programozni, de eddig csak maga a PLC áll a rendelkezésemre!
    Se kábelem, se szoftverem nincsen!
    Előre is nagyon köszi

    Szia,

    Itt [link] elég sokminden megtalálható.

  • Pato7
    csendes tag

    Na, akkor felteszem újra kérdésem!

    Tudna nekem valaki segíteni? Mitsubishi PLC szeretnék programozni, de eddig csak maga a PLC áll a rendelkezésemre!
    Se kábelem, se szoftverem nincsen!
    Előre is nagyon köszi

  • Szirty
    őstag

    OK, akkor nem annyira egyszerű, mint gondoltam.
    Megvásárolni meg nem lenne célszerű egy egyszeri használathoz ezt a kütyüt kb35000 ért.
    Megépitéshez van esetleg rajzod?

    Helló m.gabor!

    "Megvásárolni meg nem lenne célszerű egy egyszeri használathoz ezt a kütyüt kb35000 ért."

    Nos ez igaz. Sajna nincs ilyen rajzom és nem is tudok róla hogy közkézen forogna ilyesmi. Ugyanakkor elég valószínű, hogy egy alkalomra megépíteni épúgy nem célszerű...

    Talán a kölcsönkérés ami még járható lehet.

  • m.gabor
    csendes tag

    Hali!

    "Az sem lehetetlen, hogy én vagyok béna, igy annak is örülnék, ha valaki meg tudná mutatni 10percben, hogy hogy is nézne ki egy ilyen csatlakoztatás"

    A CIF001 nem egy kábel, hanem egy interfész. Így néz ki. Nem bekötni kell, hanem megépíteni (vagy megvásárolni) :)

    OK, akkor nem annyira egyszerű, mint gondoltam.
    Megvásárolni meg nem lenne célszerű egy egyszeri használathoz ezt a kütyüt kb35000 ért.
    Megépitéshez van esetleg rajzod?

  • Szirty
    őstag

    Igen, valami CMP1-CIF01 kábelt olvasgattam hozzá (gőzöm sincs, mit jelent az a CIF01). Találtam is egy bekötést, de nem működik. Az sem lehetetlen, hogy én vagyok béna, igy annak is örülnék, ha valaki meg tudná mutatni 10percben, hogy hogy is nézne ki egy ilyen csatlakoztatás, és egy adott bemenet hatására egy adott kimenet változtatgatását hogyan lehet megoldani.
    Előre is köszönöm a segitséget,

    Hali!

    "Az sem lehetetlen, hogy én vagyok béna, igy annak is örülnék, ha valaki meg tudná mutatni 10percben, hogy hogy is nézne ki egy ilyen csatlakoztatás"

    A CIF001 nem egy kábel, hanem egy interfész. Így néz ki. Nem bekötni kell, hanem megépíteni (vagy megvásárolni) :)

  • m.gabor
    csendes tag

    Szia!
    Ezt a PLC-t, ha jól tudom, CIF01-es interfészen keresztül tudod programozni!

    Igen, valami CMP1-CIF01 kábelt olvasgattam hozzá (gőzöm sincs, mit jelent az a CIF01). Találtam is egy bekötést, de nem működik. Az sem lehetetlen, hogy én vagyok béna, igy annak is örülnék, ha valaki meg tudná mutatni 10percben, hogy hogy is nézne ki egy ilyen csatlakoztatás, és egy adott bemenet hatására egy adott kimenet változtatgatását hogyan lehet megoldani.
    Előre is köszönöm a segitséget,

  • Pato7
    csendes tag

    Sziasztok!
    Segitséget szeretnék kérni. Adott egy Omron CPM1A PLC és ezzel kellene megoldanom egy gépnek a működését. 3 pneumatikus karnak kellene megfelelő sorrendben és időzitéssel mozognia. Ehhez szükségem lenne egy kábelre, amivel fel tudom programozni PCről, hogy vezérelje a szelepeket.
    Jól gondolom, hogy ez megoldható vele? Analóg áramköröket már építettem, de a digitálishoz tök hülye vagyok.

    Előre is köszi

    Szia!
    Ezt a PLC-t, ha jól tudom, CIF01-es interfészen keresztül tudod programozni!

  • m.gabor
    csendes tag

    Sziasztok!
    Segitséget szeretnék kérni. Adott egy Omron CPM1A PLC és ezzel kellene megoldanom egy gépnek a működését. 3 pneumatikus karnak kellene megfelelő sorrendben és időzitéssel mozognia. Ehhez szükségem lenne egy kábelre, amivel fel tudom programozni PCről, hogy vezérelje a szelepeket.
    Jól gondolom, hogy ez megoldható vele? Analóg áramköröket már építettem, de a digitálishoz tök hülye vagyok.

    Előre is köszi

  • Pato7
    csendes tag

    Sziasztok!
    Tudna nekem valaki segíteni? Mitsubishi PLC szeretnék programozni, de eddig csak maga a PLC áll a rendelkezésemre!
    Se kábelem, se szoftverem nincsen!
    Előre is nagyon köszi

  • Sziasztok,

    Van valakinek s7 canopener , s7 know how manager vagy hasonló programja (persze nem demo).
    Ha igen és van rá lehetőség akkor szeretném elkérni (pl.emailben). :D
    Köszi

    Sziasztok,

    Ne keressétek tovább, már meg van. :K
    köszi

  • Hali DP_Joci!

    "Mi nem működik, a program vagy a levelező lista?"

    A program:

    "(#534) Szirty válasza DP_Joci (#527) üzenetére"

    Szia,

    Oké, lassan kiigazodom.

    És a levelező lista, ha jól láttam te fel vagy íratkozva.

  • Szirty
    őstag

    Szia Szirty,

    Mi nem működik, a program vagy a levelező lista? :DD

    Hali DP_Joci!

    "Mi nem működik, a program vagy a levelező lista?"

    A program:

    "(#534) Szirty válasza DP_Joci (#527) üzenetére"

  • Sziasztok,

    Van valakinek s7 canopener , s7 know how manager vagy hasonló programja (persze nem demo).
    Ha igen és van rá lehetőség akkor szeretném elkérni (pl.emailben). :D
    Köszi

  • Hali moseras!

    "A WATCHDOG-ot pedig a kommunikáció nullázza. A WAGO-nál nem találok ilyent."

    belenéztem a HW configba mit lehet WAGO-nál állítani.
    Van watchdog, 10ms időalappal. Beállítható hogy mit csináljon ha a belső busz (k-bus) megszakad vagy hibás.
    Nem tudom kipróbálni mi történik WAGO kimenettel ha leáll a profibusz, mert csak beépítve van egyelőre ilyenünk és én még nem foglalkoztam vele, pár új gépben van beépítve...

    "Azt szeretném, hogy a user a HMI-n kap egy táblázatot nevekkel, ott átírhatja ezeket, majd ezek visszakerülnek a RETAIN memóriába. Ha elmegy a táp, akkor is ezeket megőrzi, és legközelebb már ezekkel indul el."

    Az általam ismert HMI-knél ez máshogy működik: Alapvetően minden változó a PLC-ben van, a HMI-ben csak hivatkozik rájuk az ember. Ha egy értéket kell kijelezni vagy állapotot megjeleníteni változó alapján, a HMI ciklikusan újra és újra lekérdezi a PLC-ből az érintett változó állapotát. Kivétel ez alól siemens OP-knál és egyéb HMI-knél a receptek kezelése. A recept adatrekordjait a HMI tárolja. Külön funkcióhívásokkal lehet ezeket az adatokat a PLC és a HMI között mozgatni.

    Szia Szirty!

    A k-bus ugye a modulok közötti belső busz, ahogy te is írtad. Ez egy 6-os érintkezősávon terjed. Tudtommal kettő a táp (5V), illetve 1 pár LVDS oda, 1 pár LVDS vissza. Az okés, hogy ha ezen a belső buszon leszakad a kommunikáció hiba miatt, akkor leállnak a kimenetek a modulokban.

    Jelenleg nekem csak egy CANopen slave-em van, amit távolról vezérlek. Ha ennél megszakad a CAN busz, a kimenetei aktívak maradnak. Azt csináltam, hogy az egyik szabad DO-val egy időrelét impulzussal életben tartottam. Ha megszűnt a CAN busz, akkor az impulzusok is megszűntek, az időrelé is leszakította a számunkra fontos kimenetet.

    "Az általam ismert HMI-knél ez máshogy működik"

    Az általam felvázolt verziót meg fogom nézni, hogy működhet e úgy, ahogy leírtam.

    Köszönöm.

    Imi.

  • Szirty
    őstag

    Szia,

    Megtaláltam, az EXAMPLE 2 –t nézd meg:

    [link]

    Bár lehet, hogy nekem van valami elírva a test programomban.

    Hali!

    Nem tudom miért nem működik.

  • Szirty
    őstag

    Szia.

    Köszi, keresem a megoldást rá.

    "Az a modul amelyik leszakadt, ilyenkor rendszerint azonnal kikapcsolja a kimeneteit."

    Erre nem találok megoldást CANopen-ben. A Beckhoff-nak vannak WATCHDOG-al rendelkező moduljai, amiknél megadható egy időintervallum, ami ha lejár, lekapcsolja a kimeneteit. A WATCHDOG-ot pedig a kommunikáció nullázza. A WAGO-nál nem találok ilyent.

    RETAIN memory:
    Szükségem lenne ilyenre is. A WAGO-ban van is ilyen 24 kByte (750-841). Azt szeretném, hogy a user a HMI-n kap egy táblázatot nevekkel, ott átírhatja ezeket, majd ezek visszakerülnek a RETAIN memóriába. Ha elmegy a táp, akkor is ezeket megőrzi, és legközelebb már ezekkel indul el. Jól gondolom e ezt ?

    Köszi.

    Imi.

    Hali moseras!

    "A WATCHDOG-ot pedig a kommunikáció nullázza. A WAGO-nál nem találok ilyent."

    belenéztem a HW configba mit lehet WAGO-nál állítani.
    Van watchdog, 10ms időalappal. Beállítható hogy mit csináljon ha a belső busz (k-bus) megszakad vagy hibás.
    Nem tudom kipróbálni mi történik WAGO kimenettel ha leáll a profibusz, mert csak beépítve van egyelőre ilyenünk és én még nem foglalkoztam vele, pár új gépben van beépítve...

    "Azt szeretném, hogy a user a HMI-n kap egy táblázatot nevekkel, ott átírhatja ezeket, majd ezek visszakerülnek a RETAIN memóriába. Ha elmegy a táp, akkor is ezeket megőrzi, és legközelebb már ezekkel indul el."

    Az általam ismert HMI-knél ez máshogy működik: Alapvetően minden változó a PLC-ben van, a HMI-ben csak hivatkozik rájuk az ember. Ha egy értéket kell kijelezni vagy állapotot megjeleníteni változó alapján, a HMI ciklikusan újra és újra lekérdezi a PLC-ből az érintett változó állapotát. Kivétel ez alól siemens OP-knál és egyéb HMI-knél a receptek kezelése. A recept adatrekordjait a HMI tárolja. Külön funkcióhívásokkal lehet ezeket az adatokat a PLC és a HMI között mozgatni.

  • Szirty
    őstag

    Üdvözlök Mindenkit!
    Egy nagyon kezdő kérdést bátorkédnék itt feltenni,bár úgylátom,hogy itt inkább komoly témákban folyik eszmecsere.
    PC-PLC közötti RS232 soros adatátviteli beállításokkal kapcsolatban szeretnék információt szerezni.
    A Moeller oldalain találtam az alábbi segédletet:
    www.moeller.hu/binary/pc-plc_kapcsolat.pdf
    A kérdésem az lenne ,hogy az OMRON PLC-k esetében is használhatók-e az oldalon leírtak?
    A válaszokat előre is köszönöm!

    Helló thomass!

    "A kérdésem az lenne ,hogy az OMRON PLC-k esetében is használhatók-e az oldalon leírtak?"

    Nem, mert az általad linkelt leírásban a Moellerhez való szoftver részleteiről esik szó (mikor hova kell kattintani). Az Omron szoftver ettől eltér, ez a leírás nem követhető Omronnal.

  • Hali moseras!

    "Mondtad, hogy használtok ilyen WAGO-s profibus I/O-kat. Mit csinál olyankor a PLC, ha ezek az I/O-k nem válaszolnak ?
    Megáll minden, vagy csak az amivel kapcsolatos a távoli I/O ?"

    Olyankor lép életbe a "B" terv :)
    S7-nél úgy működik a dolog, hogy van egy ún HW config, ahol szépen meg kell adni minden eszközt, ami a buszon van. A profibus token ring rendszerű, vagyis a master minden konfigurált slave-nek egymás után minden busz ciklusban küld egy jelzést, amire a slave-nek válaszolnia kell. Ha valamelyik eszköz leválik a buszról (nem válaszol) azt a master azonnal észleli. Ilyenkor két eset lehetséges:
    1. Létezik erre az esetre hibakezelő blokk. Ilyenkor azt végrehajtja. Abba lehet programot írni, hogy mit tegyen a rendszer ilyenkor. Le lehet benne kérdezni melyik eszköz szakadt le, le lehet programozni mit csináljon ilyenkor a gép. stb.
    2. Nem létezik a hibakezelő blokk, így azt nem tudja meghívni, a CPU STOP állapotba kerül és a teljes berendezés azonnal megáll.

    Persze lehet üres hibakezelő blokkot is beletenni. Néha ez is megfelelő. Ilyenkor a smmit hívja meg hiba esetén. vagyis semmit nem tesz a hiba miatt, de nem is áll le (STOP).
    Az a modul amelyik leszakadt, ilyenkor rendszerint azonnal kikapcsolja a kimeneteit.
    A berendezést vezérlő program ilyenkor esetleg nem megfelelően is működhet, mert ha a leszakadt modulon bemenetek is voltak, akkor azok nulla állapotúnak látszanak és a program is ennek megfelelően fog működni. vagyis ha nem írunk hibakezelést az esetre (B tervet) akkor a program nem fogja "tudni" hogy bizonyos bemenetek nem azért nulla állapotúak mert az adott bemenet fizikailag is nulla állapotú, hanem mert kommunikációs hiba van. Sokszor ez nem mindegy :)

    "Illetve milyen változót kell a HMI-re kitenni, hogy a user is lásson ebből valamit ?"

    S7-nél az említett hibakezelő blokk (OB) a megoldás erre, amibe írni kell egy programot ami ad megfelelő jelzést ami aztán meg is jeleníthető (akár szövegesen is).
    Vagy meg kell hívni az SFC51-et (Reading a System Status List or Partial List with SFC 51 "RDSYSST"). EZzel le lehet kérdezni az összes buszon lévő összes eszköz jelenlétét:

    A hibakezelő blokkal kapcsolatban firkáltam már. Itt találod.

    Szia.

    Köszi, keresem a megoldást rá.

    "Az a modul amelyik leszakadt, ilyenkor rendszerint azonnal kikapcsolja a kimeneteit."

    Erre nem találok megoldást CANopen-ben. A Beckhoff-nak vannak WATCHDOG-al rendelkező moduljai, amiknél megadható egy időintervallum, ami ha lejár, lekapcsolja a kimeneteit. A WATCHDOG-ot pedig a kommunikáció nullázza. A WAGO-nál nem találok ilyent.

    RETAIN memory:
    Szükségem lenne ilyenre is. A WAGO-ban van is ilyen 24 kByte (750-841). Azt szeretném, hogy a user a HMI-n kap egy táblázatot nevekkel, ott átírhatja ezeket, majd ezek visszakerülnek a RETAIN memóriába. Ha elmegy a táp, akkor is ezeket megőrzi, és legközelebb már ezekkel indul el. Jól gondolom e ezt ?

    Köszi.

    Imi.

  • Üdvözlök Mindenkit!
    Egy nagyon kezdő kérdést bátorkédnék itt feltenni,bár úgylátom,hogy itt inkább komoly témákban folyik eszmecsere.
    PC-PLC közötti RS232 soros adatátviteli beállításokkal kapcsolatban szeretnék információt szerezni.
    A Moeller oldalain találtam az alábbi segédletet:
    www.moeller.hu/binary/pc-plc_kapcsolat.pdf
    A kérdésem az lenne ,hogy az OMRON PLC-k esetében is használhatók-e az oldalon leírtak?
    A válaszokat előre is köszönöm!

    Szia.

    A Moeller a WAGO-hoz hasonlóan CodeSys alapú fejlesztőkörnyezetet használ a PLC program megírására, tesztelésére, illetve a beprogramozásra. Tudtommal az OMRON nem ezt használja, bár konkrétan nem ismerem.

    Nyilván az elv ugyanaz: ismerni kell a PLC RS232 portjának beállításait, sebesség, bitszám, stopbitek száma, paritás. Esetleg lehet autobaud-os megoldás is. Ha USB/CAN232 konvertert használsz, akkor ajánlom az ATEN UC-232A-t.

    Ha nem programozáshoz, hanem már működés közbeni kommunikációhoz kell, akkor ahhoz OMRON-ost kell kérdezned.

    Imi.

  • thomass
    csendes tag

    Üdvözlök Mindenkit!
    Egy nagyon kezdő kérdést bátorkédnék itt feltenni,bár úgylátom,hogy itt inkább komoly témákban folyik eszmecsere.
    PC-PLC közötti RS232 soros adatátviteli beállításokkal kapcsolatban szeretnék információt szerezni.
    A Moeller oldalain találtam az alábbi segédletet:
    www.moeller.hu/binary/pc-plc_kapcsolat.pdf
    A kérdésem az lenne ,hogy az OMRON PLC-k esetében is használhatók-e az oldalon leírtak?
    A válaszokat előre is köszönöm!

  • ali DP_Joci!

    "gazából nem látom a működés eredményét, ha az az lenne, hogy egyik DB-ből másol a másikba. :("

    Itt egy példa, ami egy integerben megadott számú adatblokkból egy INT típust egy integerben megadott számú címről bemásol az MW0-ba az ANY használatával.:

    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1

    VAR_INPUT
    SrcDB : INT ; //Forrás blokk száma
    SrcADDR : INT ; //Kezdőcím a forrásblokkban
    END_VAR
    VAR_TEMP
    SRC : ANY ;
    RV : INT ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =

    L P##SRC;
    LAR1 ;
    L B#16#10; //Mindig 10h
    T LB [AR1,P#0.0];
    L B#16#5; //Típus azonosító 5h=INT
    T LB [AR1,P#1.0];
    L W#16#1; //Ismétlési faktor = 1
    T LW [AR1,P#2.0];
    L #SrcDB; //A forrás DB száma
    T LW [AR1,P#4.0];
    L #SrcADDR;
    SLD 3;
    L DW#16#84000000; //Adatterület azonosítója 84h=Data block
    OD ; //Az adatterület és a cím együtt egy DW-ben
    T LD [AR1,P#6.0];
    CALL SFC 20 (//Blokk másolás
    SRCBLK := #SRC,
    RET_VAL := #RV,
    DSTBLK := P#M 0.0 WORD 1);

    END_FUNCTION

    És a hívás:

    CALL FC 1
    SrcDB :=24
    SrcADDR:=4

    Ez az MW0-ba írja a DB24 DBW4-et

    Felíratkoztam a prog.hu-n a PLC levelező listára, de nem kapok leveleket.
    Azért mert nincs levelezés, vagy mert nálam nem működik valami?

  • ali DP_Joci!

    "gazából nem látom a működés eredményét, ha az az lenne, hogy egyik DB-ből másol a másikba. :("

    Itt egy példa, ami egy integerben megadott számú adatblokkból egy INT típust egy integerben megadott számú címről bemásol az MW0-ba az ANY használatával.:

    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1

    VAR_INPUT
    SrcDB : INT ; //Forrás blokk száma
    SrcADDR : INT ; //Kezdőcím a forrásblokkban
    END_VAR
    VAR_TEMP
    SRC : ANY ;
    RV : INT ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =

    L P##SRC;
    LAR1 ;
    L B#16#10; //Mindig 10h
    T LB [AR1,P#0.0];
    L B#16#5; //Típus azonosító 5h=INT
    T LB [AR1,P#1.0];
    L W#16#1; //Ismétlési faktor = 1
    T LW [AR1,P#2.0];
    L #SrcDB; //A forrás DB száma
    T LW [AR1,P#4.0];
    L #SrcADDR;
    SLD 3;
    L DW#16#84000000; //Adatterület azonosítója 84h=Data block
    OD ; //Az adatterület és a cím együtt egy DW-ben
    T LD [AR1,P#6.0];
    CALL SFC 20 (//Blokk másolás
    SRCBLK := #SRC,
    RET_VAL := #RV,
    DSTBLK := P#M 0.0 WORD 1);

    END_FUNCTION

    És a hívás:

    CALL FC 1
    SrcDB :=24
    SrcADDR:=4

    Ez az MW0-ba írja a DB24 DBW4-et

    Szia,

    Megtaláltam, az EXAMPLE 2 –t nézd meg:

    [link]

    Bár lehet, hogy nekem van valami elírva a test programomban.

  • Szirty
    őstag

    Szia,
    Igazából nem létszükséglet számomra jelenleg a pointerek használata, csak mint érdekesség foglalkozom velük.
    Vagyis feleslegesen nem akarom rabolni az idődet ezzel, csak ha érdekel és van rá kapacitásod akkor foglalkozz vele.

    Amiről te beszélsz az a ANY Format for Data Types ez ok.

    De van egy olyan is hogy:

    ANY Format for Parameter Types

    For parameter types STEP 7 stores the data type and the address of the parameters. The repetition factor is always 1. Bytes 4, 5, and 7 are always 0. Bytes 8 and 9 indicate the number of the timer, counter, or block.

    Ide nem tudtam kimásolni a helpből az ábrát..

    The following table shows the coding of the data types for the parameter type ANY for parameter types.

    Hexadecimal Code Data Type Description
    b#16#17 BLOCK_FB FB number
    b#16#18 BLOCK_FC FC number
    b#16#19 BLOCK_DB DB number
    b#16#1A BLOCK_SDB SDB number
    b#16#1C COUNTER Counter number
    b#16#1D TIMER Timer number

    Valójában én ezt raktam össze, a b#16#19 mondja meg hogy ez egy DB , a 8 as 9-es byte pedig hogy melyik DB.
    L #DB_num_in : egy integer változó lenne ami megmondja, hogy melyik DB-t akarom.
    Igazából nem látom a működés eredményét, ha az az lenne, hogy egyik DB-ből másol a másikba. :(

    ali DP_Joci!

    "gazából nem látom a működés eredményét, ha az az lenne, hogy egyik DB-ből másol a másikba. :("

    Itt egy példa, ami egy integerben megadott számú adatblokkból egy INT típust egy integerben megadott számú címről bemásol az MW0-ba az ANY használatával.:

    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1

    VAR_INPUT
    SrcDB : INT ; //Forrás blokk száma
    SrcADDR : INT ; //Kezdőcím a forrásblokkban
    END_VAR
    VAR_TEMP
    SRC : ANY ;
    RV : INT ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =

    L P##SRC;
    LAR1 ;
    L B#16#10; //Mindig 10h
    T LB [AR1,P#0.0];
    L B#16#5; //Típus azonosító 5h=INT
    T LB [AR1,P#1.0];
    L W#16#1; //Ismétlési faktor = 1
    T LW [AR1,P#2.0];
    L #SrcDB; //A forrás DB száma
    T LW [AR1,P#4.0];
    L #SrcADDR;
    SLD 3;
    L DW#16#84000000; //Adatterület azonosítója 84h=Data block
    OD ; //Az adatterület és a cím együtt egy DW-ben
    T LD [AR1,P#6.0];
    CALL SFC 20 (//Blokk másolás
    SRCBLK := #SRC,
    RET_VAL := #RV,
    DSTBLK := P#M 0.0 WORD 1);

    END_FUNCTION

    És a hívás:

    CALL FC 1
    SrcDB :=24
    SrcADDR:=4

    Ez az MW0-ba írja a DB24 DBW4-et

  • Hali DP_Joci!

    L P##DB_pointer_in_any
    LAR1

    Betölti az akku1-be a #DB_pointer_in_any változó címét, majd az akku1-et az 1-es address regiszterbe tolja.

    L B#16#10
    T LB [AR1,P#0.0]

    10 hexa értéket tölt akku1-be, majd azt elrakja az AR1 address regiszter által címzett címre 0 byte és 0 bit eltolással (P#0.0 az eltolás).
    Lényegében tehát ezzel a #DB_pointer_in_any változó nulladik byte-jába 10 hexa értéket rak.
    Ha most megnézed az ANY felépítését:

    Akkor látható, hogy az a byte mindig 10h S7 esetén. Nem véletlen tett ide 10h-t :)

    L B#16#19
    T LB [AR1,P#1.0]

    Az ANY 1-es byte-jába 19h-t tölt.
    Ez a byte mondja meg az adattípust. Ez egy nagyon érdekes sor, mert 19h adattípus nem létezik amennyire tudom :)

    L W#16#1
    T LW [AR1,P#2.0]

    A 2-es byte az ANY típusnál az métlési faktor. Ennek akkor van jelentősége, amikor nem egy adatterületre kell hivatkozni (pl. blokk másolás). Ez mindig az adattípusban megadott típus darabszámára vonatkozik. vagyis ha ott Byte típus van meghatározva, akkor itt 10 10 byte-ot jelent, ha ott word van meghatározva, akkor a 10-es érték az ismétlési faktorban már 20 byte-ot jelent, stb.

    L W#16#0
    T LW [AR1,P#4.0]

    Itt kell megadni a DB számát, ami nem lehet nulla (mivel 0-ás DB nincs).
    Ugyanakkor amennyiben az adatterület definíciója nem DB-t határoz meg (ANY byte6) akkor nulla kell hogy legyen. (bár ilyenkor ezt nyilván nem veszi figyelembe a rendszer).

    L #DB_num_in
    T LD [AR1,P#6.0]

    A 6. byte elvileg az adatterület típusát adja meg. Az, hogy ide egy #DB_num_in nevű változót tölt arra utal, hogy van itt egy kis csúszás. Szerintem #DB_num_in-t a 4-es byte-ba kéne tölteni.

    "Ezzel hibát nem kapok, de eredményt sem, lehet hogy az SCF84-et értem félre."

    Attól függ mit szeretnél...

    Szia,
    Igazából nem létszükséglet számomra jelenleg a pointerek használata, csak mint érdekesség foglalkozom velük.
    Vagyis feleslegesen nem akarom rabolni az idődet ezzel, csak ha érdekel és van rá kapacitásod akkor foglalkozz vele.

    Amiről te beszélsz az a ANY Format for Data Types ez ok.

    De van egy olyan is hogy:

    ANY Format for Parameter Types

    For parameter types STEP 7 stores the data type and the address of the parameters. The repetition factor is always 1. Bytes 4, 5, and 7 are always 0. Bytes 8 and 9 indicate the number of the timer, counter, or block.

    Ide nem tudtam kimásolni a helpből az ábrát..

    The following table shows the coding of the data types for the parameter type ANY for parameter types.

    Hexadecimal Code Data Type Description
    b#16#17 BLOCK_FB FB number
    b#16#18 BLOCK_FC FC number
    b#16#19 BLOCK_DB DB number
    b#16#1A BLOCK_SDB SDB number
    b#16#1C COUNTER Counter number
    b#16#1D TIMER Timer number

    Valójában én ezt raktam össze, a b#16#19 mondja meg hogy ez egy DB , a 8 as 9-es byte pedig hogy melyik DB.
    L #DB_num_in : egy integer változó lenne ami megmondja, hogy melyik DB-t akarom.
    Igazából nem látom a működés eredményét, ha az az lenne, hogy egyik DB-ből másol a másikba. :(

  • Szirty
    őstag

    L P##DB_pointer_in_any
    LAR1
    L B#16#10
    T LB [AR1,P#0.0]
    L B#16#19
    T LB [AR1,P#1.0]
    L W#16#1
    T LW [AR1,P#2.0]
    L W#16#0
    T LW [AR1,P#4.0]
    L #DB_num_in
    T LD [AR1,P#6.0]
    //;
    L P##DB_pointer_out_any
    LAR1
    L B#16#10
    T LB [AR1,P#0.0]
    L B#16#19
    T LB [AR1,P#1.0]
    L W#16#1
    T LW [AR1,P#2.0]
    L W#16#0
    T LW [AR1,P#4.0]
    L #DB_num_out
    T LD [AR1,P#6.0]
    //;
    CALL SFC 84
    REQ :=M255.7
    SRCBLK :=#DB_pointer_in_any
    RET_VAL:=MW8
    BUSY :=M3.1
    DSTBLK :=#DB_pointer_out_any

    Ilyen paraméter tipusú ANY-hez volt már szerencséd?
    Ezzel hibát nem kapok, de eredményt sem, lehet hogy az SCF84-et értem félre.

    Hali DP_Joci!

    L P##DB_pointer_in_any
    LAR1

    Betölti az akku1-be a #DB_pointer_in_any változó címét, majd az akku1-et az 1-es address regiszterbe tolja.

    L B#16#10
    T LB [AR1,P#0.0]

    10 hexa értéket tölt akku1-be, majd azt elrakja az AR1 address regiszter által címzett címre 0 byte és 0 bit eltolással (P#0.0 az eltolás).
    Lényegében tehát ezzel a #DB_pointer_in_any változó nulladik byte-jába 10 hexa értéket rak.
    Ha most megnézed az ANY felépítését:

    Akkor látható, hogy az a byte mindig 10h S7 esetén. Nem véletlen tett ide 10h-t :)

    L B#16#19
    T LB [AR1,P#1.0]

    Az ANY 1-es byte-jába 19h-t tölt.
    Ez a byte mondja meg az adattípust. Ez egy nagyon érdekes sor, mert 19h adattípus nem létezik amennyire tudom :)

    L W#16#1
    T LW [AR1,P#2.0]

    A 2-es byte az ANY típusnál az métlési faktor. Ennek akkor van jelentősége, amikor nem egy adatterületre kell hivatkozni (pl. blokk másolás). Ez mindig az adattípusban megadott típus darabszámára vonatkozik. vagyis ha ott Byte típus van meghatározva, akkor itt 10 10 byte-ot jelent, ha ott word van meghatározva, akkor a 10-es érték az ismétlési faktorban már 20 byte-ot jelent, stb.

    L W#16#0
    T LW [AR1,P#4.0]

    Itt kell megadni a DB számát, ami nem lehet nulla (mivel 0-ás DB nincs).
    Ugyanakkor amennyiben az adatterület definíciója nem DB-t határoz meg (ANY byte6) akkor nulla kell hogy legyen. (bár ilyenkor ezt nyilván nem veszi figyelembe a rendszer).

    L #DB_num_in
    T LD [AR1,P#6.0]

    A 6. byte elvileg az adatterület típusát adja meg. Az, hogy ide egy #DB_num_in nevű változót tölt arra utal, hogy van itt egy kis csúszás. Szerintem #DB_num_in-t a 4-es byte-ba kéne tölteni.

    "Ezzel hibát nem kapok, de eredményt sem, lehet hogy az SCF84-et értem félre."

    Attól függ mit szeretnél...

  • L P##DB_pointer_in_any
    LAR1
    L B#16#10
    T LB [AR1,P#0.0]
    L B#16#19
    T LB [AR1,P#1.0]
    L W#16#1
    T LW [AR1,P#2.0]
    L W#16#0
    T LW [AR1,P#4.0]
    L #DB_num_in
    T LD [AR1,P#6.0]
    //;
    L P##DB_pointer_out_any
    LAR1
    L B#16#10
    T LB [AR1,P#0.0]
    L B#16#19
    T LB [AR1,P#1.0]
    L W#16#1
    T LW [AR1,P#2.0]
    L W#16#0
    T LW [AR1,P#4.0]
    L #DB_num_out
    T LD [AR1,P#6.0]
    //;
    CALL SFC 84
    REQ :=M255.7
    SRCBLK :=#DB_pointer_in_any
    RET_VAL:=MW8
    BUSY :=M3.1
    DSTBLK :=#DB_pointer_out_any

    Ilyen paraméter tipusú ANY-hez volt már szerencséd?
    Ezzel hibát nem kapok, de eredményt sem, lehet hogy az SCF84-et értem félre.

  • Szirty
    őstag

    Szia,
    Az első módszert az szoktam használni. Azzal ebben az esetben az a baj, hogy bemenő változó csak konkrét DB lehet.
    CALL FC2
    DB_in:=DB2

    A DB[változó] megadást nem fogadja el.

    Olyat kerestem első körben, hogy DB[var].DBw0 vagy valami hasonló, de ez nem igazán megy ebben a formában.

    Ilyeneket elfogad, hogy:
    OPN DB[MW0]
    vagy
    OPN DB[#DB_temp]
    ahol a
    L #DB_IN ez egy bejövő word változó, ezt nem lehet közvetlen használni
    T #DB_temp ez egy TEMP word változó

    Ez nekem megfelel.

    Az ANY pointeres dolog az érdekes lehet.
    Van esetleg egy példád erre, megpróbáltam kreálni egy ilyen pointert, de nem igazán tudok DB-re hivatkozni vele. :W

  • Szirty
    őstag

    Szia,
    Az első módszert az szoktam használni. Azzal ebben az esetben az a baj, hogy bemenő változó csak konkrét DB lehet.
    CALL FC2
    DB_in:=DB2

    A DB[változó] megadást nem fogadja el.

    Olyat kerestem első körben, hogy DB[var].DBw0 vagy valami hasonló, de ez nem igazán megy ebben a formában.

    Ilyeneket elfogad, hogy:
    OPN DB[MW0]
    vagy
    OPN DB[#DB_temp]
    ahol a
    L #DB_IN ez egy bejövő word változó, ezt nem lehet közvetlen használni
    T #DB_temp ez egy TEMP word változó

    Ez nekem megfelel.

    Az ANY pointeres dolog az érdekes lehet.
    Van esetleg egy példád erre, megpróbáltam kreálni egy ilyen pointert, de nem igazán tudok DB-re hivatkozni vele. :W

    Helló DP_Joci!

    "Az ANY pointeres dolog az érdekes lehet.
    Van esetleg egy példád erre, megpróbáltam kreálni egy ilyen pointert, de nem igazán tudok DB-re hivatkozni vele."

    Egyszer csináltam olyat, hogy különböző számú egyforma szerkezető DB-kből másoltam adatokat, ahol a DB számát a program kalkulálta ki. Itt ANY pointertípusban kellett összeállítani a címet, mert a másolás BLKMOV hívással történt, aminek ANY kell.
    Persze hogy nem találom.

    Ha megnézed az ANY felépítését:

    Akkor hamar kiderül hogyan kell összesakkozni egy címet.
    Csak arra kell nagyon vigyázni nehogy mellécímezzen az ember. Az indirekt címzés már csak ilyen. Jó nagyokat lehet vele szívni és alaposan tesztelni kell.

    A helpben van példa az "Example of the Data Type ANY" címszó alatt.

    FUNCTION FC1: INT
    TITLE = Transfer and handling of ANY pointers
    // Task :
    // This block should copy a source area to a target area using
    // SFC20 (BLKMOV) where the source is put together from
    // a number of individual parameters to form an Any pointer
    // and the target is already specified as an Any pointer.

    AUTHOR: SIEMENS
    FAMILY: TOOLS
    NAME: ANY_PTR
    VERSION: 00.01
    VAR_INPUT
    SRC_DB : INT;
    SRC_Byte : INT;
    SRC_Type : BOOL;
    SRC_Len : INT;
    DEST_Any : ANY;
    END_VAR

    VAR_TEMP
    T_AR1 : DWORD;
    T_AR2 : DWORD;
    T_SRC_Any : ANY;
    T_DEST_Any : ANY;
    Count : INT;
    SFC_Ret_Val: INT;
    END_VAR
    BEGIN
    NETWORK
    TITLE = Save the contents of the address registers AR1 and AR2
    TAR1 T_AR1;
    TAR2 T_AR2;
    NETWORK
    TITLE = Put together and check source area
    LAR1 P#T_SRC_Any; //Load start address of the source Any
    //pointer into AR1
    L B#16#10; //Enter syntax ID in the Any pointer
    T LB [AR1, P#0.0];

    L B#16#2; //Load area type BYTE
    AN SRC_Type; //If BYTE was chosen, then
    //jump to entry
    JC Tran;
    L B#16#4; //Otherwise load area type WORD
    Tran: T LB [AR1, P#1.0]; //and store in the Any pointer
    L SRC_Len; //Enter number of bytes/words to be
    //transferred
    T LW [AR1, P#2.0];
    L SRC_DB; //Enter source DB number
    T LW [AR1, P#4.0];
    L 0; //If source DB number = 0 then
    //transfer from bit memory area,
    ==I ; //otherwise from a DB
    JC Mem;

    L P#DBX0.0; //Load area pointer in data block
    JU Offs;
    Mem: L P#M0.0; //Load area pointer in bit memory area
    Offs: L SRC_Byte; //Load copy of the number of the first bytes to be copied SLD 3; //Convert to pointer format
    +D ; //Add to area pointer
    T LD [AR1, P#6.0]; //Enter result in ANY pointer
    NETWORK
    TITLE = Enter and check the target Any pointer
    L P#DEST_Any; //Place address of Any pointer in AR1
    LAR1 ;
    L B#16#2; //If the area type of the transferred
    //Any pointer
    L B [AR1, P#1.0]; //= byte or = word, the jump
    //follows
    ==I ;
    O( ;
    L B#16#4;
    ==I ;
    ) ;
    JC Copy;

    L W#16#80FF; //Otherwise load error code
    T RET_VAL; //Transfer to the caller
    JU End; //Finish block processing
    Copy: LAR2 P#T_DEST_Any; //Load address of temp. Any pointer
    L 5; //5 words must be copied
    Back: T Count;
    L W [AR1, P#0.0]; //Move the Any pointer
    //as an input variable to
    T LW[AR2, P#0.0]; //the local data
    +AR1 P#2.0;
    +AR2 P#2.0;
    L Count;
    LOOP Back;
    NETWORK
    TITLE = Call SFC20 (BLKMOV)

    CALL SFC20
    (
    SRCBLK := T_SRC_Any,
    RET_VAL := SFC_Ret_Val,
    DSTBLK := T_DEST_Any
    );
    NETWORK
    TITLE = Pass on return value of SFC
    L SFC_Ret_Val;
    T RET_VAL;
    NETWORK
    TITLE = Restore the contents of the address registers AR1 and AR2
    End: LAR1 T_AR1;
    LAR2 T_AR2;
    END_FUNCTION

    DATA_BLOCK DB10
    TITLE = Copy_In
    AUTHOR: SIEMENS
    FAMILY: EXAMPLE
    NAME: COPY_IN
    VERSION: 00.01
    STRUCT
    test: ARRAY[0..29] of BYTE;
    END_STRUCT;

    BEGIN
    END_DATA_BLOCK

    DATA_BLOCK DB11
    TITLE = Copy_Out
    AUTHOR: SIEMENS
    FAMILY: EXAMPLE
    NAME: COPY_OUT
    VERSION: 00.01
    STRUCT
    test: ARRAY[0..29] of BYTE;
    END_STRUCT;
    BEGIN
    END_DATA_BLOCK

    ORGANIZATION_BLOCK OB1
    TITLE = Cycle
    AUTHOR: SIEMENS
    FAMILY: EXAMPLE
    NAME: OB_CYC
    VERSION: 00.01
    VAR_TEMP
    OB1_System: array [1..20] of byte;
    Src_Db : INT;
    Src_Byte : INT;
    Src_Type : BOOL;
    Src_Len : INT;
    END_VAR
    BEGIN
    NETWORK
    TITLE = First call example for FC1

    // This call for FC1 copies 5 words from memory byte 33
    // to DB10 from data byte 3. This means the memory
    // words 33, 35, 37, 39, and 41 are copied to the data
    // words 3, 5, 7, 9, and 11 of DB10.
    L 0;
    T Src_Db;
    L 33;
    T Src_Byte;
    Set ;
    = Src_Type;
    L 5;
    T Src_Len;
    CALL FC1
    (
    SRC_DB := Src_Db,
    SRC_Byte := Src_Byte,
    SRC_Type := Src_Type,
    SRC_Len := Src_Len,
    DEST_Any := P# DB10.DBX 3.0 BYTE 20,
    RET_VAL := MW100
    );


    NETWORK
    TITLE = Second call example for FC1
    // This call for FC1 copies 7 bytes from DB11 from
    // data byte 13 to the process output image from
    // QB99. This means the data bytes 13 to 19
    // of DB11 are copied to the output bytes 99 - 105.
    L 11;
    T Src_Db;
    L 13;
    T Src_Byte;
    CLR ;
    = Src_Type;
    L 7;
    T Src_Len;
    CALL FC1
    (
    SRC_DB := Src_Db,
    SRC_Byte := Src_Byte,
    SRC_Type := Src_Type,
    SRC_Len := Src_Len,
    DEST_Any := P# Q 99.0 WORD 5,
    RET_VAL := MW100
    );

    END_ORGANIZATION_BLOCK

  • Hali DP_Joci!

    "Lehet-e siemens (s7-300-400 ) plc-nél a DB sorszámát változóval, vagy indirekten, vagy akárhogy megadni? "

    Lehet.
    Így hirtelen két megoldás jut eszembe.
    Az egyik akkor használható ha a DB elérése egy blokkon belül türténik és a DB számát kivülről, paraméterként adod át.
    Ezt teszi lehetővé a BLOCK_DB paraméter típus. A szóbanforgó FC/FB interface részében input változóként megadsz egy BLOCK_DB típusó változót.
    Pl.:

    OPN után a DB-t a T DBWxxx L DBWxxx utasításokkal eléred.

    A másik módszer nyakatekertebb. Össze kell állítani egy ANY pointert úgy, hogy a nekünk megfelelő számú DB-re mutasson (ez akár integer is lehet). Utána egy pointeres címzéssel elérhető a kívánt DB.
    Azért ezzel nem árt vigyázni. Ha rossz DB-re vagy anak nem létező címére hivatkozol, akkor jön a "STOP caused by programming error" :)

    Szia,
    Az első módszert az szoktam használni. Azzal ebben az esetben az a baj, hogy bemenő változó csak konkrét DB lehet.
    CALL FC2
    DB_in:=DB2

    A DB[változó] megadást nem fogadja el.

    Olyat kerestem első körben, hogy DB[var].DBw0 vagy valami hasonló, de ez nem igazán megy ebben a formában.

    Ilyeneket elfogad, hogy:
    OPN DB[MW0]
    vagy
    OPN DB[#DB_temp]
    ahol a
    L #DB_IN ez egy bejövő word változó, ezt nem lehet közvetlen használni
    T #DB_temp ez egy TEMP word változó

    Ez nekem megfelel.

    Az ANY pointeres dolog az érdekes lehet.
    Van esetleg egy példád erre, megpróbáltam kreálni egy ilyen pointert, de nem igazán tudok DB-re hivatkozni vele. :W

  • Szirty
    őstag

    Szia.

    Köszi, megtaláltam. Itt egy PID blokk van, annak sok kimenete, benne az analóg, illetve a PWM növel/csökkent is.

    Mondtad, hogy használtok ilyen WAGO-s profibus I/O-kat. Mit csinál olyankor a PLC, ha ezek az I/O-k nem válaszolnak ?

    Megáll minden, vagy csak az amivel kapcsolatos a távoli I/O ?
    Illetve milyen változót kell a HMI-re kitenni, hogy a user is lásson ebből valamit ?

    Köszi

    Imi.

    Hali moseras!

    "Mondtad, hogy használtok ilyen WAGO-s profibus I/O-kat. Mit csinál olyankor a PLC, ha ezek az I/O-k nem válaszolnak ?
    Megáll minden, vagy csak az amivel kapcsolatos a távoli I/O ?"

    Olyankor lép életbe a "B" terv :)
    S7-nél úgy működik a dolog, hogy van egy ún HW config, ahol szépen meg kell adni minden eszközt, ami a buszon van. A profibus token ring rendszerű, vagyis a master minden konfigurált slave-nek egymás után minden busz ciklusban küld egy jelzést, amire a slave-nek válaszolnia kell. Ha valamelyik eszköz leválik a buszról (nem válaszol) azt a master azonnal észleli. Ilyenkor két eset lehetséges:
    1. Létezik erre az esetre hibakezelő blokk. Ilyenkor azt végrehajtja. Abba lehet programot írni, hogy mit tegyen a rendszer ilyenkor. Le lehet benne kérdezni melyik eszköz szakadt le, le lehet programozni mit csináljon ilyenkor a gép. stb.
    2. Nem létezik a hibakezelő blokk, így azt nem tudja meghívni, a CPU STOP állapotba kerül és a teljes berendezés azonnal megáll.

    Persze lehet üres hibakezelő blokkot is beletenni. Néha ez is megfelelő. Ilyenkor a smmit hívja meg hiba esetén. vagyis semmit nem tesz a hiba miatt, de nem is áll le (STOP).
    Az a modul amelyik leszakadt, ilyenkor rendszerint azonnal kikapcsolja a kimeneteit.
    A berendezést vezérlő program ilyenkor esetleg nem megfelelően is működhet, mert ha a leszakadt modulon bemenetek is voltak, akkor azok nulla állapotúnak látszanak és a program is ennek megfelelően fog működni. vagyis ha nem írunk hibakezelést az esetre (B tervet) akkor a program nem fogja "tudni" hogy bizonyos bemenetek nem azért nulla állapotúak mert az adott bemenet fizikailag is nulla állapotú, hanem mert kommunikációs hiba van. Sokszor ez nem mindegy :)

    "Illetve milyen változót kell a HMI-re kitenni, hogy a user is lásson ebből valamit ?"

    S7-nél az említett hibakezelő blokk (OB) a megoldás erre, amibe írni kell egy programot ami ad megfelelő jelzést ami aztán meg is jeleníthető (akár szövegesen is).
    Vagy meg kell hívni az SFC51-et (Reading a System Status List or Partial List with SFC 51 "RDSYSST"). EZzel le lehet kérdezni az összes buszon lévő összes eszköz jelenlétét:

    A hibakezelő blokkal kapcsolatban firkáltam már. Itt találod.

  • Hali moseras!

    "De milyen modult kell mellérakni, ha a beavatkozóm egy időalapú jobbra/balra forgást végző szelep ? Egyszerűen az %-ot időre konvertálom, és annak megfelelően nyitom/zárom a szelepet ?
    A másik, hogy ha egy kétállapotú (relé) beavatkozóm van, akkor mit csinálok a PID-el ?"

    A válasz az, hogy nem folyamatos szabályzót (continuous controller) kell használni, hanem léptető vezérlőt (stepping controller).
    Az annyival több, hogy tartalmaz egy PWM vezérlőt is, aminek már nem "analóg" kimenete van, ahnem lét digitális.
    Az egyik a beavatkozó jel növelésére, a másik a csökkentésére szologál.

    Szia.

    Köszi, megtaláltam. Itt egy PID blokk van, annak sok kimenete, benne az analóg, illetve a PWM növel/csökkent is.

    Mondtad, hogy használtok ilyen WAGO-s profibus I/O-kat. Mit csinál olyankor a PLC, ha ezek az I/O-k nem válaszolnak ?

    Megáll minden, vagy csak az amivel kapcsolatos a távoli I/O ?
    Illetve milyen változót kell a HMI-re kitenni, hogy a user is lásson ebből valamit ?

    Köszi

    Imi.

  • Szirty
    őstag

    Sziasztok,

    Lehet-e siemens (s7-300-400 ) plc-nél a DB sorszámát változóval, vagy indirekten, vagy akárhogy megadni? :DD

    PL: minden DB (datablock) 1. bájtját akarom kiolvasni.

    Hali DP_Joci!

    "Lehet-e siemens (s7-300-400 ) plc-nél a DB sorszámát változóval, vagy indirekten, vagy akárhogy megadni? "

    Lehet.
    Így hirtelen két megoldás jut eszembe.
    Az egyik akkor használható ha a DB elérése egy blokkon belül türténik és a DB számát kivülről, paraméterként adod át.
    Ezt teszi lehetővé a BLOCK_DB paraméter típus. A szóbanforgó FC/FB interface részében input változóként megadsz egy BLOCK_DB típusó változót.
    Pl.:

    OPN után a DB-t a T DBWxxx L DBWxxx utasításokkal eléred.

    A másik módszer nyakatekertebb. Össze kell állítani egy ANY pointert úgy, hogy a nekünk megfelelő számú DB-re mutasson (ez akár integer is lehet). Utána egy pointeres címzéssel elérhető a kívánt DB.
    Azért ezzel nem árt vigyázni. Ha rossz DB-re vagy anak nem létező címére hivatkozol, akkor jön a "STOP caused by programming error" :)

  • Sziasztok,

    Lehet-e siemens (s7-300-400 ) plc-nél a DB sorszámát változóval, vagy indirekten, vagy akárhogy megadni? :DD

    PL: minden DB (datablock) 1. bájtját akarom kiolvasni.

  • Szirty
    őstag

    Sziasztok,

    Van valakinek általános vagy bármilyen ismertetője szervókról (beállítások, paraméterek ),még nem használtam.

    Esetleg hasonló doksi robotokról.

    köszi

    Hali!

    SyncPos opció frekiváltóhoz
    MiniStep léptetőmotor vezérlő

    Az alábbi linken a hajtás doksik között is találsz (többet is)
    Omron cuccok

  • Sziasztok,

    Van valakinek általános vagy bármilyen ismertetője szervókról (beállítások, paraméterek ),még nem használtam.

    Esetleg hasonló doksi robotokról.

    köszi

  • Szia!

    Twidora gondoltam. A wifi jellegű (ha nem rádiós lesz a köztes eszköz) adattovábbítás miatt RJ45-ös csatlakotóval és beépített Ethernet modullal.

    Alex

    Szia,

    Igazából a siemens-et ismergetem. ;)

    De használtam már TSX premium PLC-t, Advantys OTB és STB modulokkal, profibuszon és etherneten is, működött.

    http://automatizalas.schneider-electric.hu/index.php?pid=3|tkid=25

    A Twidóról itt találhatsz érdekességeket:

    http://automatizalas.schneider-electric.hu/index.php?pid=9|tid=2

  • Szirty
    őstag

    Sziasztok!

    Találtam beépített PID szabályzót a WAGO-s libekben. Ez egy 0-100 között mozgó REAL-t ad eredményül, ami rendben is van egy analóg beavatkozó egységhez.
    De milyen modult kell mellérakni, ha a beavatkozóm egy időalapú jobbra/balra forgást végző szelep ? Egyszerűen az %-ot időre konvertálom, és annak megfelelően nyitom/zárom a szelepet ?
    A másik, hogy ha egy kétállapotú (relé) beavatkozóm van, akkor mit csinálok a PID-el ?

    Köszi.

    Hali moseras!

    "De milyen modult kell mellérakni, ha a beavatkozóm egy időalapú jobbra/balra forgást végző szelep ? Egyszerűen az %-ot időre konvertálom, és annak megfelelően nyitom/zárom a szelepet ?
    A másik, hogy ha egy kétállapotú (relé) beavatkozóm van, akkor mit csinálok a PID-el ?"

    A válasz az, hogy nem folyamatos szabályzót (continuous controller) kell használni, hanem léptető vezérlőt (stepping controller).
    Az annyival több, hogy tartalmaz egy PWM vezérlőt is, aminek már nem "analóg" kimenete van, ahnem lét digitális.
    Az egyik a beavatkozó jel növelésére, a másik a csökkentésére szologál.

  • Sziasztok!

    Találtam beépített PID szabályzót a WAGO-s libekben. Ez egy 0-100 között mozgó REAL-t ad eredményül, ami rendben is van egy analóg beavatkozó egységhez.
    De milyen modult kell mellérakni, ha a beavatkozóm egy időalapú jobbra/balra forgást végző szelep ? Egyszerűen az %-ot időre konvertálom, és annak megfelelően nyitom/zárom a szelepet ?
    A másik, hogy ha egy kétállapotú (relé) beavatkozóm van, akkor mit csinálok a PID-el ?

    Köszi.

  • Alx6501
    csendes tag

    Szia,

    És milyen a plc?

    Szia!

    Twidora gondoltam. A wifi jellegű (ha nem rádiós lesz a köztes eszköz) adattovábbítás miatt RJ45-ös csatlakotóval és beépített Ethernet modullal.

    Alex

  • Sziasztok!

    PLC-hez keresek olyan köztes modult ami képes lenne az I/O portokat "megnyújtani" (wifi, rádiós modem, ...) segítségével. A porotk száma elég nagy, a távolság viszont néhány 10 méter. Előre is köszi a válaszokat.

    Alex

    Szia,

    És milyen a plc?

  • Szirty
    őstag

    Sziasztok!

    PLC-hez keresek olyan köztes modult ami képes lenne az I/O portokat "megnyújtani" (wifi, rádiós modem, ...) segítségével. A porotk száma elég nagy, a távolság viszont néhány 10 méter. Előre is köszi a válaszokat.

    Alex

    Hali Alx6501!

    "porotk száma elég nagy, a távolság viszont néhány 10 méter."

    Mennyi az az "elég nagy"?
    És milyen válaszidő (sebesség) szükséges?

  • Alx6501
    csendes tag

    Sziasztok!

    PLC-hez keresek olyan köztes modult ami képes lenne az I/O portokat "megnyújtani" (wifi, rádiós modem, ...) segítségével. A porotk száma elég nagy, a távolság viszont néhány 10 méter. Előre is köszi a válaszokat.

    Alex

  • Szevasz moseras!

    "Konkrétan meg lehet e azt csinálni, hogy egy nyomógomb (mint bemenet) egy kimenetet egyszer bekapcsol, egyszer kikapcsol, egyszer inverzbe rak, egyszer pedig a kimenet követi a nyomógomb állapotát, és mindezt attól függően, hogy a művelettípust leíró PLC változómat hogy állítottam be a HMI-ből ?"

    Igen, de ez nem változó típus kérdése, mert ezt már le kell programozni. De természetesen megoldható.

    "- tegyük fel, hogy van olyan PLC-m, illetve HMI-m, amiben van RTC. A user azt szeretné, hogy egy "valami" változó reggel 6-ig egy X értéket vegyen fel, 6-12 között egy Y-t, stb. Ehhez milyen HMI "elem" van (van-e ilyen egyáltalán), illetve ilyenkor az RTC értékét a HMI-SW olvassa ki saját magából, és az alapján küldi el a PLC-nek, vagy a PLC olvassa ki a sajátját(ezt a verziót most nem tudom elképzelni, hogy ez hogyan is működhet) ?"

    Ó igen a klasszikus probléma, amikor a rendszerben több valós idejű óra is van és időtől függő műveleteket akarunk végezni. :)
    Ebben a tekintetben siemens oldalról tudok kiindulni. A legjobb ilyenkor, ha kinevezzük valamelyik eszköz óráját "master"-nek és a többit ehhez szinkronizáljuk.
    Ezzel elérhető, hogy minden óra egyszerre járjon, innentől bármelyik adatait felhasználhatjuk. Én mindig a PLC óráját használom mérvadónak, mert az kikapcsoláskor is ketyeg, a HMI-nél meg ez attól függ milyen fajta. (Bizonyos típusoknál nincs backup áramforrás ehhez.)
    Az időre való kapcsolást többféleképpen is meg lehet oldani. Mindegyikhez kell programozni. A legegyszerűbb összehasonlító műveleteket használni, de néhány PLC-ben vannak idő kezelésével foglalkozó funkciók. Pl. S7-nél van time interrupt.
    Sajnos ilyenkor foglalkozni kell a téli/nyári időszámítással és azzal is,hogy mi van akkor, ha a felhasználó állít az órán. Ezt meg lehetővé kell tenni, hiszen az óra késhet vagy siethet is.

    "tudok-e olyan változókat létrehozni (és ezt HMI-ből állítani), amely azt írja le, hogy az adott műveletet melyik bemenettel és/vagy kimenettel kell végrehajtani ?"

    Igen. Programozással. Pont nem rég volt egy ilyen feladatom. HMI-ről állíthatóan kellett eldönteni hogy egy adott bemenetnek mi legyen a funkciója.
    Erre is több programozási megoldás létezik. Az egyszerűbb, de kevésbé hatékony, az, hogy sok elágazással és összehasonlítással döntjük el mit is kell csinálnia egy kiemnetnek (az össze selképzelhető kombinációra kell egy ág). A hatékonyabb megoldás az indirekt címzés. Ez sokkal nehezebb és a megoldás nagyban függ az adott PLC képességeitől és ezen képességek ismeretétől a programozó szempontjából.

    Szia.

    Köszi. Nagyon sokat segítesz, ha lesz egy saját HMI-nk, akkor te lehetsz az első, aki letesztelheti :)) :R

    Okés, tehát akkor valahogy így ? (ez most C-ül van, de az most mindegy, ha értem, akkor át tudom tenni ST-re vagy FB-re is):

    // ezt a 3 valtozot allitom HMI-bol
    unsigned int plc_pushbutton_desc; // ez a nyomogombot leiro valtozo
    unsigned int plc_output_desc; // ez a kimenetet leiro valtozo
    unsigned int plc_operation_desc; // ez a muveletet leiro valtozo

    switch (plc_operation_desc) {
    case 0:
    bekapcsolo_muvelet(plc_pushbutton_desc, plc_output_desc);
    break;
    case 1:
    kikapcsolo_muvelet(plc_pushbutton_desc, plc_output_desc);
    break;
    case 2:
    inverz_muvelet(plc_pushbutton_desc, plc_output_desc);
    break;
    default:
    inverz_muvelet(plc_pushbutton_desc, plc_output_desc);
    break;
    }

    És akkor ebből kell annyi block-ot felrakni, ahány be/kimenetet megadhatok ?

    Imi.

  • attrax
    aktív tag

    Szevasz moseras!

    "6. Nyomógomb élkezelést (egy nyomásra a kimenet BE, egy másikra pedig KI) hogy lehet létrában megoldani ?"

    A konkrét megoldás függ az adott PLC-től is. Többféleképpen is megoldható, de az elv kb. az, hogy létre kell hozni a nyomógombra egy le vagy felfutó impulzust. Vagyis olyan belső változó bitet, ami egy PLC ciklus ideig aktív lesz, amikor a gomb 0->1 vagy 1->0 állapot átmenetet produkál. Ezután ezzel a bittel invertálni kell egy másik bitet. Ez utóbbi lesz az, amit a gomb egyszer be, aztán ki kapcsol.

    "7. Melyik nyelv a "jó" megoldás a problémákra az 5 közül ? Gondolom ez feladattól függ, de általánosságban mikor jó a létra, mikor jó az ST ?"

    Persze hogy a feladattól függ, hiszen mindegyiket egy-egy feladatra találták ki.
    Ugyanakkor igen nagy az átfedés is, hiszen az alacsonyabb szintű nyelvekkel megoldható a magasabb szintűben írt feladat. A nagyfokú átfedés miatt benne van a válaszban a melyiket szeretem/ismerem dolog is. :)
    De pl. az olyan folyamatok, amik nagyon jól, egymástól elhatárolható állapotokból (lépésekből) áll, azokra valamelyik szekvenciális nyelv a legjobb. Különösen ha a folyamat bonyolult elágazásokból és ágak egyesülésekből álló lépéshalmaz.
    A létra elég alacsony szintű, de elsősorban a logikai kapcsolatok hálózatára van kihegyezve, ebben hatékony (mint az FBD, de a kettő közötti különbség jóformán csak a megjelenítésben van). Összetettebb számításokhoz a létra vagy FBD már elég körülményes tud lenni. Az ilyen program hamar átláthatatlan lesz. Amit létrában 6-7 oldal kiszámoltatni, utasítás listában pár sorban is elférhet.
    Pl. létrában egy pozícionálással foglalkozó programot írni lehet ugyan, de nem biztos hogy az a legjobb megoldás. Viszont jó megoldás ha a pozícionálás részleteivel foglalkozó program pl utasításlistában van írva, ami egy külön blokk és azt létrából hívjuk. Vagyis a blokknak létrából mondjuk meg mikor mit csináljon, de a végrehajtás részleteit (hogy azt hogyan csinálja amit csinál) a blokkon belül STL-ben írjuk meg.
    Mivel az utasítás lista a legalacsonyabb szintű nyelv, ez áll legközelebb a HW-hez. Éppen ezért ez az a nyelv, ami leginkább eltér az egyes gyártmányoknál.

    "8. C, C++-os múltamnmal nekem egyébként az ST tetszik, de a létrát is meg szeretném érteni jól."

    Ez a múlt mindenképp hasznos lesz!
    De a létra kicsit más gondolkodást igényel.

    Csao,én ezt INC utasítással oldottam Omronban. (mármint a ki-be kapcsolgatást) minden gombnyomásrqa lép egy bitet és hozzá rendeltem a címéhez 1 db kimenetet.Tehát 1.gomnxomás egy bit jobbra mégegy nyomás mégegy bit.Érted.Sztem legegyxűbb.
    Nem vagyok nagy plc guru de a programot ami a garázskapumat viszi csatolhatom ha érdekel vkit.

  • attrax
    aktív tag

    sziasztok
    Az a helyzet, hogy az én végzettségem erősáramú berendezés-szerelő, nem értek sokat az elektronikához. Szóval az van hogy szeretnék egy elektromos karbantartói állást, egy multi cégnél, ahol plc vezérlésű gépek vannak és felvételinél, kapásból egy villamos rajz olvasással kezdenek. Nem vagyok teljesen hülye a villamos rajzokhoz, de láttam már párszor ilyen gépek elektromos rajz dokumentációit, ami kurva sok oldalas, és nem teljesen tudom értelmezni őket. Szóval:
    Milyen tematika szerint lehet eligazodni ilyen doksin?
    Néhány irányelvre lennék kiváncsi.
    Hol találok ilyenfajta rajzot hogy addig is tudjam tanulmányozni? (pl. egy konkrét gép sok oldalas rajz dokumentációja)

    Nálunk van felvétel.Priviben írj

  • attrax
    aktív tag

    Hi!
    Én szakmai, illetve hobby szonten foglalkozom LG PLC-kel. Meglepődve tapasztaltam a fórumok böngészésekor, hogy nincs ebben a témakörben topic. Ezzel az új topic-al szeretnék lehetőséget nyújtani a PLC programozással foglalkozóknak, illetve az érdeklődőknek, hogy hasznos információkat cserélhessenek.

    PLC-s lennék énis..

  • Szirty
    őstag

    Szia Szirty!

    Köszönöm.

    Ok, én is így gondoltam a HMI vizualizáció működését. Sajnos még mindig nem vett a főnököm PLC-t, inkább elment nyaralni :O
    Na mindegy, a következő igények merültek még fel a még nem is létező PLC-vel szemben:

    - a bemeneti/kimeneti változókon kívül tudok-e olyan változókat létrehozni (és azt HMI-ből állítgatni), ami az értékével egy művelettípust fog leírni... Konkrétan meg lehet e azt csinálni, hogy egy nyomógomb (mint bemenet) egy kimenetet egyszer bekapcsol, egyszer kikapcsol, egyszer inverzbe rak, egyszer pedig a kimenet követi a nyomógomb állapotát, és mindezt attól függően, hogy a művelettípust leíró PLC változómat hogy állítottam be a HMI-ből ? A user-ek azt szeretnék, hogy ezeket ne csak én (mint leendő PLC programozó) tudjam állítani, hanem ők is ? És persze nekem kell majd hozzá a HMI felületet megtervezni

    - tegyük fel, hogy van olyan PLC-m, illetve HMI-m, amiben van RTC. A user azt szeretné, hogy egy "valami" változó reggel 6-ig egy X értéket vegyen fel, 6-12 között egy Y-t, stb. Ehhez milyen HMI "elem" van (van-e ilyen egyáltalán), illetve ilyenkor az RTC értékét a HMI-SW olvassa ki saját magából, és az alapján küldi el a PLC-nek, vagy a PLC olvassa ki a sajátját(ezt a verziót most nem tudom elképzelni, hogy ez hogyan is működhet) ? Én valami táblázatos vagy diagramos megoldást képzelek el, azon/abban beállítom a kívánt értéket, az idő lenne az X tengelyen, aztán a HMI olvassa a saját óráját, és leküldi az aktuális értéket...Ha a HMI meghal, akkor a PLC a legutoljára leküldött értékkel dolgozna, ez így rendben is lenne...

    - tudok-e olyan változókat létrehozni (és ezt HMI-ből állítani), amely azt írja le, hogy az adott műveletet melyik bemenettel és/vagy kimenettel kell végrehajtani ? Az első kérdésemre visszatérve tehát a user azt is szeretné, hogy melyik nyomógomb melyik kimeneten végezze el azt a műveletet...

    Bocs a szájbarágós leírásért, de csak a magam megnyugtatása miatt írom így le, nehogy félreértsük egymást.

    Köszönöm.

    Imi.

    Szevasz moseras!

    "Konkrétan meg lehet e azt csinálni, hogy egy nyomógomb (mint bemenet) egy kimenetet egyszer bekapcsol, egyszer kikapcsol, egyszer inverzbe rak, egyszer pedig a kimenet követi a nyomógomb állapotát, és mindezt attól függően, hogy a művelettípust leíró PLC változómat hogy állítottam be a HMI-ből ?"

    Igen, de ez nem változó típus kérdése, mert ezt már le kell programozni. De természetesen megoldható.

    "- tegyük fel, hogy van olyan PLC-m, illetve HMI-m, amiben van RTC. A user azt szeretné, hogy egy "valami" változó reggel 6-ig egy X értéket vegyen fel, 6-12 között egy Y-t, stb. Ehhez milyen HMI "elem" van (van-e ilyen egyáltalán), illetve ilyenkor az RTC értékét a HMI-SW olvassa ki saját magából, és az alapján küldi el a PLC-nek, vagy a PLC olvassa ki a sajátját(ezt a verziót most nem tudom elképzelni, hogy ez hogyan is működhet) ?"

    Ó igen a klasszikus probléma, amikor a rendszerben több valós idejű óra is van és időtől függő műveleteket akarunk végezni. :)
    Ebben a tekintetben siemens oldalról tudok kiindulni. A legjobb ilyenkor, ha kinevezzük valamelyik eszköz óráját "master"-nek és a többit ehhez szinkronizáljuk.
    Ezzel elérhető, hogy minden óra egyszerre járjon, innentől bármelyik adatait felhasználhatjuk. Én mindig a PLC óráját használom mérvadónak, mert az kikapcsoláskor is ketyeg, a HMI-nél meg ez attól függ milyen fajta. (Bizonyos típusoknál nincs backup áramforrás ehhez.)
    Az időre való kapcsolást többféleképpen is meg lehet oldani. Mindegyikhez kell programozni. A legegyszerűbb összehasonlító műveleteket használni, de néhány PLC-ben vannak idő kezelésével foglalkozó funkciók. Pl. S7-nél van time interrupt.
    Sajnos ilyenkor foglalkozni kell a téli/nyári időszámítással és azzal is,hogy mi van akkor, ha a felhasználó állít az órán. Ezt meg lehetővé kell tenni, hiszen az óra késhet vagy siethet is.

    "tudok-e olyan változókat létrehozni (és ezt HMI-ből állítani), amely azt írja le, hogy az adott műveletet melyik bemenettel és/vagy kimenettel kell végrehajtani ?"

    Igen. Programozással. Pont nem rég volt egy ilyen feladatom. HMI-ről állíthatóan kellett eldönteni hogy egy adott bemenetnek mi legyen a funkciója.
    Erre is több programozási megoldás létezik. Az egyszerűbb, de kevésbé hatékony, az, hogy sok elágazással és összehasonlítással döntjük el mit is kell csinálnia egy kiemnetnek (az össze selképzelhető kombinációra kell egy ág). A hatékonyabb megoldás az indirekt címzés. Ez sokkal nehezebb és a megoldás nagyban függ az adott PLC képességeitől és ezen képességek ismeretétől a programozó szempontjából.

Új hozzászólás Aktív témák