Új hozzászólás Aktív témák
-
Szirty
őstag
válasz
mcwizard
#4110
üzenetére
Üdv mcwizard!
A lokális változók a hívás végén nem törlődnek. A rendszer nem törli őket szándékosan. Ám a tartalmukat nem szabad figyelembe venni a blokkon belül azelőtt, hogy értéket adtunk volna neki.
Az ok rendkívül egyszerű: A lokális változók tartalmát más blokkok lokális változói felülírhatják ha használnak lokális változót illetve ha írják azokat. Így minden blokkban minden lokális változó tartalma lényegében határozatlan, memória szemét van benne. Egyszerűen azért, mert minden blokk ugyanazt a stack-et (memória területet) használja a saját lokális változói tárolására.
Ezért ha csak egyetlen egy blokkod van ami ír egy lokális változót, de a többi blokkban is létrehozol változókat amik így ugyanarra a címre kerülnek, ám azokat nem írod csak olvasod, akkor azt fogod tapasztalni hogy amikor az író blokk megváltoztatja a lokális változó értékét, akkor az a többi blokkban is megváltozik. Illetve az író blokk elején is az az érték van benne amit utoljára beleír.
Ha azonban nem "steril", hanem olyan programban vizsgálnád meg ugyanezt a jelenséget ahol különböző blokkok különböző célra intenzíven használnak különböző belső változókat a saját céljukra (a gyakorlatban minden program ilyen lényegében) akkor gyökeresen mást tapasztalnál.
Ha tehát arra hagyatkozol amit most tapasztaltál, annak vége igen nagy szívás lehet. Ezért nagyon fontos szabály, hogy egy blokkban lokális változót SOHA nem használunk fel azelőtt a blokk lefutásán belül, hogy annak értéket adtunk volna!
-
Szirty
őstag
válasz
KB.Pifu
#4107
üzenetére
Szevasz Pifu!
Csinálhatod úgy is, hogy lerajzolod háromszor és mindegyiknek a láthatóságát kapcsolgatod egy bittel de az nem túl szép megoldás.
Ha sok ilyen van egy screenen az körülményessé teheti a szerkesztését. Állandóan kotorászni kell az egymásra helyezett, a szerkesztőben egymást kitakaró objektumok között. vagy ha mindegyiket külön layer-re teszed az könnyíthet a helyzeten, de akkor meg a layereket kell kapcsolgatni ha módosítani kell rajtuk.Amennyiben a szimbólumod grafikus primitívekkel rajzoltad (kör, vonal, négyzet, stb) akkor én az animation / appearance segítségével oldanám meg a dolgot.
Csináltam erre egy példa projectet. Két lehetőséged van:Egy integer változó (a példában ez MW10) van hozzárendelve egy szürke hátterű és fekete keretű téglalap animation / appearance tulajdonságánál. Az integer egyes értékeihez eltérő háttérszíneket rendeltem hozzá.
Amikor az MW10 tartalma 1, akkor a téglalap színe piros lesz, ha 2 akkor narancssárga, ha 3 akkor citromsárga, ha négy akkor zöld. Minden más érték esetén a téglalap eredeti, tehát szürke színű lesz.
Itt tehát az MW10 integerbe kell a PLC programban különböző értékeket írkálni a szín megváltoztatásához.A másik lehetőség a bitenkénti színváltás (binary appearance).
Egy byte változó van létrehozva ami az MB12 merker byte-ra hivatkozik. Az animation / appearance itt binary-re van állítva ahogy a képen is látható. Ilyenkor a színek nem a változó értékéhez, hanem annak bitjeihez rendelődnek hozzá a következőképpen:
Ha az M12.1 TRUE, akkor a téglalap piros lesz, Ha M12.2 TRUE, akkor narancssárga, ha M12.3 akkor citromsárga, ha M12.4, akkor zöld.
Ennél a megoldásnál arra kell figyelni, hogy ha a megadott bitek közül nem csak egy TRUE, hanem több is, vagy a byte olyan bitje TRUE, ami nincs felsorolva, akkor a téglalap eredeti (azaz szürke) színű marad!Amennyiben a megjelenített szimbólumod előre megrajzolt grafika, akkor is megoldható a dolog, de teljesen máshogy. Ennek a leírásától most eltekintenék, mert túl hosszú lenne ez az üzenet...
-
-
-
Szirty
őstag
válasz
DP_Joci
#4087
üzenetére
Helló DP_Joci!
"Itt nem csak az inkrementális vagy abszolút a probléma"
Nem a visszacsatolásra írtam, hanem a pozícionálás jellegére.
Az visszacsatolás nélkül is inkrementális pl. egy léptetőmotornál, mivel a vezérlő csak a hajtás relatív elmozdulásáról tud, az abszolút helyzetéről nem. -
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?
-
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...
-
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
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)!
-
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
#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
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
#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
#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
#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
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
Ü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!
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 :-)
-
-
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
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á.
-
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
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? :-)
-
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
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)?
-
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
Ü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
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.
-
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
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
#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
#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
Üdv attrax!
0BA6-al nem lesz gond.
Itt egy példa:
B002 egy analóg amplifier, ami jelen beállítással nem csinál semmit (ami bemegy az jön ki). Azért van rá szükség, mert a timernek nem lehet közvetlenül megadni az AI-t. De szükség lehet rá azért is, hogy meghatározhasd hogy az analóg bemenetre kötött feszültségtartomány milyen időintervallumot fogjon át.
-
Szirty
őstag
Üdv attrax!
Pontosan értettem mit szeretnél elsőre is.
Nyolc vagy kilenc generációja van a LOGO-nak. majdnem mindegyiknek van analóg bemenete is és mindegyiknek van tranzisztoros kimenetű változata.
Ugyanakkor a bennük lévő szoftver képességei merőben eltérőek. Ezt azonosítják az 0BA0, 0BA1, 0BA2, 0BA3, stb jelzésekkel.Amíg nem mondod meg pontosan milyen, nem tudok pontos választ adni. Azt a hibát pedig igyekszem újra nem elkövetni, hogy jelentős plusz idővel és munkával alternatív megoldásokkal szolgáljak.
A dolog nyitja egyébként az, hogy bizonyos 0BA verzió fölött a timernek nem csak konstans idő adható meg, hanem másik blokkból származó változó is.
-
Szirty
őstag
válasz
DP_Joci
#3932
üzenetére
Üdv DP_Joci!
"A default entry jelentése nem az lenne, hogy alapból nincs kiválasztva semmi, akkor az legyen betöltve?"
Nem nem! A legkevésbé sem!
Symbolic I/O field-ben (a kijelzőn) megjelenik a Default entry-ben megadott szöveg akkor, ha az I/O field-nek megadott process TAG olyan értéket vesz fel, amelyikhez nem tartozik más megjelenítendő szöveg.Pl. ha az van a value/range típusú text listában hogy:
0-5 "Nullától ötig"
6-11 "Hattól tízig"
20 "Húsz"
Default "Franc se tudja"Akkor ha a process TAG-ben 4 van, a "Nullától ötig" szöveg jelenik meg. Ha pl. 6 van benne, akkor a "Hattól tízig" stb.
Ha olyan érték van a TAG-ben amelyik kívül esik a megadott tartományokon nem egyesik egyik értékkel sem, Pl. 74 van benne, akkor meg fog jelenni a "Franc se tudja" szöveg!Amennyiben ennek a symbolic I/O fieldn-ek Input/Output a módja, akkor ha "Nullától ötig" szöveget választasz ki, a TAG-be nullát rak, ha a "Hattól tízig" szöveget akkor hatot, stb. Tehát ahol tartomány van ott a tartományba tartozó első értéket veszi fel a TAG.
A Default szöveget, ami a példában "Franc se tudja" nem lehet kiválasztani, hiszen annak értelme sem lenne. Azt csak a panel jeleníti meg a fenti szabályok szerint, de az operátor nem tudja kiválasztani (meg sem jelenik a listában). Ha neked mégis megjelenik, akkor ez egy bug miatt van.Ha a text list selection tulajdonsága nem Value/range hanem Bit number, (vagyis a megjelenített szövegeket nem értékekhez vagy tartományokhoz, hanem bitekhez rendelted) akkor a defaultként megadott szöveg akkor jelenik meg, ha az alábbi feltételek közül legalább egy teljesül:
- A process tag olyan bitje van 1 állapotban, ami nem lett felvéve a text listába
- A process tag egynél több bitje van 1 állapotban (ezen belül mindegy melyik és mennyi)
- A process tag egyetlen bitje sincs 1 állapotbanA defaultként megadott szöveg Input/Output mód esetén itt sem választható ki (mert itt sem lenne semmi értelme).
Ha a változónak akarsz alapértelmezett értéket adni, akkor azt a PLC programból megteheted.
Vagy a HMI TAG Values tulajdonságánál kitöltöd a Start value mezőt (beírod milyen default értéket vegyen fel a változó): -
Szirty
őstag
válasz
KB.Pifu
#3929
üzenetére
Üdv Pifu!
Itt csak a módszer kérdés, nem a megvalósítás.
Ha már sorba van rendezve, akkor csak meg kell számolni mennyi egyforma van egymás után. Ha a darabszám mellé rögzíted azt is melyiket számoltad, akkor mire a végére érsz tudni fogod melyikből van a legtöbb ha így csinálod.
Elég kettőt nyilvántartani. Az egyik az előző, a másik amit éppen számolsz. A számolás végén, ha az kevesebb mint amit rögzítettél eldobod. Ha több, akkor felülírod az előzőleg tároltat.De az automatizálás főleg nem ilyen feladatból áll.
-
Szirty
őstag
válasz
n0rbert0
#3911
üzenetére
Üdv n0rbert0!
"Nem akarok beleszólni, de szerintem erre a feladatra egy On-Off szabályzás lenne a megfelelő megoldás, mivel kétállású beavatkozó szerv van."
Továbbra is azt mondom, amit már leírtam, hogy nem derült ki milyen a beavatkozó szerv, csak azt hogy gőz szelep.
Hogy ez most propszelep, aminek a nyitása analóg jellel vezérelhető, vagy motoros szelep, ami egy nyit és zár digitális jellel vezérelhető (ez a szelep is képes fokozatmentesen befolyásolni a mennyiséget vagy áramlást) vagy egyszerű nyit / zár szelep, amit egy digitális jel teljesen kinyit vagy teljesen elzár.A szövegből az sejthető, hogy a második lehet.
Egy PID szabályzóval mindhárom beavatkozó szerv vezérlése megoldható, így a korábbi véleményem jelenleg is fenntartom. -
Szirty
őstag
válasz
byte-by
#3908
üzenetére
Helló byte-by!
"viszont a hőmérő része vezérel egy szabályzó gőzszelepet amit egy beállított értékhez kell, hogy közelítsen erős pontossággal.
a szabályzó szelep nem rendelkezik visszacsatolással, az állásáról információ nincs."Nem világos a dolog nekem. Tehát hőmérsékletet mérsz, azt kell tartani amit beállítottak. Ha jól értem, akkor a szabályzás beavatkozó szerve egy szelep, amivel a szabályzó a hőmérsékletet befolyásolja (fűt).
Ha így van, akkor miért kell a szelepről visszajelzés és miért kell azt előre meghatározott állásba vezérelni?
Nem írtad, hogy a szelep vezérlése analóg, vagy nyit/zár rendszerű.
Ha az utóbbi, akkor a visszajelzés felhasználható tájékoztató információ gyanánt.
Ha a szabályzásnak a beállított hőmérséklet elérése és tartása a célja, akkor a szelepnek oda kell beállni, ahova a szabályzó akarja és nem egy előre fixen meghatározott értékre. Erre a PID tökéletesen alkalmas. -
Szirty
őstag
Üdv artiny!
A saját oldalamat tudom csak ajánlani, ami épp erről szól, de főleg Siemens PLC témában.
„egyszerubb rakodos programok irasa
megrajzolt abrak,bitek ertelmezése
idozitok , equ hasznalata >>valami hasonlokat kellene elsajatitani ”Éppen ilyenek vannak ott (teljes gyakorló szimulációk is) de sajnos nem AB. Valamennyit mégis segíthet, nézz rá.
(ui. crossposting rlz!

-
Szirty
őstag
válasz
DP_Joci
#3895
üzenetére
Üdv DP_Joci!
"Visszatérve a panelre, hogyan lehetne ezt megoldani? Lenne egy input mező és az ott beírt adatokat lementeném egy DB-be? És hogyan jelennének meg újra?"
Az én "parasztos" de kényelmes megoldásom a dologra úgy nézne ki, hogy ahol arra kerül a sor (azon a screenen) hogy a kezelő beírja a beírni valót, tennék egy gombot, hogy "korábban mentett adatok fejlécei".
ha azt megnyomja, kapna egy másik screent, amin látná mind a 10 korábban beírt adatot. amiből választhatna úgy, hogy megérinti a megfelelőt. Az érintés hatására visszaváltana az előző képernyőre és az input field kitöltődne az imént kiválasztott szöveggel. Itt még módosíthatná, és egy gombnyomással érvényesíthetné.Ezt viszonylag egyszerű megoldani, de csak akkor tudnék példával szolgálni, ha konkrétan meg is csinálnám az egészet.
-
Szirty
őstag
válasz
DP_Joci
#3883
üzenetére
Helló DP_Joci!
Nálad aztán zajlik az élet mostanában :-)
Hát nem sokat árultál el a körülményekről. Kipróbáltam én is, az említett gombok valóban tiltottak, de a kívánt érték gond nélkül beírható a PC billentyűzetén (csak nem tizedes vesszőt, hanem pontot kellett használni).
-
Szirty
őstag
-
Szirty
őstag
válasz
moseras
#3876
üzenetére
Üdv!
"Szerintem a WAGO alkalmas épületautomatizálásra"
Gyakorlatilag bármelyik PLC alkalmas ha a technikai oldalát nézzük. Ha pénz nem számít. Hiszen akár egy Siemens S7-400 CPU416-3 PN/DP is alkalmas erre, csak épp két millió Ft körül van az ára. Olyan lenne, mint 60 tonnás daruval hordani ételhordóban az ebédet a városban a nyugdíjasoknak.
Wago modulok sem olcsók ha háztájiba veszi az ember:
WAGO 750-602 Tápellátó modul 4 283 Ft
WAGO 750-600 Lezáró modul 6 264 Ft
WAGO 750-530 8 Digitális kimenet 24V DC 0.5A 29 133 Ft
WAGO 750-430 8 Digitális bemenet 24V DC 25 823 Ft -
Szirty
őstag
Üdv thre!
Szerintem a PLC nem a legalkalmasabb eszköz az ilyesmire, teljesen másra való. Persze az épület automatizálás nem értelmetlen dolog, ha nem ilyesmire gondolsz:
De erre külön vezérlő rendszerek vannak kitenyésztve.
Itt van pl. a Loxone amit nem ismerek és közöm sincs hozzájuk, csak egyszer belefutottam. -
Szirty
őstag
válasz
DP_Joci
#3869
üzenetére
Üdv DP_Joci!
"A file létrehozásánál a file neve és a munkafüzet neve ugyanaz lesz, a munkafüzet nevét lehet változtatni létrehozáskor?"
Az excel nevezi el így. Természetesen a scriptből adhatsz más nevet is a file-nak, így a munkafüzeted nevét is tudod befolyásolni.
"Lehet egy file-ba különböző munkafüzeteket felvenni?"
A kérdésnek nincs értelme, mert ez nem excel munkalap file-t hoz létre, hanem egyszerű szöveges CSV-t, ami semmi mást nem tartalmaz, mint adatok hosszú sorát. Vagyis nincs benne "munkafüzet".
Ha esetleg az excelt lehet CSV-ből arra késztetni, hogy egy bizonyos "utasítás" beolvasása utáni adatokat egy bizonyos másik munkafüzetben helyezze el, ekkor lehet, mert a scriptből a CSV-be azt írsz, amit akarsz, de ez nem a scripten fog múlni ilyenformán, hanem az excelen (kétlem, hogy lenne ilyen lehetőség, de utána kell nézni)."Az egyes cellákba lehet adatokat pakolni a cella címének hivatkozásával pl. A1, B2, stb"
Nem hinném, hogy az excelt CSV-ből ilyesmire lehetne kényszeríteni. Egyszerűen berakja a táblázat egy-egy sorába a CSV-ben egymás után lévő adatokat. Ami új sorba van a CSV-ben az új sorba kerül a táblázatban. Nagyjából ez minden.
"Van helyette valami olyasmi, amivel lehet jelezni, hogy az írás készen van?"
Nincs, mert az írás akkor van kész, amikor a script lefutott és végrehajtotta a file objektumra vonatkozó Close metódust. Azt meg a scriptből kezelheted jelzőkkel hogy mikor futott le. Tehát ahogy most csinálod az úgy jó szerintem.
"...valahogyan ellenőrizni, hogy nincs bedugva a pendrive"
Ellenőrizheted a logikai meghajtó létezését, ami a pendrive-ot reprezentálja. Remélve, hogy mindig ugyanazt a betűjelet kapja. Ez így néz ki:
Dim CSV
Set CSV = CreateObject("Scripting.FileSystemObject")
If CSV.DriveExists("I:") Then
'Ami itt van lefut ha az I: drive létezik
End If -
Szirty
őstag
válasz
DP_Joci
#3866
üzenetére
Üdv DP_Joci!
"Hogyan lehet azt megvalósítani, Siemens Basic vagy Comfort panel esetén, hogy egy felugró ablakom legyen, ne egy egész ablak"
Kérdezni akarsz programból a felhasználótól?
Miért fontos hogy ablak legyen és ne screen? Csinálsz egy screent amin ott a két gomb, programból átváltasz rá amikor felmerül a kérdés, a gombok utolsó eventjébe meg berakod a "vissza az előző képre" funkciót és kész is van.
Különös előnyt jelentene, hogy az ablak által ki nem takart rész továbbra is látható legyen?Scriptben meg a funkciók között egyébként van valami msg ablak lehetőség de nem próbáltam, neked az valószínűleg nem is jó, meg értelmét se látom egyelőre.
-
Szirty
őstag
válasz
DP_Joci
#3858
üzenetére
Üdv DP_Joci!
Szerintem ezzel több probléma lesz:
- Az egyik hogy csak S7-1500-on használható a DIS_IRT és EN_IRT
- Nem csak a cyclic interruptot tiltja, hanem több (összesen 8) aszinkron megszakítást, közöttük néhány hibakezelő megszakítást is.
- Ez a megszakítás tiltást és engedélyezés lehetőség messze nem arra lett kitalálva, mint amire te szeretnéd használni
- A megszakítás engedélyezése és tiltása is aszinkron módon történik (szerintem).Ez utóbbi annyit tesz, hogy van egy "szabadon futó" (aszinkron) időalap, ami a timer interruptot a CPU-ban okozza. Ezt az interruptot letilthatod és engedélyezed, de mivel (szerintem) aszinkron módon viselkedik, a timer interrupt hátralevő ideje nem az EN_IRT végrehajtásakor kezd majd el letelni!
De ezeknek a dolgoknak pontosan utána kell nézni ha így akarod megoldani, én csak felületesen néztem utána.
Ugyanakkor azt gondolom, hogy a probléma megoldásának van más, egyszerű és világos módja. -
Szirty
őstag
Helló zedok!
"Tudtok abban segíteni, hogy hol találhatnám meg a hidro-akkumulátor jelzést/szimbólumot?""
-
Szirty
őstag
válasz
DP_Joci
#3844
üzenetére
Üdv!
A ciklus idő miatti késedelem szerepet fog játszani a mérési idő pontosságában mindenképpen. A megszakítás csak azért jutott eszembe, mert van ilyen lehetőség és azzal valamennyire, mérsékelhető a dolog.
Van persze timer interrupt is, ami akár 100ms is lehet, de sajnos az a méréshez képest aszinkron módon fut. tehát a timer OB pontosan 100ms-onként fog lefutni, de az nem biztosítható, hogy az első 100ms a kezdő impulzushoz képest annyi legyen.
Az, hogy a 100ms interrupt minden 100ms-nál lefut nem lehet probléma, hiszen írhatsz bele olyan kódot ami nem csinál semmit ha nem teljesül a szükséges feltétel. -
Szirty
őstag
válasz
DP_Joci
#3843
üzenetére
Üdv DP_Joci!
"Szeretnék segíteni, mert te is sokszor adtál már tanácsot, de sajnos már vagy 10 éve foglalkoztam AS-i-val és csak emlékképeim vannak."
Nagyra értékelem és köszönöm a segítséget! Nagyjából képet kaptam arról hogy is megy ez. Egy működő AS-i-val ellátott rendszerbe kell (talán) beavatkozni ezért merült fel a téma.
Egyelőre ennyi infó elég lesz. Ha jobban belekeveredek lehet lesz még kérdésem. -
Szirty
őstag
válasz
DP_Joci
#3838
üzenetére
Üdv DP_Joci!
"Amikor arra gondoltam, hogy megkeresed a nullás címet, akkor az AS-i masteren gondoltam, hogy a nullás AS-i címet keresed meg."
Köszönöm a választ de szerintem nem itt a baj. Mint írtam valamilyen szoftver eszköz kell a dologhoz, mert az általad említett doksiban ez van:

