Hi​r​d​e​té​s​

2017. november 21., kedd

Útvonal

Fórumok  »  Egyéb hardverek  »  PLC programozás

Hozzászólások

(#4001) levelko válasza Szabónagymer (#3999) üzenetére


levelko
(lelkes újonc)

Hali!

Én ezt javasolnám:

http://industrial.omron.hu/hu/services_and_support/seminars_and_training/plc_01.html

Kapsz egy CP1L PLC-t is az árért. Én mondjuk STEP7-re mennék el, de önerőből nem tudok kinyögni negyed millát. :(((

levelko

(#4002) Szirty válasza Szabónagymer (#3996) üzenetére


Szirty
(Topikgazda)

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.

(#4003) Szirty válasza KB.Pifu (#3995) üzenetére


Szirty
(Topikgazda)

Ü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_done

utasí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_done

vagy

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 ]

(#4004) KB.Pifu válasza Szirty (#4003) üzenetére


KB.Pifu
(kvázi-tag)

üdv!

Hát azt csak ezért mondtam, hogy látszódjon, hogy nem csak kérdezek, hanem magam erejéből is előre akarok jutni.
Kérdésedre válaszolva pedig úgy, hogy megnyomtam az f1-et a Tar1 -nél és rájöttem mire megy ki a játék.
Értem a célzást, megnyomom legközelebb magam is. :DDD

Megmondom őszintén azt hittem a SET a program lefutásában valami magasabbrendű kulcspozíciót játszik, eszembe se jutott hogy megnézzem a súgót egy bit állapotának állításához (csak ma reggel a buszon, akkor már sejtettem hogy hülyeséget kérdeztem), annyira egyértelműnek tűnt hogy tudom.

(#4005) Szirty válasza KB.Pifu (#4004) üzenetére


Szirty
(Topikgazda)

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.

(#4006) attrax válasza attrax (#3975) üzenetére


attrax
(senior tag)

Végülis 1xű volt megoldottam

Unterschreiben

(#4007) KB.Pifu válasza Szabónagymer (#3996) üzenetére


KB.Pifu
(kvázi-tag)

Szia!

Én csak elmondom a saját tapasztalatomat.
Én is keresek munkát, és mivel nincs még tapasztalatom ezért nem is nagyon találok magamnak megfelelőt, azért is vagyok itt, hogy ellessem a programozáshoz szükséges infókat.

A mi cégünknél senki sem használja a plc programokat, még csak nem is monitorozzuk nemhogy módosítsuk, egy kisebb gép, mondjuk egy 4-10 állomásos összeszerelő automata ( ne gondolj nagy rendszerekre, különálló gépek, saját csomagolóval) esetében a gép kiírja a hibás állomást és szemmel,tapasztalattal*, manuális üzemmóddal keressük a hibát. Felvettek engem mint plc technikust csak éppen soha nem kellett még hozzányúlnom semmihez, szóval ilyen formában nem tudom használni amit tanultam.

Egyedüli ami megnyugtat, hogy mégis van értelme csinálnom és belemerülni az STL-be is, hogy a Xenon (német) gyártótól olyan gépek jöttek amiket stl-ben kellett programozniuk az igazgatójuk utasítására.
Viszont olyan jól meg vannak írva, hogy nem kell senkinek sem online nézni.

A tapasztaltak szerintem meg fogják erősíteni a gyanúmat, hogy termelő területen a villamos és plc -s hibák elenyésző mennyiségűek a mechanikus hibákhoz képest.

én már inkább gépésztechnikuson gondolkodom, karbantartásban nagyobb hasznát venném!
vagy én vagyok rossz helyen...

* itt a tized mm hézagoló használata a mindennapos, ellentétben a Bit szót még nem halottam senkitől sem...

(#4008) soldi3r válasza KB.Pifu (#4007) üzenetére


soldi3r
(PH! kedvence)

En kicsit mas teruleten dolgozom jelenleg (SMT), nalunk az elektromos hibak teszik ki az allasido 70%-at.
De pl PLC hibank talan 1x vagy 2x volt.

[ Szerkesztve ]

(oo=[][]=oo)

(#4009) Szirty válasza soldi3r (#4008) üzenetére


Szirty
(Topikgazda)

Ü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 ]

(#4010) soldi3r válasza Szirty (#4009) üzenetére


soldi3r
(PH! kedvence)

Nagyon off, de ha gondolod privatban el tudom reszletesen meselni.

(oo=[][]=oo)

(#4011) Szirty válasza Szirty (#4009) üzenetére


Szirty
(Topikgazda)

...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 :-)

(#4012) Szirty válasza soldi3r (#4010) üzenetére


Szirty
(Topikgazda)

Üdv soldi3r!

Igen érdekelne, néhány mondatban foglald össze.

(#4013) rsf válasza Szirty (#4009) üzenetére


rsf
(senior tag)

Az előző munkahelyemen a mechanikai hibákat, elállítódásokat nem lehetett menet közben javítani, mert nem állhatott meg a sor. Ilyenkor jól jött a probléma "megoldása" elektromosan. Volt olyan, hogy több mint egy hétig volt force-olva egy bemenet amin egy mechanikus érzékelő volt. Vagy szoftveresen kellett szimulálni egy bejövő jelet. stb....
De szép idők voltak azok.........
Üdv.

“Az a baj a világgal, hogy a buták mindenben holtbiztosak, az okosak meg tele vannak kételyekkel.“

(#4014) Szirty válasza rsf (#4013) üzenetére


Szirty
(Topikgazda)

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 ]

(#4015) KB.Pifu válasza Szirty (#4011) üzenetére


KB.Pifu
(kvázi-tag)

Üdv!

Nálunk egy robotkar fél órán át dobálta el a terméket látszólag minden ok nélkül, pontosan ráfog, felemeli, lefényképezi a DMC kódot majd kivágja a kukába, ami nem volna gond ha a kód rossz lenne, bőszen kapcsolgattuk kifele hátha megjavul "magától", és csak utána derült ki, hogy a megfogón egy két csavar a megfogó fejben fel volt lazulva és lehetséges, hogy rosszul tartotta kicsit mikor lefényképezte a kódot.
Jah és persze mindenféle hibaüzenet nélkül tette mindezt :)

De ezt már sosem tudjuk meg, felvettek mint PLC-st és se laptop se program, még a kézi ellenőrzőket is mind külsős csinálja (meg minden mást is) én meg gondolkodom hogy ezek hülyék-e.

(#4016) 9tomi9


9tomi9
(újonc)

Sziasztok!

Beleszaladtam számomra furcsa problémába, remélhetőleg nektek volt ilyennel tapasztalatotok és meg tudnátok mondani mit hibázok. Csináltam pár fotót és beleírtam néhány dolgot, de röviden leírom a gondomat. Egy tesztgépben s7 400-as PLC dolgozik, ami egy pc-s szoftverrel kommunikál. A pc-n grafikonok jelennek meg, amik nyomások, feszültségek mérései.

- Bővítenem kell a mérések lehetőségét, ezért a DB161 blokkba címeket, (INIT Value-kat) kell írnom. A grafikonozás összefüggésbe van DB161 blokkal, amit az 1-es képen láthattok. Mellé írtam a problémámat. (Csináltam egy megoldást, de az csak sufni.... Másik gép programjából ki copyztam a DB161-et és ebbe a programba beraktam. Azzal működik a rendszer)

- Ez a grafikonozás összefüggésben van az fc100 blokkal, amit a 2. képen láthattok. Nem értem a szögletes zárójel működését.

- A 3., 4. kép Call hívásai SFC blokkokra vonatkoznak. Van velük tapasztalatotok[L:/dl/upc/2014-02/482794_kep2_2.jpg](IMG:/dl/upc/2014-02/482794_kep2_2.thumb.jpg)[L:/dl/upc/2014-02/482794_kep3.jpg](IMG:/dl/upc/2014-02/482794_kep3.thumb.jpg)[L:/dl/upc/2014-02/482794_kep4.jpg](IMG:/dl/upc/2014-02/482794_kep4.thumb.jpg)(/IMG)[/L](/IMG)[/L](/IMG)[/L]?

(#4017) 9tomi9


9tomi9
(újonc)

2. kép

(#4018) 9tomi9


9tomi9
(újonc)

3.

(#4019) 9tomi9


9tomi9
(újonc)

4.

(#4020) Szirty válasza 9tomi9 (#4016) üzenetére


Szirty
(Topikgazda)

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 0

Az 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 ]

(#4021) 9tomi9


9tomi9
(újonc)

A M 605.1
A M 607.1
JCN M005
L DB150.DBW 32 A PC 3905-ös címet ír ide. (Ezt monitorozáskor látom)
L 16 Betöltjük 16-ot
*I Összeszorozzuk az előbbi kettő értéket
T MD 1500 Az eredményt MD1500-ba teszi, ennek értéke 62480 (Monitorozáskor látom)
OPN DB 161 Nyitjuk DB161-et
L DBW [MD 1500] Betöltjük DBW [MD 1500]-at (Nem tudom monitorozni)
L 8 Betöltjük 8-at
*D Összeszorozzuk az előbbi kettő értéket
T MD 1600 Az eredményt MD1600-ba teszi, ennek értéke 4256 (Monitorozáskor látom)
L PIW [MD 1600] Betöltjük PIW [MD 1500]-at (Nem tudom monitorozni), de 532-nek kellene lennie
T MW 210
L 0
<I
JCN M005
L 0
T MW 210
M005: NOP 0

A PC programjában 3905-öt kell megadni, ha a PIW532-vel akarunk dolgozni. Ezért DB150.DBW 32 értéke 3905. 16-tal szorozva stimmel a 62480. Utána nem értem, hogyan jön ki pl. a 4256-os érték MD 1600-ra.. Ahhoz, hogy ez jöjjön ki, a [MD 1500]-nak 532-nek kellene lennie. Ez akkor stimmelne, ha L DBW [MD 1500] a megnyitott DB161 blokk 7810. sorának INIT value értékét olvasná ki,mert az 532.
Nem értem az összefüggéseket, az átszámításokat. Megköszönném, ha el tudnád magyarázni. Köszönöm a korábbi gyors reagálásodat is.

(#4022) 9tomi9


9tomi9
(újonc)

A 2. képnél leírt gond az az, hogy hiába írok át egy INIT Value értéket csak úgy és töltöm be a PLC-be, a program futtatásakor nem változik az állapot.

Pl: Átírom a 7810. sorban 532-t 610-re, áttöltöm a programot, de a monitorozáskor ugyanúg 532 marad az érték. Az actual valueban látom monitorozáskor.

Pl: Átírom a 7848-as sorban az INIT Value-t 660-ra, áttöltöm a programot, de a monitorozáskor ugyanúgy 0 marad az érték. Az actual valueban látom monitorozáskor.

Fogtam egy ugyanilyen teszter DB 161 blokkját, ahol már a kibővített DB161 táblázat volt programozva. Kimásoltam, beleszerkesztettem ebbe a programba, utána már elfogadta az INIT Value-kat.

Kérdezted, hogy hány soros a DB161. 8000 sor

(#4023) attrax válasza soldi3r (#4008) üzenetére


attrax
(senior tag)

Na ez érdekes téma.Én is termelésben dolgozom és elég sok plc-s hiba van de inkább hardveres.Nálunk S5,S7 200/300/400 van.Leggyakoribb hibák:Analóg ill digitkártyák lehalnak,kontakthiba az alaplap és a kártyafoglalatnál.Németek modemmel javítanak.Program újratöltés.Valamint Sok sok kapocstáp elszáll.S5-ösöknél pedig egyszerűen nem indul a gép pedig Run ban van.Megoldás:elem ki Eprom be copyf fel.

Unterschreiben

(#4024) Szirty válasza 9tomi9 (#4022) üzenetére


Szirty
(Topikgazda)

Ü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)

(#4025) Szirty válasza 9tomi9 (#4021) üzenetére


Szirty
(Topikgazda)

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!

(#4026) 9tomi9


9tomi9
(újonc)

+8000.0 Stat4000 INT 0

Ez az utolsó sor. Épp azt nem értem én sem, hogy mit kezd a 62480-nal.... Pedig a program évek óta így működik... Abban az esetben érteném, ha 62480-at 8-cal osztanánk, mert az 7810 lenne. Abban a sorban pedig 532 van, ami ha később 8-cal szorzunk, ki is jön a 4256.....

(#4027) Szirty válasza 9tomi9 (#4026) üzenetére


Szirty
(Topikgazda)

Üdv 9tomi9!

Diag buffert nézegetted már? :-)

(#4028) 9tomi9


9tomi9
(újonc)

Szia!

Nem. Mesélnél róla kicsit bővebben?

Üdv

(#4029) Szirty válasza 9tomi9 (#4028) üzenetére


Szirty
(Topikgazda)

Üdv!

Simatic managerben projectet megnyitod, project fán kiválasztod a CPU-t (vagy a CPU alatt lévő bármelyik szintet), PLC menü, Diagnostic/Setting almenü, abban Module Information, ott pedig Diagnostic buffer fül.

(#4030) artiny


artiny
(őstag)

Helo

Valaki esetleg.....hogyan tuodom megadni a 20 hexa számot a PLC tag be?

(#4031) Szirty válasza artiny (#4030) üzenetére


Szirty
(Topikgazda)

Helló!

Néhány lehetőség:
B#16#20
W#16#0020
DW#16#00000020

(#4032) artiny válasza Szirty (#4031) üzenetére


artiny
(őstag)

koszi :)

(#4033) KB.Pifu válasza Szirty (#4003) üzenetére


KB.Pifu
(kvázi-tag)

szia!

Szeretném kérdezni, hogy van-e valami olyan különbség a két módszer között, ami miatt érdemes csak az egyikre koncentrálni. A kettő nekem ugyanaz, kiválasztja a legnagyobbat és legkisebbet 10 word adathosszon, dbw 0-tól kezdve.

ezt a verziót láttam a bubble_sortban amit linkeltem

OPN DB 2

L DBW 0
T DBW 20 // min eredmény helye
T DBW 22 // max eredmény helye

LAR1 P#DBX 0.0

L 10

loop: T #Loop1

L DBW [AR1,P#0.0]
L DBW 22
<I
JC ver1
TAK
ver1: T DBW 22

L DBW [AR1,P#0.0]
L DBW 20
>I
JC ver2
TAK
ver2: T DBW 20

+AR1 P#2.0

L #Loop1
LOOP loop

és

OPN DB 2
L DBW 0
T DBW 20 // min eredmény helye
T DBW 22 // max eredmény helye

L 10
next: T #tmpLoop
DEC 1
SLD 4
LAR1
L DBW [AR1,P#0.0]
L DBW 22
<I
JC ver1
TAK
ver1: T DBW 24

L DBW [AR1,P#0.0]
L DBW 20
>I
JC ver2
TAK
ver2: T DBW 26

L #tmpLoop
LOOP next

van valami oka, hogy következetesen a második verziót használod az AR1 növelésére ?
Ez volt a feladat ami miatt elkezdtem programozni, állásinterjún megkérdezték hogy ezt hogy csinálnám...

üdv
Pifu

[ Szerkesztve ]

(#4034) byte-by


byte-by
(tag)

halo !

ha esetleg van akit érdekelhet a dolog.a multkori gőz szelep szabályozással kapcsolatos témát megoldottam ,némi utána járással. már dolgozik.
motoros szelepről van szó (samson) digitális vezérlésű, nem analog kimenet hajtja.
két digitális kimenet-egy nyitja-egy zárja.ha egy kimenet sincs , ott megáll ahol van.
a vezérlő s7-1513-1 PN , a szoftver TIA Portal.(v12) megjegyzem van még mit fejleszteni...de ez oké.

egy sima pid 3 steppet illesztettem be.a logikailag értelmezhető be és kimenetekkel.

természetesen utána paraméterezés és komissiózás.

ezt leltöltve és indítva a program működik.
a beállításokban figyelmet igényel a méréshatás, a mért egység típusa, (pl. hőmérséklet, nyomás, stb.)
és még jó néhány dolog, de a számolást a pid-re hagyhatjuk.érdemes manuális paraméterezést alkalmazni, így finomabb működést érhetünk el. pl. egy impulzus hossza akár befolyásolhatja a szelep élettartamát.
érdekes, de a segédletben az input és a perifériás input (analóg I/O) kapcsolható, ezt tartalmazza a settings, de magához a programhoz mindkettőre szükség volt.

a rendszer jóval többet tud , mint amire én használom, de majd ha szükséges lehet bővíteni.

byte-by

[ Szerkesztve ]

(#4035) Szirty válasza KB.Pifu (#4033) üzenetére


Szirty
(Topikgazda)

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 :-)

(#4036) moseras válasza byte-by (#4034) üzenetére


moseras
(tag)

Szia!

Bocs, de nem ismerem a Siemens-t, ezért kérdezném, hogy ahogy írod, kézi módban hangoltad a PID-et. De miből vetted, hogy a PGain 1 lesz, az integrálási idő pedig 20, a D pedig 0 ? Vagy először ráengedted az Auto hangolást, aztán utána finomítottad ?

Imi.

(#4037) byte-by válasza moseras (#4036) üzenetére


byte-by
(tag)

halo !

igen, egészen pontosan így történt.
(annyira a siemens-t én sem)
az auto tuning jó, de pár dolgot érdemes megváltoztatni, csak ezért kapcsoltam később manual tuningba.
a "deadband widht" , és pár késleltetést állítottam át.
az aktuátornál pl. többek között a motoros szelep teljes nyitási -zárási idejét utólag kellett módosítanom, mert a program irásakor nem állt rendelkezésre, illetve a "ON " és "OFF" kimenet minimális időtartamát.

de alapvetően az auto tuning beállításai voltak az alapok.
ha elkezdjük használni a rendszert nem csak tesztüzemben gondolom, hogy lesz némi finomítás a későbbiekben.

byte-by

[ Szerkesztve ]

(#4038) moseras válasza byte-by (#4037) üzenetére


moseras
(tag)

Üdv!

Értem, köszönöm.

Imi.

(#4039) KB.Pifu


KB.Pifu
(kvázi-tag)

sziasztok!

Még mindig a (többek között) módusz keresésen töröm fejem ( növekvő sorrendbe rendezett adatsorból), nem hagy nyugodni a gondolat, hogy nem akar összejönni.

Mi a bevált módja egy hurkon belül az N. és N-1. adat tárolásának és összehasonlításának?
(s7-ben gondolkodom)

üdv
Pifu

(#4040) Szirty válasza KB.Pifu (#4039) üzenetére


Szirty
(Topikgazda)

Ü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 2

Ez a DB2.DBW6 tartalmát MW0-ba rakja, a DB1.DBW8 tartalmát pedig MW2-be.

(#4041) KB.Pifu válasza Szirty (#4040) üzenetére


KB.Pifu
(kvázi-tag)

Köszönöm válaszod, de sajnos rosszul fogalmaztam! Többek között ez különböztet meg egy mérnököt tőlem :DDD

loop: L 10
DEC 1
SLW4

T #Count

L W [AR1,P#0.0]
L W [AR1,P#2.0]
==I

jcn m001

L #counter // "egyenlőség számláló" végső soron ezt lesz módusz értéke
INC 1
T #counter

m001: ... // itt akadok el,

É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.

Nem is tudom hogy kellene szépen megfogalmazni, talán a hurok N és N+1 számolt értékét szeretném úgy összehasonlítani, hogy csak a nagyobb maradjon vagy a következő ciklusban csak akkor írja felül ha én szeretném

üdv
Pifu

(#4042) Szirty válasza KB.Pifu (#4041) üzenetére


Szirty
(Topikgazda)

Ü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?

(#4043) KB.Pifu válasza Szirty (#4042) üzenetére


KB.Pifu
(kvázi-tag)

üdv!

Már megint egy kicsit félrevezettelek :))

A min/max keresés az első gyakorlófeladatom volt, hogy az AR -t és a LOOP-ot megtanuljam, és azért másoltam be kétféle módon, mert pontatlan lettem volna, mikor megkérdeztem, hogy miért jobb az egyik AR növelés a másik AR növelésnél.

A mostani helyzet, hogy keresem egy adatsor móduszát és talán a legkönnyebben úgy találom meg ha sorba rendezem és számolom az egyenlőséget.
A bubble_sortot pedig azért linkeltem be, mert nem értettem hogy működik, én még csak nagyjából 2-3 hónapja foglalkozok komolyan a programozással, nekem egy trükk/módszer megtanulása is eredmény!

Szóval adott a rendezett adathalmazom (feltételezve, hogy mindegyik értékből egynél több van, és minden RLO=0 után mindenképp talál bizonyos mennyiségű egyforma értéket), számolom az első szám gyakoriságát, ha nem talál több egyenlőséget, akkor törölnöm kell a számlálót mentés után és a következő értéknek a gyakoriságát tölteni bele, majd a következő RLO = 0 esetén összehasonlítani a kettőt, megtartani a nagyobbat és folytatni tovább.
Csak nekem ez nem akar összejönni, és nem látom be hogy miért.
Most azon gondolkozok, hogy egy boolean változó használata megoldja a problémát? Vagy ehhez külső és belső ciklus kell vagy esetleg mindkettő?

üdv:
Pifu

[ Szerkesztve ]

(#4044) Szirty válasza KB.Pifu (#4043) üzenetére


Szirty
(Topikgazda)

Helló KB.Pifu!

Nem akarok túl gyakran vak vágányra futni, így most csak rövidet írok.
Az RLO a logikai művelet eredménye.
Mindegyik logikai műveleté! Mindig!

Csak nehogy most meg ezen csússzunk el.

(#4045) KB.Pifu válasza Szirty (#4044) üzenetére


KB.Pifu
(kvázi-tag)

szia!

következetesen az

L W [AR1,P#0.0]
L W [AR1,P#2.0]
==I

eredményére gondolok. Ha az 1 akkor növeljük a számlálót ha 0, akkor történik a szelektálás.

(#4046) Szirty válasza KB.Pifu (#4045) üzenetére


Szirty
(Topikgazda)

Üdv KB.Pifu!

Nekem úgy tűnik, hogy abban a kódban amit idéztél ez meg van oldva.
Mi a gond vele?

(#4047) KB.Pifu válasza Szirty (#4046) üzenetére


KB.Pifu
(kvázi-tag)

szia!

idézlek (#3931)

"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."

Nekem valahogy nem megy, nem tudom kezelni az "előző" - értéket, hogy valahol véletlenül felül ne írjam a jelenlegivel.

(#4048) Szirty válasza KB.Pifu (#4047) üzenetére


Szirty
(Topikgazda)

Ü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!"

(#4049) KB.Pifu válasza Szirty (#4048) üzenetére


KB.Pifu
(kvázi-tag)

Szia!

Ezt úgy érzem, hagyni kellene, nem akarok visszaélni a segítőkészségeddel. Ha okosabban tudok kérdezni akkor még jelentkezem.

üdv
Pifu

(#4050) Szirty válasza KB.Pifu (#4049) üzenetére


Szirty
(Topikgazda)

Üdv!

Ok.
Még az jutott eszembe, hogy az összehasonlítás eredményét nem csak ugrással lehet kiértékelni, egy bitet is kapcsolhatsz vele.
pl.:

L W [AR1,P#0.0]
L W [AR1,P#2.0]
==I
= M1.0

Útvonal

Fórumok  »  Egyéb hardverek  »  PLC programozás
Copyright © 2000-2017 PROHARDVER Informatikai Kft.