Hirdetés
- Kína bekérette az NVIDIA-t, de szerintük nincs hátsó kapu a chipekben
- Dedikált NPU-t tervezne az AMD?
- És akkor egy fejlesztőstúdió rájött, hogy vissza is élhetne a felskálázással
- 4 billió dollárt ér a Microsoft, 500 milliárd dollárral lőttek ki az AI-cégek
- Jól áll az ARM-os Windows helyzete, de a játékoknál nem jön az áttörés
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
Új hozzászólás Aktív témák
-
moseras
tag
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-atAz "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_VARImi.
-
Szirty
őstag
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 -
Bandi18
tag
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
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
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. :]
-
Bandi18
tag
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 .
-
moseras
tag
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.
-
moseras
tag
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
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
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. -
Bandi18
tag
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
-
moseras
tag
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.
-
moseras
tag
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
(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
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
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
!
-
Szirty
őstag
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. -
moseras
tag
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.
-
moseras
tag
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
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).
-
-
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..
-
Szirty
őstag
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
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
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
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
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 FAzt 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ó 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! -
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 -
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
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 -
moseras
tag
-
Szirty
őstag
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ástMit jelentenek ezel pontosan? Hogy kell beállítani ezeket a helyes működéshez?
Köszi a segítséget!!! -
Szirty
őstag
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
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).
-
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.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?
-
Szirty
őstag
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
Üdv Mindenkinek!
Omron cpm1- hez adatkábelt, vagy bármilyen elkészítési információt keresnék.
Köszönöm!
Sziasztok!
-
DP_Joci
tag
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.
-
moseras
tag
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.
-
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
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.
-
Szirty
őstag
-
m.gabor
csendes tag
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, -
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 -
DP_Joci
tag
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).
Köszi -
moseras
tag
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
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
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.
-
moseras
tag
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.
-
moseras
tag
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! -
Szirty
őstag
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:=4Ez az MW0-ba írja a DB24 DBW4-et
-
DP_Joci
tag
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 numberValó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
Hali DP_Joci!
L P##DB_pointer_in_any
LAR1Betö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-tL 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 tudomL 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...
-
DP_Joci
tag
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_anyIlyen 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
-
Szirty
őstag
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 -
DP_Joci
tag
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:=DB2A 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. -
Szirty
őstag
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.
-
moseras
tag
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
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" -
DP_Joci
tag
Sziasztok,
Lehet-e siemens (s7-300-400 ) plc-nél a DB sorszámát változóval, vagy indirekten, vagy akárhogy megadni?
PL: minden DB (datablock) 1. bájtját akarom kiolvasni.
-
Szirty
őstag
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 -
DP_Joci
tag
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
-
DP_Joci
tag
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
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. -
moseras
tag
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
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
-
moseras
tag
Szia.
Köszi. Nagyon sokat segítesz, ha lesz egy saját HMI-nk, akkor te lehetsz az első, aki letesztelheti
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
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
válasz
Destructor #1 üzenetére
PLC-s lennék énis..
-
Szirty
őstag
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
- Telefon felvásárlás!! Samsung Galaxy A70/Samsung Galaxy A71/Samsung Galaxy A72
- AZONNALI SZÁLLÍTÁS Eredeti Microsoft Office 2019 Professional Plus
- AKCIÓ! Lenovo Legion Slim 5 Gamer notebook - R7 7435HS 16GB RAM 1TB SSD RTX 4070 8GB GDDR6 WIN11
- BESZÁMÍTÁS! Gigabyte A520 AORUS R5 5500 16GB DDR4 512GB SSD RX 6600 XT 8GB Rampage SHIVA TT 500W
- Felsőkategóriás merev csöves Gamer PC! I7 12700KF / RTX 3090 24GB / 32GB DDR5 / 1TB SSD!
Állásajánlatok
Cég: FOTC
Város: Budapest