Én meg ezt látom a HW konfigban:

Tehát semmi olyasmit nem lehet állítani amire hivatkozol.
-
Szirty
őstag
válasz
DP_Joci
#3834
üzenetére
Hi!
"Címzés masterrel:
Gyárilag egy slave a nullás címmel érkezik így megkeresed a hálózaton a nullás címet és átírod olyanra mi neked teszik,"Step7-ből semmilyen befolyással nem tudok lenni a buszon lévő eszközök címeire! Nem is látszanak azok az eszközök amik a buszon vannak.
Épp ezért merült fel a kérdés, hogy hogyan megy ez a cím kiosztás. Valamilyen eszköz kell hozzá ami nekem nincs. -
Szirty
őstag
válasz
DP_Joci
#3834
üzenetére
Üdv DP_Joci!
"Ha jól tudom, akkor, ha felfutó élre meghívok egy OB –t, akkor az egyszer lefut és végrehajtja a benne lévő dolgokat. Majd kell egy másik felfutó él az újabb híváshoz."
A HW megszakítás OB-t nem te hívod meg, hanem a rendszer!! Ettől HW megszakítás.
Egy bemenetre tudod beállítani, hogy amikor a bemenet él átmeneten megy át, akkor az OB lefut.
Neked pont ez kell, ha azt akarod, hogy a bemenet változását a program a lehető legkisebb időveszteséggel észlelje.
Feltéve természetesen azt, hogy a mérést indító esemény a PLC-n kívül keletkezik és nem a PLC programban. Az utóbbi estben ugyanis egy egészen egyszerű feltételes hívással indíthatod a mérést, mindenféle megszakításos trükközés nélkül.Egyszerűen beírod a mérés indító megszakítás OB-ba, hogy kapcsolja be a mérést és indítsa el a 100ms időt.
A főprogramban meg mérsz amikor a megszakítás OB által indított idő letelik és újraindítod az időt, ha a "mérés folyamatban" jel aktív. A másik (mérés stop) bemenet által okozott megszakítás OB-ban meg kikapcsolod a "mérés folyamatban" jelzést, mire a főprogram leállítja a további méréseket
Ha a mérést nem külső esemény indítja, akkor a feladat még ennél is egyszerűbb. -
Szirty
őstag
válasz
Hasaggymeg
#3821
üzenetére
Üdv Hasaggymeg!
"...ez mind akkor kezdödött mikor a lemerült szünetmentes tàpokat anyagi megfontolàsból kiiktattuk."
Látom nálatok is százezreket költenek néhány ezer forint megspórolására, mint nálunk :-/
-
Szirty
őstag
válasz
DP_Joci
#3815
üzenetére
Üdv DP_Joci!
"Tudva azt, hogy egy trigger jelre kell indulni a mérésnek bizonyos ideig, vagyis pontosan egy másik jel érkezéséig. Ha egy OB-t hívnák meg 100ms-onként és ott gyűjteném az adatokat, akkor előfordulhat, hogy a trigger jeltől függően néha több néha kevesebb adatot gyűjtenék, holott mindig ugyanannyinak kellene lennie darabszámban."
Az én elképzelésem a feladattal kapcsolatban az, hogy hardware megszakítást alkalmaznék a mérést indító és a mérést leállító bemenetre.
Nem tudom milyen CPU-val kell megcsinálni ezt és azt sem tudom mindegyik tud-e HW interruptot bemeneten, de az 1215C tud:A lényege egyszerű: A beállított él detektálásakor azonnal (minimális késleltetéssel) meghívja a beállított OB-t.
Az OB-ban kezelheted a mérés megkezdését és befejezését, a 100ms-os időzítés indítását, stb.A HMI-ben array tag a mért adatokra és egy script megoldhatja a CSV kiírását, de arra figyelni kell, hogy nem minden panel scriptelhető (pl. a basic panel nem).
-
Szirty
őstag
válasz
DP_Joci
#3805
üzenetére
Üdv DP_Joci!
Igen az IEC timer SFB instance DB-jében a timer változói valóban elérhetők, de nem tudom a TIA portál ebben a mértéktelen nagy "szimbolizmusában" amit szabályként preferál, mennyire illik bele az, hogy kívülről belecímzünk egy instance DB-be. Ugyan megtehetjük, de a koncepció szerint azt gondolom az instance DB tartalma a blokk "magánügye" inkább mint "közügy".
-
Szirty
őstag
válasz
01101010111
#3804
üzenetére
Üdv 01101010111!
Kapcsoló tesztelőben csináltam hasonlót.
Egy kimenet jelét egy bemenettel vizsgálva figyelheted a szakadást (de érdemes a kikapcsolt állapotra is tenni egy vizsgálatot.Nem oldható meg, hogy a vizsgáló feszültség 24V DC legyen biztonsági leválasztott táppal és csak akkor adja ki a kimenet, amikor a kezelő nem tud hozzáérni?
-
Szirty
őstag
válasz
n0rbert0
#3802
üzenetére
Üdv n0rbert0!
Hagyományos bemenettel szoftveresen akarod az időt mérni, vagy valami HW támogatással (HSC impulzus bemenet, megszakításra képes bemenet)?
Ha nem, akkor:
Méred a periódusok között eltelt időt, aminek a rciproka arányos lesz a frekvenciával. Így minden érkezett impulzus után lesz egy eredményed a frekvenciáról, de a kiértékelt eredmények gyakorisága és függeni fog a frekvenciától. A frekvencia növekedésével pontatlanabb lesz a mérés.Vagy adott konstans időszakaszkban számlálod az érkezett impulzusokat és az impulzus számából és az időszakasz hosszából kiszámolod a frekvenciát. A kiértékelés lassabb lesz, de az eredményeket azonos gyakorisággal kapod. Megfelelően hosszú időszakasz esetén ez a módszer pontosabb eredményt ad.
-
Szirty
őstag
válasz
zolizozo80
#3789
üzenetére
-
Szirty
őstag
válasz
Jefe_Ell
#3785
üzenetére
Helló Jefe_Ell!
"Ahoz nem értek sajnos h 230V-ot varázsoljak a Logo-ba majd onnan ugye 24V-ot a többi cucchoz!"
Azzal mi a gond? A tápegység (Logo power) L1 és N pontjára bekötöd a 230V-ot.
A szekunder oldal + kimenetét elviszed a CPU L+ pontjára, a táp - kimenetét meg a CPU M pontjára.
Melyik logo power? Elég nagy a teljesítménye? -
Szirty
őstag
válasz
sesztakbence
#3773
üzenetére
Üdv sesztakbence!
Szóval S7-1200-ba csak IEC timert tudsz használni, aminek a meneteke a következő:
A Timer operations utasítások közül behúzod a megfelelő típusú timert. Pl. TON bekapcsolás késleltető.
Mivel az IEC timer funkció blokk, kell neki egy adatblokk (DB) is. Amikor ledobod a TON-t, nyílik egy ablak ahol meg kell adnod milyen nevű vagy számú DB legyen az övé. A DB-t magától létrehozza alapesetben.Timer-ként nem tudsz rá hivatkozni a szokott módon!
A timer kimenetére ezért el kell helyezni valamilyen változót (merker bitet, DB bitet, stb) ahogy a képen is látható. Ezután a timer állapotát a kimenetén elhelyezett változón keresztül tudod kezelni. A példa szerint tehát timer "érintkező" helyett az M1.0 "érintkezőt" kell használni. -
Szirty
őstag
válasz
byte-by
#3774
üzenetére
Üdv byte-by!
"én is ismerkedem még a TIA -portal-lal, meg kell szokni.Lehet, hogy Szirty oldalát indokolt lenne látogatni, ott úgy tudom van TIA okosság."
Hát van ugyan, sajnos nem nagyon! Nem hinném hogy sokra mennél vele.
Mellesleg ha összeállítasz egy konkrét, részletes és érthető cikket, én szívesen kirakom oda :-) -
Szirty
őstag
válasz
sesztakbence
#3773
üzenetére
Üdv sesztakbence!
Mielőtt a problémádra reagálnék, én megkérdezném, hogy a házi feladat milyen fajta vezérlővel oldandó meg?
Nagyon nem mindegy, mert ha pl. S7-1200 az alany, azon szerintem a "hagyományos" S5Timer nem használható, csak az IEC timer, ami viszont nem S5TIME tipust használ (mint amilyen pl. az S5t#3S200MS) hanem TIME típust, aminek a szintaxisa T#3S200MS).
S7-300, S7-400 és S7-1500 CPU-nál viszont mindkettőt használhatod.
Új hozzászólás Aktív témák
- exHWSW - Értünk mindenhez IS
- E-roller topik
- Kedvenc zene a mai napra
- Kicombosította az M5-ös SoC-családot az Apple
- Megérkezett az Apple 5K-s, 120 Hz-et biztosító monitora
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- A nagy Szóda, Szódakészítés topic - legyen egy kis fröccs is! :-)
- Ilyen olcsó sem volt még egy Apple notebook
- Azonnali alaplapos kérdések órája
- MWC 2026: Farsangra Galaxy Ultrának öltözött a gyerek
- További aktív témák...
- Gtx 1080/ Intel I7 8700K/ 16GB Ram/ 256GB M2 SSD/ 1TB HDD/ Win11
- Gtx 1050Ti/ Intel I5 7500/ 16GB Ram/ 256GB Sata SSD/ 1.5TB HDD/ Win11
- Gtx 1050Ti/ Intel I5 7500/ 16GB Ram/ 128GB M2 SSD/ 1.5TB HDD/ Win11
- Acer Aspire 3 A317-53-76NV. Intel 11.gen I7 / 16Gb ram / 512Gb ssd / 17,3"
- Intel 545S 512GB M2 Sata SSD
- BESZÁMÍTÁS! Lenovo Ideapad Gaming 3 15ACH6 notebook - R7 5800HS 16GB DDR4 1012GB SSD RTX 3050 4GB
- szinteÚJ Nubia REDMAGIC 11 Air (NX799J) 1év gar
- GYÖNYÖRŰ iPhone 14 Pro 128GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen, MS4022
- Azonnali készpénzes nVidia RTX 5000 sorozat videokártya felvásárlás személyesen / csomagküldéssel
- Eladó Samsung Galaxy A16 5G 4/128GB fehér / 12 hó jótállás
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest








