- Computex 2024: Ryzen 8840U dolgozik a Zotac kézi konzoljában
- Kormányok / autós szimulátorok topicja
- Milyen processzort vegyek?
- Gaming notebook topik
- A kánikula elviseléséhez hardverek is kellhetnek a napernyő mellé
- Milyen asztali médialejátszót?
- Melyik tápegységet vegyem?
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- OLED TV topic
- Vezetékes FÜLhallgatók
Hirdetés
-
Retro Kocka Kuckó 2024
lo Megint eltelt egy esztendő, ezért mögyünk retrokockulni Vásárhelyre! Gyere velünk gyereknapon!
-
Frissítve! Summer Game Fest 2024 - Az összes bejelentés egy helyen!
gp A show késő este kezdődik, de utána az összes trailert összegyűjtjük egy helyre.
-
Computex 2024: monstrumhűtő a DeepCoolnál (videóval!)
ph Az Assassin IV széria legújabb verziója egy vapor chamber talpat kapott, így már 300 wattig használható.
Új hozzászólás Aktív témák
-
Szirty
őstag
válasz Szakbarbár #3952 üzenetére
Üdv Szakbarbár!
Nem tudom pontosan milyen PLC-vel próbálkozol, nem mindegy, nem írtad le.
Ahogy a FOR-NEXT-ből látom structured text-ben akarod megírni. Megpróbálok a lényegre válaszolni...Létrehozol egy tömböt a FB interface részében (változó definíció): Insert variable -> Array variable bepipál.
Array size-hez beírod a kívánt méretet. AT setting bepipál, Address-hez berod a kívánt kezdőcímet.
Itt egy példa:Ez DM0-DM9-ig feltölti a tömböt 0-9 értékekkel (a ciklusváltozót írja bele).
-
Szirty
őstag
válasz Szakbarbár #3958 üzenetére
Üdv Szakbarbár!
"Egyelőre még csak a létradiagrammal barátkozok"
Akkor hol akadtál te FOR-NEXT ciklusra?
-
Szirty
őstag
válasz Szakbarbár #3960 üzenetére
Helló Szakbarbár!
Hála a pontatlan kérdésednek, fölöslegesen írtam egy választ.
Most csak egy másik fórumon "elhangzottakat" tudom idézni, ami az indirekt címzésről szól:lukacsp írta:
Tegyük fel, hogy a D100 a pointer. A D100 tartalma #0150.
Indirekt címzéshez csak annyit kell tenni, hogy mondjuk azt mondom:
MOV #0001 *D100
Akkor ez az utasítás azt fogja csinálni, hogy a #0001 konstanst beteszi a D150 memória szóba.Tehát végső soron a * előtét jelenti azt, hogy abban a D-ben egy pointer van.
********************************************
Ezt fűztem hozzá:
Nos lukacsp fórumtárs megírta a lényeget, de annyival kiegészíteném, hogy:- Az említett indirekt címzést csak DM memóriaterületre lehet alkalmazni, tehát nem írhatsz olyat, hogy *6 vagy *T20.
- A * prefixumú pointer azt feltételezi, hogy a megadott számú DM memória rekeszben lévő cím BCD formátumú, tehát a címet BCD számkként kell kezelned. Avagy #-el kell megadnod a konstans értékeket, cím számításához BCD műveleteket kell használnod! Ha ezt nem veszed figyelembe, akkor hibát fogsz kapni, vagy elcímzed magad.
- Hasonlóan csak DM területre alkalmazható indirekt címzési mód a @ prefixumú pointer, ami a fentihez hasonló, de a hivatkozott DM tartalmát bináris számként kezeli, így a konstansok megadásánál és a cím számításoknál ennek megfelelő utasításokkal kell dolgoznod.
- Az indirekt címzés harmadik módja az index regiszteres címzés, ahol 15 címző regiszter van fenntartva (IR00-IR15) a pointerek számára. Ezekkel való címzéshez külön címzésmód tartozik és külön utasítások szolgálnak az index regiszterek kezelésére. Operation manualban külön fejezet foglalkozik a használatával (191. oldal). Ezzel nem csak DM területek címezhetők.
-
Szirty
őstag
válasz Szakbarbár #3962 üzenetére
Helló Szakbarbár!
Örülök hogy sikerült!
"Közben rájöttem, hogy a kijelző alapból tudja azt a funkciót amire én ciklust szerettem volna írni."
Ezért mindig jobb ha a kérdés arra irányul amit meg szeretnél valósítani és nem arra, hogy a módszer amit kitaláltál a megoldásra hogyan valósítható meg.
-
Szirty
őstag
válasz Teuton99 #3966 üzenetére
Üdv Teuton99!
Nem lett volna baj ha azon kívül, hogy hiba keletkezik elárulod azt is hogy milyen hiba... (Diagnosztikai buffer kiolvasása).
De gondolom "Area error when reading, Incorrect area ID: 0" volt a hiba.Az L W [AR1,P#0.0] címzésednél nem tudta eldönteni milyen memódiaterületről serettél volna olvasni. Hiába raktad az address regiszter töltésénél oda a terület azonosítót (L P#DBX 0.0)
Ezért a L P#DBX 0.0-t L P#0.0-ra, az L W [AR1,P#0.0] pedig L DBW [AR1,P#0.0]-ra kell cserélni.Ha megteszed, akkor meg a ciklus második lefutásakor szintén lesz CPU stop és kapsz egy szép kövér Alignment errort, mert a ciklusmag végén a cím kiszámításakor nem kezelheted az address rekiszter tartalmát integerként:
CIM2: TAR1
L 10
+I
LAR1Újra ki kell számolnod a pointert a ciklusváltozó aktuális tartalmából!
Ez így nem jó, a cím alsó 3 bitje bit cím, neked meg byte cím kell.
Nézd át ezt, ez így működik:OPN DB 1 //DB megnyitasa
L P#0.0
LAR1
L 0
T MW 20 //temp változó
L DBLG
L 2
/I
T MW 22 //eltároljuk a DB hosszát
L MW 22
L 1
-I
CIM: T MW 24 //a hurokváltozó
L DBW [AR1,P#0.0] //ha az aktuális nagyobb, mint a temp--> csere
L MW 20 // egyebkent ugras
>I
JCN CIM2
//csere
L DBW [AR1,P#0.0]
T MW 20
//index leptetes
CIM2: L MW 24
L 2
*I
SLD 3
LAR1
L MW 24
LOOP CIMUi.: Ha program kódot idézel a fórum üzenetbe, akkor légy szíves használd a "Programkód" nyomógombot a fomázáshoz, mert ha csak bemásolod eléggé szétesik az egész.
[ Szerkesztve ]
-
Szirty
őstag
Üdv attrax!
"őőő bocs hát nyilván azokkal próbálkoztam de nem lehet,mert csak napi/havi/éves időkapcsoló van benne heti nincs!"
Attól hogy nincs rá kész funkció, még megoldható. Ezt programozásnak hívják ;-)
Szóval fogsz 3 darab heti kapcsoló órát. Az egyiket beállítod a hét legelejére (vagy legvégére), aminek a kimenetével on/off módon billegtetsz egy bitet.
Egy másik kapcsoló óra lesz a páros hetekhez tartozó a harmadik a páratlan hetekhez tartozó. Az említett bittel meg választasz közülük, hogy melyik legyen hatásos. -
Szirty
őstag
válasz KB.Pifu #3978 üzenetére
Üdv KB.Pifu!
"Ezzel nem egyenértékű a SLD 4 használata?"
A program működése szempontjából teljesen egyenértékű.
Mégis a "szószátyárabb" megoldást szoktam használni (és javasolni), mert így olvashatóbb a kód és kényelmesebb a felhasználása.
Ha pl. nem INT típust akarok címezni, hanem DINT-et, akkor csak átírom a szorzást 4-re. Ha byte-ot, akkor kiveszem a szorzást és a Load-ot. De a pointernél mindig ott marad az SLD 3. -
Szirty
őstag
válasz Szakbarbár #3980 üzenetére
Üdv Szakbarbár!
Készített már valaki PLC-hez alkonykapcsolót?
Igen. Pontosabban nem hozzá, hanem vele.
Egy 25000 négyzetméteres csarnok világításához annak idején. Világítási zónák különböző (állítható) fényerőnél kapcsolnak be és ki (+beállítható időre).
Én egy olyan relés alkonykapcsoló fényérzékelőjét használtam, aminek külön van beltéri (az elektronika) és kültéri (a fény érzékelő) része.
A fény érzékelőjét (fotoellenállás) használtam fel de én 0-10V-os analóg bemenetre kötöttem, hogy a kapcsolási küszöb szoftveresen állítható legyen.Ha digitális jelet akarsz, akkor mi sem egyszerűbb, az alkonykapcsoló reléjét egy az egyben rákötöd a PLC digitális bemenetére.
Vagy nem kész alkonykapcsolóban gondolkozol, hanem te építenéd? Akkor mi lenne az érzékelő elem (ami a fényt érzékeli)?
[ Szerkesztve ]
-
Szirty
őstag
válasz Szabónagymer #3996 üzenetére
Helló Szabónagymer!
"Ha összegzem az órák számát, a hétvégéket levonva, kb egy hónapra jönne ki, ha mindenapos okatás lenne. Az érdekelne, hogy mennyire lehet megtanulni a programozást ennyi idő alatt?"
Ez egy szakma, amit mások évekig tanulnak... gondolj erre.
-
Szirty
őstag
válasz KB.Pifu #3995 üzenetére
Üdv KB.Pifu!
Tehát. Ez egy buborék algoritmus. Két ciklusból áll. A belső (LOOP) a tömb végétől at elejéig lépked végig. Ha az indexelt érték (amire a ciklusváltozó mutat) nagyobb, mint az őt követő, akkor felcseréli a kettőt.
Ezt a ciklust egy külső ciklus tartalmazza, ami addig ismétlődik, amíg volt csere.A #Sort_done egy boolean, amit annak jelzésére használ, hogy a belső ciklus végigfutása során volt-e csere.
Ha nem volt, akkor a rendezés kész és kilép (a külső ciklusnak ekkor van vége).A #Sort_done változót minden alkalommal a belső ciklus elején TRUE állapotba állítja be a
SET
S #Sort_done;Utasításokkal. Amikor adatcserét hajt végre a ciklusmagban, akkor a #Sort_done-t FALSE állapotúra állítja az
SET
R #Sort_doneutasításokkal. Így amikor a ciklus lefut, a #Sort_done TRUE lesz ha nem volt adatcsere és FALSE lesz ha volt. Ezért a külső ciklus kilép ha a #Sort_done TRUE, mert akkor a rendezés készen van.
Az RLO-t azért kell SET-be állítani, mert az S #Sort_done utasítás feltételes. Avagy a #Sort_done csak akkor kerül TRUE állapotba, ha az RLO is TRUE! egyébként nem nyúl hozzá. Az R #Sort_done szintén feltételes, csak akkor törli a #Sort_done-t, ha az RLO TRUE!
Mindez kiderül az S és R utasítások leírásából is.
Description of instruction
"S (set bit) places a "1" in the addressed bit if RLO = 1 and the switched on master control relay MCR = 1. If MCR = 0, the addressed bit does not change."
A bit feltétel nélkül így állítható meghatározott állapotba.
De így is:SET
= #Sort_donevagy
CLR
= #Sort_doneÉn ezt a változatot szoktam használni, mert (nekem) beszédesebb.
"azért büszkén mondom, hogy magamtól rájöttem, m003 után az AR-t egyszerűbben is lehet növelni"
Elárulod nekünk a módszeredet? :-)
[ Szerkesztve ]
-
Szirty
őstag
válasz KB.Pifu #4004 üzenetére
Szevasz KB.Pifu!
"Megmondom őszintén azt hittem a SET a program lefutásában valami magasabbrendű kulcspozíciót játszik"
Semmi gond! Majd lesz olyan ami magasabb rendű kulcspozíciót játszik, csak annak nem fogsz jelentőséget tulajdonítani. :-)
Ez egy ilyen történet és tanulás a neve. Mindenki aki ért hozzá átesett rajta. Vagy ha az jobban hangzik: mindenki aki átesett rajta ért hozzá.
Vagy ha az mégjobban hangzik: szívás nélkül nincs tudomány.Az F1 nyomkodása persze hasznos, de rendszerint az összefüggések erdejében még a help mellett is magunknak kell eligazodni. Na ebben szívesen segítünk szerintem.
Mellesleg a help idézetet nem célzásnak szántam, hanem a mondandóm alátámasztásának. -
Szirty
őstag
válasz soldi3r #4008 üzenetére
Üdv soldi3r!
"...nalunk az elektromos hibak teszik ki az allasido 70%-at."
Ez teljesen hihetetlen amit írsz. Nem nagyon láttam még ilyet.
Ha tényleg így van, akkor az a rendszer valamiben nagyon eltér az "átlagostól". Ilyenről csak azoknál a rendszereknél hallottam, ami rettentő rosszul van megalkotva (gyk. nagyon kókány) vagy rosszul vagy egyáltalán nincs dokumentálva (kommentezett forrás program, aktuális villamos rajz, helyesen feliratozott tervjelek részleges vagy teljes hiánya, stb).A saját tapasztalataim alapján teljes mértékben meg tudom erősíteni KB.Pifu sejtését, miszerint:
"termelő területen a villamos és plc -s hibák elenyésző mennyiségűek a mechanikus hibákhoz képest."
Ez valóban így van.
Nagyon nagy szerepet játszik még a történetben (hibák miatti állás) az emberi tényező is. A gépkezelők olykor komoly problémákat tudnak okozni.A sok elektromos hiba miatti állást úgy is el tudom képzelni (ami már nálunk is előfordult) hogy a gépkezelőknek írni kell az állás okát. Amikor a berendezés megáll és ad egy hibajelzést, pl.: időtúlfutás hiba) akkor beírják,hogy "elektromos hiba" és hívják a villany/automatizálási szakit. Aki odamegy, kiveszi a beesett, begyűrt kartonpapírt a munkahenger elől, ami miatt az nem érte el időhatáron belül a véghelyzetet és elindítja a gépet.
Ez a felső vezetés számára az említett napló alapján úgy jön le, hogy elektromos ok miatti állás, hiszen az elektronika írta ki a hibát és az elektromos szakember hárította el. Ez is egyike az említett emberi tényezőnek.Aztán az is elektromos hiba volt, amikor egy verőfényes kora őszi napon a gyártól mintegy 4km-re egy traktoros szántással ütötte el lassan cammogó munkaóráit. Egyszer csak hirtelen elé ugrott egy 20kV-os távvezeték oszlop. Sajnos az eset olyan hirtelen történt, hogy a traktorral már nem tudott megállni és kitörte a beton "A" oszlop egyik szárát, minek következtében megsérült a rajta lévő oszlopkapcsoló. A sérülés miatt az egyik fázison átívelés jött létre. A traktoros szakember egy "hoppá" (vagy "miaf..szom") felkiáltással eltraktorozott onnan.
Az eset következtében a gyárban az egyik fázis feszültsége véletlenszerű időközönként leesett, ami miatt a frekvenciaváltók és szervóhajtások elkezdték tömeges "Main phase loss" és "DC link undervoltage" hibákkal szórakoztatni a jelen lévő gépkezelőket és karbantartókat. Ez 4-5 óra állással járt, kezdve a hiba okának feltárása után az áramszolgáltató ügyeletének telefonos hívogatásával...
persze ez valóban elektromos hiba és igen van ilyen is, de igen ritka. (20 év alatt egy ilyen volt).
A villámcsapás miatti pillanatnyi áramszünet szezonálisan rendszeres (és problémákat okoz) ugyan, de ezeknek sem a gépek az okai.Néhány konkrét eset leírásával illusztrálhatnád mik a leggyakoribb elektromos hibák amik ennyi állást okoznak nálatok. Kíváncsi vagyok rá.
[ Szerkesztve ]
-
Szirty
őstag
...vagy amikor a robot felveszi a kartonpapírt, de szarok a szívófejek vagy az ejektor bezabált porral, vagy a karton görbe és aközben ejti el, miközben fordul. ..és a papír röppályája metszi a robot alatti csomag érzékelő fotocella infrasugarát, minek következtében a vezérlés azt hiszi, hogy megérkezett a csomag. Ettől a robot fogja magát és felveszi a semmit, amit annak rendje és módja szerint oda "tesz" ahova a valamit kellene. Ha ezt nem veszik észre, akkor a következő körben leborul az egész a francba.
Na ere is beírják, hogy elektromos hiba: ok: a program megbolondult :-) -
Szirty
őstag
Helló rsf!
Tipikus. Valószínűleg ide mindenhol eljutnak.
Nálunk is sokszor szoftveresen oldunk meg problémákat.
Szerintük. Valójában csak a mechanikai hibák következményeit próbáljuk elfedni. Tüneti kezelés rox!Laza a lánc? Tegyünk be egy timert és kész is :-)
[ Szerkesztve ]
-
Szirty
őstag
Helló 9tomi9!
Az Init value csak kezdeti érték! Akkor veszi fel az adott cím az INIT value értékét, amikor létrehozod és először feltöltöd (amikor még nincs actual value). Minden más esetben actual value értéke lesz. Főleg ha a PLC-ben nézed és a program írja is az értékeket.
A 2-es képen lévő kérdést nem értem.
Minek kellene 7810-nek lennie és miért? Nem értem!
Az a programrészlet annyit csinál, hogy MD1500-al címzi a DB161-et.
Odaírtad a szorzás utáni T MD1500-hoz, hogy 62480. Az mi? Annyi van az MD1500-ban? Mekkora a DB161? Mert azt az MD1500 fogja címezni a következő sorban (L DBW [MD1500])!3.
CALL SFC 21
BVAL :=P#DB160.DBX 0.0 INT 1
RET_VAL:=DB160.DBW20
BLK :=P#DB151.DBX 20.0 WORD 2020
NOP 0Az SFC 21: Initializing a Memory Area with SFC 21 "FILL". Memóriaterület feltöltése aditt mintáva (vagy értékkel).
A fenti hívás a DB160.DBW0-ban található értékkel feltölti a DB151-ben DBW20 címtől kezdve 2020 word-öt
A többi SFC21 ugyanezt csinálja, csak a SB152, DB153, DB154 adatblokkokkal.4.
Az SFC39 letiltja az OB35 ciklikus megszakítást (nem fut le a tiltás után egészen addig, amíg SFC40-el a program nem engedélyezi újra).Ui.: Ha nem screenshotokat, hanem szöveges forrásprogramot raknál a kérdésbe, nem kellene begépelnem a kódot a válaszba :-)
[ Szerkesztve ]
-
Szirty
őstag
Üdv 9tomi9!
Ha a DB-be lévő értéket akarod módosítani, akkor a DB-ben lévő értéket kell átírni nem az initial value-t!
Mint írtam az initial value csak a kezdeti értéke a változónak (default). Akkor veszi fel azt az értéket, amikor a DB létrejön (illetve ha bizonyos feltételek szerint módosul a szerkezete).Javasolnám a DATA VIEW nézetet! :-)
(Ctrl-4 a szerkesztőben) -
Szirty
őstag
Helló 9tomi9!
Nem azt akartam tudni hány soros a DB 161, hanem mekkora a mérete! Byte-ban!
Mert ha DB150.DBW 32-ben 3905 van, amit 16-al megszorozva 62480 lesz, akkor a L DBW [MD 1500] utasítás a DB161-ből megpróbálja kiolvasni a 62480-as byte címen lévő word-öt. Ha a DB161-ben tényleg 8000 byte (már ha sor alatt ezt kell érteni) akkor az nem fog neki sikerülni, mert a DB161-ben nincs ilyen cím!
Ez egy area length errort szül! -
Szirty
őstag
válasz KB.Pifu #4033 üzenetére
Helló KB.Pifu!
Nem hiszem hogy erre a kérdésedre lehet olyan egyetemes választ adni ami egyértelműen és univerzálisan cáfolja vagy alátámasztja valamelyik megoldást.
Egy kód megírásánál nagyon sok szerepet játszik a program írójának ismerete, beidegződései (szokásai) motivációi (pl. hogy akarja-e hogy más megértse a kódot, vagy az a célja hogy érthetetlenné tegye).A programozásban egyes feladatokra (főleg a komplex feladatok részleteit nézve) rengeteg alternatív és egyformán jó megoldás születhet. Persze vannak kifejezetten rosszak is.
Néha nehéz eldönteni melyik a jobb. Meglepő lehet, de a dolog részben szubjektív is.Bizonyos (programozástechnikai) szempontból (ha van ilyen egyáltalán) a +AR1 P#2.0 összehasonlíthatatlanul elegánsabb mint az, hogy újra és újra kiszámoljuk a pointert a ciklusváltozó aktuális értékéből. A legtöbb feladat szempontjából azonban jelentéktelen részletkérdés és mind a kettő egyformán megfelel. Az hogy "demoscene" alkalmából fejlövés járna az utóbbihoz hasonló megoldásért szintén érthető a "demoscene" szempontjából egyértelmű.
A cél is fontos, nem csak a megoldás ami oda vezet :-)
-
Szirty
őstag
válasz KB.Pifu #4039 üzenetére
Üdv KB.Pifu!
Ha az N alatt a táblázat indexét érted, akkor úgy, ahogy az általad idézett kódban is van, vagyis relatív ofszettel.
A hivatkozott kódban ez a rész tartalmazza:
Loop: T #Count //FOR INDEX = Count TO DB_length
L W [AR1,P#0.0] //IF M(INDEX) > M(INDEX+1) THEN
L W [AR1,P#2.0]
<=IÉs ez is:
L W [AR1,P#2.0] //LET M(INDEX) = M(INDEX+1)
T W [AR1,P#0.0]Itt egy példa még:
OPN DB 2
L P#DBX 6.0
LAR1
L DBW [AR1,P#0.0]
T MW 0
L DBW [AR1,P#2.0]
T MW 2Ez a DB2.DBW6 tartalmát MW0-ba rakja, a DB1.DBW8 tartalmát pedig MW2-be.
-
Szirty
őstag
válasz KB.Pifu #4041 üzenetére
Üdv KB.Pifu!
Sajnálom, de nem világos teljesen mit szeretnél. Igazából a feladat egésze nem világos, mert csak egészen apró részletekkel szolgálsz.
Volt már szó sorbarendezésről, meg egy adathalmazban a legnagyobb érték kereséséről is. (Azt sem értettem teljesen, a legnagyobb érték kereséséhez nem szükséges sorbarendezni az adatokat)."Én a #counter értékét szeretném menteni, ugye ha talál pár egyforma számot akkor azt növeli, de ha ==I -ra nem talál egyenlőséget akkor jelenti azt, hogy az érték megváltozott és nullázni valamint menteni kell hogy a következő alkalommal mikor szintén 0 az RLO az össze tudjam hasonlítani."
Itt most egy DB-ben egymást követő értékeket hasonlítasz össze egymással ha jól látom.
És számolod hány eltérés volt az egymát követő adatokban? ha egy sem, akkor az egész DB ugyanazt az értéket tartalmazza végig. Tenni akarsz valamit, ha két egymást követő érték eltér? -
Szirty
őstag
válasz KB.Pifu #4047 üzenetére
Üdv KB.Pifu!
Ha van tengernyi szabad időd leírnád a kedvemért egészen a legeslegelejéről egészen pontosan mi a feladat?
Az az érzésem ezek a töredékinformációk durván félrevezetnek.
Ha a kérdésben te érted mi a probléma, szerintem nem elég.
Tudod! Nem szeretek két soros kérdésre 20 oldalas válaszokat írni, hogy aztán azt írják: "ja nem erre gondoltam!" -
Szirty
őstag
válasz KB.Pifu #4051 üzenetére
Szia!
Igen, STL a Siemens S5-S7 esetében a PLC "assembly-je" avagy az alacsony szintű nyelve. Minden magasabb szintű nyelv erre fordul le. Ez azonban nem indokolja azt, hogy mindent STL-ben írj, de indokolja azt, hogy az STL-t megismerd!
Bizonyos feladatok létrában vagy FBD-ben sokkal jobban átláthatók, sokkal gyorsabban megy vele a munka és hatékonyan lehet hibát keresni.
Konkrétan a sok logikai feltételt tartalmazó összefüggésekhez kiváló (erre való).Ugyanakkor más feladatra, mint pl. számítások végzése, adatok kezelése sokszor jobb az STL vagy más, magas szintű nyelv (pl. az SCL). Ezeket is meg lehet csinálni létrában, de ott meg ez lesz nehézkes és nehezen átlátható.
Az STL/LAD illetve STL/FBD nyelveket egy blokkon belül is váltogathatod. (TIA portálnál már nem).
"Mondjuk letöltök a PLC-ről egy programot, amit valaha ladderban írtak, azt minden esetben vissza lehet alakítani?"
Ha létrában írták és nem pancsoltak bele STL-ben akkor ezt meg tudod jeleníteni létrában. Ám az STL-ben készült blokkokat nem, vagy csak ritkán lehet létrában megjeleníteni (aez attól függ hogyan írták meg).
-
Szirty
őstag
Helló rsf!
Létrában is lehet byte-okat kezelni minden probléma nélkül. Jól használható shift regiszter is van több fajta is.
SHR_I, SHR_DI, SHR_W, SHR_DW, SHL_DW, SHL_W, ROL_DW, ROR_DW. Ezek utasítások, de vannak beépített funbkciók is. Az WSR és az SRHB. Ezek nem felelnek meg?Alapból kb 250 funkcióblokk van. Ebben nincs benne a letölthető (pl. PID control) vagy HW eszköz mellé kapott (Pl. motion controller, stepper, terepi buszos eszközök kezelése) blokkok.
Persze hogy melyik milyen komplex és mit értesz pontosan komplex alatt azon biztosan lehetne vitatkozni.Elvárhatnánk hogy legyen palackozó funkció blokk. Jól jönne egy palackozó gép vezérlésében. :-)
Viccet félre téve én erre azt tudom mondani, hogy bármennyi blokk legyen is a könyvtárban, mindig olyan kell ami nincs benne, vagy ami van benne arról nem tudunk. Vagy tudunk, de nem pont úgy működik ahogy nekünk kell, vagy van ugyan olyan valami, de fogalmunk sincsen hogyan működik.
Minél komplexebb blokkokról beszélünk annak esélye, hogy így járunk exponenciálisan egyre nagyobb.
Ami nincs meg azt meg lehet írni. Én is ezt csinálom. Könyvtárat is csináltam amibe a saját blokkjaimat tartom és onnan veszem elő ha kell. Kb 90 funkció van benne de még mindig ott tartok hogy sokszor pont az nincs ami épp kellene. Megírom, beleteszem. Erről szól az a munka amit programozásnak hívnak. :-)A különböző gyártók eszközei eltérőek. Eltérő tudásúak, eltérő koncepciót követnek.
Engem omronnál bosszant konkrétan, hogy kevés időtag fajta van benne, az is mind on delay jellegű. Meg az, hogy a számtalan adattípusaival káoszba sodorja a programozást. Meg az, hogy a dátum típusú adatok kezelése körülményes. Meg az hogy kétféle indirekt címzés van, BCD és bináris (az újabbaknál indexelt, ami jó). Sorolhatnám még, de minek? Az Omron ilyen, hit vitát semmiképp nem szeretnék folytatni.Indirekt címzés nincs és adatkezelés nehézkes létrában ez tény.
Ennek szerintem az az oka, hogy a létradiagram nem arra való. Számítgatásokhoz alkalmasabb az STL vagy egy magasabb szintű szöveges nyelv (SCL pl).
Ha egy nem is olyan összetett számítást létrában csinálsz 4-5 oldal lesz tele négyzetekkel amik mellett feliratok vannak. STL-ben meg elfér egy képernyőn, könnyebben áttekinthető. Ugyanúgy, ahogy létrában meg a logikai hálózatokat könnyebb átlátni. Főleg amikor hibát keres az ember (monitorozza).Nem hiszem hogy érdemes lenne egyenruhaként létradiagramot húzni minden feladatra vagy épp mindent STL-ben csinálni.
-
-
Szirty
őstag
válasz KB.Pifu #4063 üzenetére
Helló Pifu!
Nos nekem van pár ötletem.
De az a helyzet, hogy egy megoldásnak akkor látjuk értelmét, ha ismerjük a problémát is.
Márpedig egy feladat megoldásához nem szívesen kezd az ember ha nem látja értelmét a megoldásnak.
Az én válaszom vonatkozásában ott lesz a baj, hogy szinte csak címszavakban tudok itt gyakorlatias feladatokat felvázolni, mert a részletes ismertetése oldalakba és órákba kerülne.De azért felsorolok párat ami eszembe jutott.
- Kapcsoló óra funkció (több időre beállítható ki és bekapcsolással (nap, óra perc, esetleg havi, heti ismétlés)
- Képzelj el egy szalagrendszert, ami úgy fest, hogy szállító szalagok egymásnak adják át a szállított anyagot. Egyik hordja a másikra. A feladat olyan üresre járatási funkció, ami felfüggeszthető, vagyis ha a kijáratási művelet alatt valamilyen okból megállítják a szalagokat, akkor újra elindítva a kijáratás folytatódik (nem marad abba és nem kezdődik elölről).
- Legyen egy célgép, ami munkadarabokat munkál meg. Számold a munkadarabokat és jelenítsd meg HMI-n úgy, hogy látható legyen melyik órában hány darab készült. Ábrázolhatod oszlop grafikonon is. Esetleg megtoldható azzal, hogy a munkadarabok elkészítése közötti időt méri és ezeket ábrázolja. Az ilyesmit egyszerűen imádja az üzemvezetés :-)
- Berendezéseknél gyakori a kenőanyag szivattyú és a hozzá tartozó kenőanyag áramlás vagy olajnyomás kapcsolóval ellenőrzött kenés. ha megy a szivattyú és x ideig (néhány mp) nem jön jel a nyomás (vagy áramlás) érzékelőről, akkor leáll hibával a gép. Ez ok. De készíts olyan ellenőrzést, ami ezen felül a nyomás (áramlás) érzékelő hibáját is felderíti. Ha a szivattyú x ideje áll, de a nyomás (áramlás) érzékelő érzékel, akkor érzékelő hibát kell jeleznie.
- Készíts olyan blokkot, ami analóg bemenetről érkező (0-27648) értéket beállítható fizikai mennyiséggé skáláz. Pl. ha az analóg bemeneten egy 200 bar-os távadó van, akkor a 0-27648-at alakítsa 0-200 tartományra. Ilyesmire gyakran van szükség.
- Valósíts meg az előző blokkal (vagy azt egészítsd ki) olyan küszöb érték kapcsolót, aminek állítható hiszterézise van. Tehát beállítasz 114 bar nyomást, az legyen a hiszterézis tartomány fele. Ha a mért érték átlépi hiszterézis tartomány tetejét, akkor kapcsoljon be egy bitet, és csak akkor kapcsolja ki, ha a mért érték a hiszterézistartomány alja alá esik.
- Készíts üzemóra számlálót, ami valaminek a működési idejét méri. A számláló tartalma órában vagy tized órában legyen elérhető. De a számláló legyen képes a nagyon gyakori (néhány másodperces) szakaszos üzemű jel mérésére is!
- Csinálj olyan hibajelző rendszert, ami hang és fényjelzést ad. ha hiba keletkezik, világítson egy visszajelző lámpa és szóljon egy kört. Legyen egy nyugtázó gomb, amivel a kürt elhallgattatható.
A lámpa világítson amíg a hibajelzés meg nem szűnik. Ha a hibajelzés a nyugtázás nélkül szűnt meg, a hibamentes állapot is hallgattassa el a kürtöt. Ha van hibajelzés és a kürtöt nyugtázták (elhallgattatták) de a hiba nem szűnt meg viszont egy újabb hiba keletkezik, a kürt szólaljon meg ismét. Legyen legalább 32 egymástól független hibajelzés kezelésére alkalmas.- Készíts olyan programot ami egy gépen lévő mágneses reteszelésű ajtónyitó biztonsági kapcsolót kezel. A biztonsági kapcsoló ajtó nyitó elektromágneses reteszkioldását egy kimenet kapcsolja be. Amikor a kimenet aktív, a retesz kioldódik és az ajtó nyitható. Az ajtó nyitva helyzete egy bemenetre is vissza van vezetve. Az ajtó mellett van egy ajtó nyitás kérő világítós nyomógomb. A kezelő a gomb megnyomásával kéri az ajtó nyitását a géptől. A kérést a gomb lámpájának villogása jelezze. A kérés hatására a gép nem indít újabb műveleti ciklusokat (mozgásokat) de a folyamatban lévőket befejezi. Amikor minden mozgási ciklus befejeződött, a program oldja az ajtó reteszt és a gomb lámpája folyamatos fénnyel jelezze, hogy az ajtó nyitható. Az ajtó nyitása utáni becsukása törölje a nyitás kérést és engedje el a mágneses reteszt a következő kérésig (a gomb lámpája is aludjon ki)!
[ Szerkesztve ]
-
Szirty
őstag
válasz DP_Joci #4074 üzenetére
Helló DP_Joci!
Nem szeretném ha összeakadnátok. Mellesleg sörösló tapasztalt róka, talán ezúttal a rossz végénél fogta meg a kérdésed :-)
Nem sok tapasztalatom van S7-1200 és szervó kapcsolatárval. De sok szervóval találkoztam már.
Bizonyos "megérzéseim" vannak a dologgal kapcsolatban. Ilyenbe amit te írsz akkor futottam bele amikor léptetőmotor szervóval foglalkoztam. ha arról levettem a motor áramot (bármi miatt) akkor utána el kellett sétáltatni refpontra minden alkalommal. De ennek ott az az oka, hogy a motoron nincs enkóder vagy egyéb pozíció visszacsatolás. A motorlépések számlálásából tudja az aktuális pozíciót, de ha a motoráram megszűnik, akkor nem garantálható hogy a hajtás nem mozdul el, még a fék jelenléte ellenére sem, ezért t a motor áramot kint kell tartani végig.Más szervós megoldásoknál meg több megoldás is van. A leggyakoribb az, amikor a hajtás megállása után (10-40 másodperc) az elektromechanikus féket lekapcsolja (így az fogni kezd) és 1-2 másodperc múlva megszünteti a motor gerjesztését. Onnantól a terhet a fék tartja.
Gondolom valami ilyesmit szeretnél megoldani.Próbálj meg a szervó vezérlő blokk és a motorvezérlés közé beiktatni további feltételeket.
-
Szirty
őstag
válasz DP_Joci #4077 üzenetére
Üdv DP_Joci!
A történetet szépíti, hogy a biztonsági leállításnak hardveres reteszeléssel kell megszüntetnie a motor gerjesztését (megszüntetni mindenféle teljesítmény áramát) és a féket is el kell engedni.
Az viszont nem szép ha ezután mindig kell egy referenciamenet...
[ Szerkesztve ]
-
Szirty
őstag
válasz wolfman87 #4081 üzenetére
Üdv wolfman87!
"Szeretném elkezdeni a programozást S7-ben"
Milyen S7?
S7-200? S7-300? S7-400? S7-1200? S7-1500?"Kell hozzá WinCC6.2, de egyszerűen nem tudom honnan letölteni."
Az egy SCADA rendszer, kereskedelmi szoftver azért nem tudod letölteni. Miért kell hozzá? És konkrétan mihez kell?
Új hozzászólás Aktív témák
- Iphone 6S silver 64GB 81%akku
- Lian Li O11 Dynamic LIMITÁLT SZÉRIÁS (2000 darab összesen) ház (PCMR Edition)
- HP Prodesk 600 G4 DM mini pc, G5420T, 4-8GB RAM, 120-240GB SSD, 2 év gari, áfás számla
- HP Prodesk 600 G4 DM mini pc, G5500, 4-8GB RAM, 120-240GB SSD, 2 év gari, áfás számla
- Igényes, játékra összerakot gép.
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen