- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- Milyen processzort vegyek?
- Sony MILC fényképezőgépcsalád
- Milyen notebookot vegyek?
- Dell notebook topic
- Milyen alaplapot vegyek?
- Piacvezető tandem OLED panellel érkezik az iPad Pro
- AMD Navi Radeon™ RX 7xxx sorozat
- Hogy is néznek ki a gépeink?
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Dell asztali gépek
Hirdetés
-
Lenovo Essential Wireless Combo
lo Lehet-e egy billentyűzet karcsú, elegáns és különleges? A Lenovo bebizonyította, hogy igen, de bosszantó is :)
-
Saját Redmi Note 13 Pro+ a világbajnok focicsapatnak (és indiai rajongóiknak)
ma Argentína nemzeti válogatottjának mezével díszítik az új Redmi különkiadást.
-
Premier előzetesen a Gray Zone Warfare
gp A mai naptól hivatalosan is elrajtol a játék korai kiadása PC-n.
Új hozzászólás Aktív témák
-
Szirty
őstag
Hali!
SyncPos opció frekiváltóhoz
MiniStep léptetőmotor vezérlőAz alábbi linken a hajtás doksik között is találsz (többet is)
Omron cuccok -
Szirty
őstag
Hali DP_Joci!
"Lehet-e siemens (s7-300-400 ) plc-nél a DB sorszámát változóval, vagy indirekten, vagy akárhogy megadni? "
Lehet.
Így hirtelen két megoldás jut eszembe.
Az egyik akkor használható ha a DB elérése egy blokkon belül türténik és a DB számát kivülről, paraméterként adod át.
Ezt teszi lehetővé a BLOCK_DB paraméter típus. A szóbanforgó FC/FB interface részében input változóként megadsz egy BLOCK_DB típusó változót.
Pl.:OPN után a DB-t a T DBWxxx L DBWxxx utasításokkal eléred.
A másik módszer nyakatekertebb. Össze kell állítani egy ANY pointert úgy, hogy a nekünk megfelelő számú DB-re mutasson (ez akár integer is lehet). Utána egy pointeres címzéssel elérhető a kívánt DB.
Azért ezzel nem árt vigyázni. Ha rossz DB-re vagy anak nem létező címére hivatkozol, akkor jön a "STOP caused by programming error" -
Szirty
őstag
Helló DP_Joci!
"Az ANY pointeres dolog az érdekes lehet.
Van esetleg egy példád erre, megpróbáltam kreálni egy ilyen pointert, de nem igazán tudok DB-re hivatkozni vele."Egyszer csináltam olyat, hogy különböző számú egyforma szerkezető DB-kből másoltam adatokat, ahol a DB számát a program kalkulálta ki. Itt ANY pointertípusban kellett összeállítani a címet, mert a másolás BLKMOV hívással történt, aminek ANY kell.
Persze hogy nem találom.Ha megnézed az ANY felépítését:
Akkor hamar kiderül hogyan kell összesakkozni egy címet.
Csak arra kell nagyon vigyázni nehogy mellécímezzen az ember. Az indirekt címzés már csak ilyen. Jó nagyokat lehet vele szívni és alaposan tesztelni kell.A helpben van példa az "Example of the Data Type ANY" címszó alatt.
FUNCTION FC1: INT
TITLE = Transfer and handling of ANY pointers
// Task :
// This block should copy a source area to a target area using
// SFC20 (BLKMOV) where the source is put together from
// a number of individual parameters to form an Any pointer
// and the target is already specified as an Any pointer.
AUTHOR: SIEMENS
FAMILY: TOOLS
NAME: ANY_PTR
VERSION: 00.01
VAR_INPUT
SRC_DB : INT;
SRC_Byte : INT;
SRC_Type : BOOL;
SRC_Len : INT;
DEST_Any : ANY;
END_VAR
VAR_TEMP
T_AR1 : DWORD;
T_AR2 : DWORD;
T_SRC_Any : ANY;
T_DEST_Any : ANY;
Count : INT;
SFC_Ret_Val: INT;
END_VAR
BEGIN
NETWORK
TITLE = Save the contents of the address registers AR1 and AR2
TAR1 T_AR1;
TAR2 T_AR2;
NETWORK
TITLE = Put together and check source area
LAR1 P#T_SRC_Any; //Load start address of the source Any
//pointer into AR1
L B#16#10; //Enter syntax ID in the Any pointer
T LB [AR1, P#0.0];
L B#16#2; //Load area type BYTE
AN SRC_Type; //If BYTE was chosen, then
//jump to entry
JC Tran;
L B#16#4; //Otherwise load area type WORD
Tran: T LB [AR1, P#1.0]; //and store in the Any pointer
L SRC_Len; //Enter number of bytes/words to be
//transferred
T LW [AR1, P#2.0];
L SRC_DB; //Enter source DB number
T LW [AR1, P#4.0];
L 0; //If source DB number = 0 then
//transfer from bit memory area,
==I ; //otherwise from a DB
JC Mem;
L P#DBX0.0; //Load area pointer in data block
JU Offs;
Mem: L P#M0.0; //Load area pointer in bit memory area
Offs: L SRC_Byte; //Load copy of the number of the first bytes to be copied SLD 3; //Convert to pointer format
+D ; //Add to area pointer
T LD [AR1, P#6.0]; //Enter result in ANY pointer
NETWORK
TITLE = Enter and check the target Any pointer
L P#DEST_Any; //Place address of Any pointer in AR1
LAR1 ;
L B#16#2; //If the area type of the transferred
//Any pointer
L B [AR1, P#1.0]; //= byte or = word, the jump
//follows
==I ;
O( ;
L B#16#4;
==I ;
) ;
JC Copy;
L W#16#80FF; //Otherwise load error code
T RET_VAL; //Transfer to the caller
JU End; //Finish block processing
Copy: LAR2 P#T_DEST_Any; //Load address of temp. Any pointer
L 5; //5 words must be copied
Back: T Count;
L W [AR1, P#0.0]; //Move the Any pointer
//as an input variable to
T LW[AR2, P#0.0]; //the local data
+AR1 P#2.0;
+AR2 P#2.0;
L Count;
LOOP Back;
NETWORK
TITLE = Call SFC20 (BLKMOV)
CALL SFC20
(
SRCBLK := T_SRC_Any,
RET_VAL := SFC_Ret_Val,
DSTBLK := T_DEST_Any
);
NETWORK
TITLE = Pass on return value of SFC
L SFC_Ret_Val;
T RET_VAL;
NETWORK
TITLE = Restore the contents of the address registers AR1 and AR2
End: LAR1 T_AR1;
LAR2 T_AR2;
END_FUNCTION
DATA_BLOCK DB10
TITLE = Copy_In
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: COPY_IN
VERSION: 00.01
STRUCT
test: ARRAY[0..29] of BYTE;
END_STRUCT;
BEGIN
END_DATA_BLOCK
DATA_BLOCK DB11
TITLE = Copy_Out
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: COPY_OUT
VERSION: 00.01
STRUCT
test: ARRAY[0..29] of BYTE;
END_STRUCT;
BEGIN
END_DATA_BLOCK
ORGANIZATION_BLOCK OB1
TITLE = Cycle
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: OB_CYC
VERSION: 00.01
VAR_TEMP
OB1_System: array [1..20] of byte;
Src_Db : INT;
Src_Byte : INT;
Src_Type : BOOL;
Src_Len : INT;
END_VAR
BEGIN
NETWORK
TITLE = First call example for FC1
// This call for FC1 copies 5 words from memory byte 33
// to DB10 from data byte 3. This means the memory
// words 33, 35, 37, 39, and 41 are copied to the data
// words 3, 5, 7, 9, and 11 of DB10.
L 0;
T Src_Db;
L 33;
T Src_Byte;
Set ;
= Src_Type;
L 5;
T Src_Len;
CALL FC1
(
SRC_DB := Src_Db,
SRC_Byte := Src_Byte,
SRC_Type := Src_Type,
SRC_Len := Src_Len,
DEST_Any := P# DB10.DBX 3.0 BYTE 20,
RET_VAL := MW100
);
NETWORK
TITLE = Second call example for FC1
// This call for FC1 copies 7 bytes from DB11 from
// data byte 13 to the process output image from
// QB99. This means the data bytes 13 to 19
// of DB11 are copied to the output bytes 99 - 105.
L 11;
T Src_Db;
L 13;
T Src_Byte;
CLR ;
= Src_Type;
L 7;
T Src_Len;
CALL FC1
(
SRC_DB := Src_Db,
SRC_Byte := Src_Byte,
SRC_Type := Src_Type,
SRC_Len := Src_Len,
DEST_Any := P# Q 99.0 WORD 5,
RET_VAL := MW100
);
END_ORGANIZATION_BLOCK -
Szirty
őstag
-
Szirty
őstag
Hali DP_Joci!
L P##DB_pointer_in_any
LAR1Betölti az akku1-be a #DB_pointer_in_any változó címét, majd az akku1-et az 1-es address regiszterbe tolja.
L B#16#10
T LB [AR1,P#0.0]10 hexa értéket tölt akku1-be, majd azt elrakja az AR1 address regiszter által címzett címre 0 byte és 0 bit eltolással (P#0.0 az eltolás).
Lényegében tehát ezzel a #DB_pointer_in_any változó nulladik byte-jába 10 hexa értéket rak.
Ha most megnézed az ANY felépítését:
Akkor látható, hogy az a byte mindig 10h S7 esetén. Nem véletlen tett ide 10h-tL B#16#19
T LB [AR1,P#1.0]Az ANY 1-es byte-jába 19h-t tölt.
Ez a byte mondja meg az adattípust. Ez egy nagyon érdekes sor, mert 19h adattípus nem létezik amennyire tudomL W#16#1
T LW [AR1,P#2.0]A 2-es byte az ANY típusnál az métlési faktor. Ennek akkor van jelentősége, amikor nem egy adatterületre kell hivatkozni (pl. blokk másolás). Ez mindig az adattípusban megadott típus darabszámára vonatkozik. vagyis ha ott Byte típus van meghatározva, akkor itt 10 10 byte-ot jelent, ha ott word van meghatározva, akkor a 10-es érték az ismétlési faktorban már 20 byte-ot jelent, stb.
L W#16#0
T LW [AR1,P#4.0]Itt kell megadni a DB számát, ami nem lehet nulla (mivel 0-ás DB nincs).
Ugyanakkor amennyiben az adatterület definíciója nem DB-t határoz meg (ANY byte6) akkor nulla kell hogy legyen. (bár ilyenkor ezt nyilván nem veszi figyelembe a rendszer).L #DB_num_in
T LD [AR1,P#6.0]A 6. byte elvileg az adatterület típusát adja meg. Az, hogy ide egy #DB_num_in nevű változót tölt arra utal, hogy van itt egy kis csúszás. Szerintem #DB_num_in-t a 4-es byte-ba kéne tölteni.
"Ezzel hibát nem kapok, de eredményt sem, lehet hogy az SCF84-et értem félre."
Attól függ mit szeretnél...
-
Szirty
őstag
ali DP_Joci!
"gazából nem látom a működés eredményét, ha az az lenne, hogy egyik DB-ből másol a másikba. "
Itt egy példa, ami egy integerben megadott számú adatblokkból egy INT típust egy integerben megadott számú címről bemásol az MW0-ba az ANY használatával.:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
SrcDB : INT ; //Forrás blokk száma
SrcADDR : INT ; //Kezdőcím a forrásblokkban
END_VAR
VAR_TEMP
SRC : ANY ;
RV : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
L P##SRC;
LAR1 ;
L B#16#10; //Mindig 10h
T LB [AR1,P#0.0];
L B#16#5; //Típus azonosító 5h=INT
T LB [AR1,P#1.0];
L W#16#1; //Ismétlési faktor = 1
T LW [AR1,P#2.0];
L #SrcDB; //A forrás DB száma
T LW [AR1,P#4.0];
L #SrcADDR;
SLD 3;
L DW#16#84000000; //Adatterület azonosítója 84h=Data block
OD ; //Az adatterület és a cím együtt egy DW-ben
T LD [AR1,P#6.0];
CALL SFC 20 (//Blokk másolás
SRCBLK := #SRC,
RET_VAL := #RV,
DSTBLK := P#M 0.0 WORD 1);
END_FUNCTIONÉs a hívás:
CALL FC 1
SrcDB :=24
SrcADDR:=4Ez az MW0-ba írja a DB24 DBW4-et
-
Szirty
őstag
Helló DP_Joci!
[I]"Persze lesz egy kis túlfutás, de egy ablakon belül megáll. Tudom, hogy lehet megszakítást is rendelni az aktuális ért = célértékhez de bízom benne, hogy normál program ciklusban is időben sikerül megállítanom a motort.
Ha valakinek van más vagy jobb ötlete a megoldásra, akkor szívesen várom."[/I]
Igen, az ilyen módszer egyszerő és eléggé elterjedt.
A "lineáris megközelítés" jobb módszer valamivel, de bonyolultabb is cserében. Továbbá szükséges hozzá, hogy a PLC képes legyen a motor sebességét fokozatmentesen szabályozni (pl. analóg kimeneten vagy kommunikációs buszon keresztül.A lényege az, hogy a megállási pont megközelítése úgy történik, hogy a PLC programja a motor sebességét fokozatosan úgy csökkenti, hogy az lineárisan pontosan a megállás helyén érje el a nulla sebességet. Így nincs túlfutás (illetve csak igen minimális).
(A szervóhajtások is ezt csinálják egyébként).Ehhez a következő információkra van szükség:
1. A hajtás pillanatnyi pozíciója (az enkóderről jövő pozíció)
2. A célpozíció (ahova a hajtás éppen megy)
3. A hajtás maximális sebessége (amekkora sebességgel a hajtás lassítás előtt közelít a cél pozícióhoz)
4. A lassítás hossza (az a pozícióval azonos koordinátában mért távolság a hajtás tengelyén, amekkora távolságra a célpozíció előtt m egkezdi a lassítást (rámpázást)).Egyszerű számításokkal (osztás, szorzás, kivonás, összeadás) a fenti adatokból a PLC kiszámolja hogy mekkora sebességgel kell forgatni a motort abban a pozícióban ahol éppen tart.
-
Szirty
őstag
Hali DP_Joci
"De gondolom vigyázni kell, hogy a lassítási utat ne vegye az ember túl hosszúra mert ha 0,5 vagy 1Hz-en kéne a motornak menni akkor lehet , hogy nincs elég nyomaték és hamarabb megállhat, ill. túl rövid lassítási útnál szintén túlfuthat (elméletileg). Jól gondolom?"
A lassítási út lehet hosszú is. A túl kis frekvenciát ki lehet küszöbölni a frekiváltó minimum frekvencia paraméterének megfelelő beállításával. (Ennél lassabban sosem megy). De ha ez túl nagy, akkor szintén nőhet a túlfutás.
A túl rövid lassítási táv nagyobb gond lehet, mert előfordulhat, hogy az adott tömeget akkora távolságon belül nem lesz képes lelassítani. Különösen ha a frekiváltón nincs fék opció.A frekvenciaváltó saját lefutó, idő alapú rámpáját minimumra kell venni (egy paraméter) mert ha az ott megadott rámpaidő nagy, akkor nem az analóg bemeneten csökkenő alapjel szerint (vagyis nem a PLC program által számított rámpa szerint) fog lassulni, hanem a saját rámpája szerint, ami nem jó ilyenkor :>
Megfelelő beállítással azonban dinamikus és viszonylag pontos működést lehet így elérni. Nem lesznek időtrabló, fölösleges lassúmenetek, a gép gyorsabban dolgozhat. -
Szirty
őstag
Hali DP_Joci!
"A freeportos dologhoz nincs véletlenül infód?"
De van. Viszont én inkább csak üzemeltetek S7-200-akat mint programozok, így tanácsot nem nagyon tudok ebben adni.
Rákeresve ezeket találtam, szerintem érdemes átnézni:S7-200 kommunikációval foglalkozó példatár
SIMATIC S7-200 Programming Tips 12/08Itt találsz számtalan példaprogramot és leírásokat a freeport mód használatára.
-
Szirty
őstag
Hali DP_Joci!
"Nincs véletlenül TP177 micro panelhez minta projected amiben el van készítve a hibakezelés egy S7-200-al."
Nincs. Én is csak keresni tudok:
Ezt találtamAzt nem tudom van-e benne alarm kezelés, nézd meg.
-
Szirty
őstag
Hali DP_Joci!
És ezt az értéket kéne visszaállitani. Elméletileg szerintem megoldható.
Nem dolgozok 200-assal, de nyilván megoldható. Minden ciklusban elmásolod egy retentív területre az értéket. Restart esetén meg egyszer vissza.
De nem tudom, hogy ennek van-e értelme. Ha a számlálót inkrementális encoderrel való pozícionálásra használod, akkor úgy illik, hogy bekapcsolás után mindenképp fel kell venni a refpontot és a számláló értéke ekkor áll be (addig nem szabad törődni a tartalmával akár elmentetted, akár nem).
Nem biztosítható ugyanis, hogy kikapcsolt állapotban a hajtás (aminek a mozgását az encoder méri) nem mozdul el. Ha pedig ez nem biztosítható, akkor az sem, hogy ugyanott lesz bekapcsoláskor, ahol kikapcsoláskor volt. Úgyhogy lehet egy szép kis offset a pozícionálásban, ami teljesen véletlenszerű. A véletlenszerű dolgok pedig általában nem barátai a műszaki megoldásoknak.De mivel nem árultad el mit akarsz csinálni vele, csak találgatni lehet...
[ Szerkesztve ]
-
aLávaló
csendes tag
válasz DP_Joci #1040 üzenetére
Szia!
Egy pár hozzászólással előbb kollégám Tomi megadta emailcímét...
Kérdezd nyugodtan ő a szaki nálunk ebben.Amúgy egy szoftver kell
[link]
GPPRO-EX
Van egy lista a fenti linken melyikkel működik együtt.
Specko kábel? Hát forgalmazunk egy USB-s kábelt és tudtommal azzal majdnem mindegyik megy az elmúlt pár évben megjelentek és az újak biztosan.OFF
Ha érdekel komolyan téged keress meg minket. [link]
Reklámnak vége!
ONLaci
-
Dezsi82
tag
válasz DP_Joci #2742 üzenetére
Szia!
Lehet csak nekem, de nem teljesen tiszta a feladat.
Van egy tartályod. Ennek a hőmérsékletét kell szabályoznod, tehát van benne egy hőmérőd?
Vagy az előremenő hőmérsékletből következtetsz a tartályéra?
És honnan tudod, hogy fűteni, vagy hűteni akarsz? Csak mert előfordulhat hogy a visszatérő ág alapján hűteni kellene, az előremenő alapján meg fűteni. Egyszerre nyomod a gőzt, meg a hideg vizet?[ Szerkesztve ]
-
Szirty
őstag
válasz DP_Joci #2742 üzenetére
Helló DP_Joci!
Én sem teljesen értem, de ennyi alapján én azt mondanám, hogy ha egy mérés van, de két beavatkozó (fűtés és hűtés) akkor egy PID-et használnék. Ha a beavatkozó jel negatív akkor az egyik, ha pozitív akkor a másik beavatkozó eszközt vezérelném.
Egy PID-del is lehet szívni (beállításkor), de ha egynél több is van és ezek hatással vannak egymásra, akkor könnyen lesz a beállítása rémálom.
-
Szirty
őstag
válasz DP_Joci #2745 üzenetére
Hali DP_Joci!
Alakul, de még mindig vannak kérdések:
Miféle samson szelep? (gyártanak/árulnak vagy 20-40-60 félét). Ez valamiféle propszelep lesz?"folyadéknak a hőmérsékletét kell szabályozni a visszatérő ágban mért hőmérséklet alapján"
Először előremenő ágat írtál. Tehát ott mérjük a fűtéshez a hőmérsékletet, ahol a tartály palástból kilép a fűtőközeg?
"Ha nagyon felforrósodna a gőz (95fok fölé), akkor a gőzt el kell zárni"
A gőz? Van 95 foknál hidegebb gőz? Vagy a másodlagos fűtőközegre értendő, (amit a gőz fűt és ami a tartály palástba belép és azt illetve nyilván a tartalmát fűti?A másodlagos fűtő közeg, ami a palástban áramlik és a gőz fűti, az zárt körben áramlik?
A hűtőfolyadék szelep propszelep?
Én nem használnék csak egy PID-et. Nem a kézi üzemmódba kényszerítéssel állítanám le ha 95 foknál melegebb, hanem a kimenete után venném el a beavatkozó Jelet és a PID-nek küldenék erre az időre egy INT_HOLD jelet.
A kézi üzemmódot meghagynám, hasznos lehet szervizeléshez, teszteléshez.
A web oldalamon találsz néhány infót S7 PID-del kapcsolatban esetleg az is segíthet... -
Szirty
őstag
válasz DP_Joci #2747 üzenetére
Szia Joci!
"A fűtéshez én is egy PID-et gondoltam használni, valamint egy másik PID-et a vákuum szabályozáshoz."
Az így korrekt szerintem.
"Mi a véleményed arról, ha a hűtőközeg hőmérséklet emelkedése esetén a samson szeleppel sorba épített szeleppel elzárom a gőzt, a szabályozót pedig hagyom szabályozni tovább (gondolom ez folytatni fogja a zárást). "
Hát ha jól van beállítva. De lássuk be, a gépkezelők leleményessége szinte végtelen.
A sorba épített szelep jó ötletnek tűnik, mert sok propszelep nem képes a 100%-os zárásra egy idő után (nálunk is van ilyen megoldás gőzre).
Én ilyen esetben a PID-et felfüggeszteném INT_HOLD és nulláznám az integráló tagot (már ha lesz integráló tag használva persze).
Mert esetleg gőz nélkül rossz beállítás vagy egyéb miatt az integráló tag elballag 100%-ig és akkor a visszahűlés miatt rányit a másik szelep, esetleg gond lehet.
Vagy tenni kell egy rámpagenerátort a PID és a szelep közé"Gondolom lesznek meglepetések ha a hőmérséklet elkezd növekedni és a tartályban keletkeznek gázok, ezek biztos megzavarják a vákuum szabályzós PID-et. Mit gondolsz erről?"
Erről azt gondolom, hogy a PID szabályzó alapvető feladata a beállított érték tartása éppen a zavaró körülmények ellenére.
Ha egy szabályzókörben nem volnának zavaró körülmények, szabályzóra se nagyon volna szükség. Csak beállítanánk valamennyi beavatkozó értéket és készen is van
Abban viszont igazad van, hogy valószínűleg ugyanakkor épp ez lesz a feladat egyik nehézségeA fordulat eltéréses elméleti fejtegetés szerintem helytálló.
Csak nem mindegy hogyan figyeled (számolod) a motor fordulatát. Lehetőleg a kimenő frekvenciát kell alapul venni, hogy a kapott érték helyessége a lehető legkevesebb egyéb beállítástól vagy körülménytől legyen függő.
A másik tanácsom, hogy a jeladó által adott impulzus hossza a legextrémebb esetben se legyen rövidebb, mint a PLC legnagyobb ciklus idejének a duplája. persze ha lassan forog, akkor ezzel nem nagyon kell foglalkozni. Az impulzus figyelésnél használj él figyelést és legyen néhány (10-20%) tolerancia a védelem megszólalásában, esetleg néhány másodperc időzítés (legalább két impulzus idő). -
Dezsi82
tag
válasz DP_Joci #2747 üzenetére
Szia!
Sokat gondolkodtam, hogy egy látszólag lezárt ügyhöz ötletet adjak, de aztán arra gondoltam, hogy majd eldöntöd, melyiket választod.
Szóval én úgy látom, hogy alapvetően két fűtőköröd van, két fajta időállandóval. Ennek megfelelően én két szabályzókört alkalmaznék kaszkádba kötve.
Ezt picit nehezebb beállítani, de a következőképp működne:
A slave köröd szabályozza a fűtőközeged hőmérsékletét a fűtőközeg hőmérséklete alapján (ezzel meg is lenne oldva a normál esetben létrejövő túlfűtés, míg az egykörös esetben simán túlfűtöd 95° fölé) . A master köröd pedig a slave-nek az alapjelét állítja a tartályhőmérséklet alapján.
És persze ezen kívül lenne még a vákuumköröd.
Lényegében ennyi, ha érdekel ez a megoldás, szívesen adok még információt, de a semmibe inkább nem túráztatom magam. -
Dezsi82
tag
válasz DP_Joci #2761 üzenetére
Szia!
Teljesen jól értelmezted a dolgot.
A beállítás a következő:
A slave-vel kell kezdeni, a lehető legkisebb zavaró tényezővel. Tehát a tartályból nem kellene kivenni vizet. A mastert kihagyod a dologból, és kézzel adsz meg a slavenek alapjelet. Így belövöd a gyors PIDedet. Ha ez meg van, akkor jöhet a mastered.
Nem kell semmivel sem többre figyelni, mint az egykörös megoldásnál. Viszont csak ezzel a megoldással lesz jó a szabályzásod.
Mert nézzük az egyköröst: Tegyük fel, hogy a tartályod 20 fokos, 80 fok a beállított. Mi történik? Kinyit valamennyire a gözszeleped. Ha a tartályod nem hűti jobban a fűtőközegedet, mit a gőz fűti (valószínű ez az állítás igaz lesz), akkor a fűtőközeged melegszik, szabályzó szelep 100%ra kinyit. Gyorsabban fog melegedni a fűtőközeged, mint a tartály, eléri a 95 fokot. Kikapcsol a soros szeleped. Tartály még mindig hideg, szabályzó 100%-n. Fűtőközegedet kihűti a tartály, eléri a visszakapcsolási hőfokot, soros szelep visszakapcsol. Gőz 100%n nyomul. Ismét melegszik a fűtőközeged, aztán megint 95 fokos lesz. Magyarul egy 100%-n nyitott szabályzó szelep mellett a soros szeleped fog egy ON-OFF szabályzást csinálni. Aztán persze a beállított hőfok közelében a szabályzó szelep lassan elzár. Ezen persze lehet szépíteni, de vagy lassú lesz a fűtésed (fűtőközeg együtt melegszik a tartállyal) vagy egy ON-OFF szabályzó lesz.
Kaszkád megoldás: Ugyanaz a példa. Mastered azt mondja a slave-nek, hogy kér mondjuk 80 fokos vizet (a PID blokkban be tudod állítani, hogy maximum 95 fokot kérjen) ekkor a fűtőközeg hőmérséklete alapján a slave szépen beszabályozza a fűtőközeget, ami gyorsan melegíti a tartályt. Persze az integrátor tag folyamatosan növeli fűtőközeg kívánt hőmérsékletét, eléri a 95 fokot, de nem lép túl. A tartály pedig olyan gyorsan melegszik, ahogy tud.Egy tanács: Mivel csak egy irányba tudsz szabályozni (csak melegíteni tudsz üzemszerűen, és szabályozva, ha jól értem) így, én az integráló tagot kikapcsolva próbálkoznék első körben. Persze ha megengedett a túllövés, és az onnan lassú visszaállás, akkor lehet integráló tagod is. Illetve ha mondjuk van folyamatos elvétel, akkor lehet integráló hatás is (legalábbis ha nem zárt a tartályköröd, és a víz nem a beállított hőmérsékletű vízzel egyenlő hőmérsékletű vízzel történik).
Bármiben kérdés lenne, szívesen segítek
[ Szerkesztve ]
-
Dezsi82
tag
válasz DP_Joci #2768 üzenetére
Szia!
Én egy biogáz erőműnek a gázfejlesztő tartályainak a hőmérsékletét szabályzom egy hasonló módszerrel. Ott a beavatkozó szerv egy ESBE keverő szelep, aminek ha jelet adok nyit, vagy zár, és ennek az időnek a nagyságát szabályozza a slave. De szépen működik.
Én is úgy csináltam, hogy a masternél SP a kívánt hőmérséklet, a PV_IN a tartály hőmérséklete, az LMN pedig egy DBbe megy, ami a saját kis PIDem alapjele.
Neked:
Master SP a kívánt hőmérséklet
PV a tartályhőmérséklet
LMN_HLM akkor mondjuk 80Slave SP a Mastered LMN-je
PV a fűtőközeg hőmérséklete
LMN_HLM a gőzszelepre megyHa szükségesnek érzed, elküldöm ezt a szabályzó részletét a programnak, de mivel a slave saját blokk, nem hiszem hogy van értelme.
-
Szirty
őstag
-
Szirty
őstag
válasz DP_Joci #2783 üzenetére
Hali DP_Joci!
A távadó méréshatára és a D/A-ról érkező értéktartomány a mérvadó a fizikai mennyiség kiszámításánál..
Ha az analóg bemeneten 0 olvasható be 4mA áramnál és 27648 20mA áramnál,
és a távadó méréstartomány -10...200 fok C, akkor 0 beolvasott érték tartoztik -10 celsiushoz és 27648 200 fokhoz.
Ha a távadó 0-400 fokos, akkor 0=0, 27648=400 -
-
Szirty
őstag
válasz DP_Joci #2821 üzenetére
Helló DP_Joci!
.fwx-et? Sajnos nem, semmiképpen.
Az sajnos már bináris és csak a futtató környezet számára szükséges adatok szerepelnek benne, a szerkesztő számára elengedhetetlen infók nem.
Ebből a szempontból olyasmi mint a bináris .exe, amiből már nem lehet visszanyerni az eredeti forrásprogramot. -
Szirty
őstag
-
And
veterán
válasz DP_Joci #3237 üzenetére
Működőképes lehet az elv, ha a proporcionális szelep megfelelő vezérlését meg tudod oldani. Mifelénk ezt pneumatikus működtetésű szabályozószeleppel, vagy ha a vákuumgép felépítése lehetővé teszi, a motor frekvenciaváltós vezérlésével szokták megoldani (utóbbi esetben is szükség lehet a vákuum rontására).
-
Szirty
őstag
válasz DP_Joci #3246 üzenetére
Üdv DP_Joci!
"Szóval a berendezésből egy vákuumszivattyú szívja a gázokat. A vákuumszivattyú -1barra(abszolút 0) törekszik, de ehhez a nyomáshoz kell „hozzáadni” nitrogénnel kb.200mbart (jelenlegi infóm szerint)."
Azzal nem kell foglalkozni, hogy ha a kamrában nem keletkeznek gázok (bármilyen okból) vagy nagyon kevés keletkezik, akkor ez a rendszer pocsékolni fogja a nitrogént?
-
-
sörösló
aktív tag
válasz DP_Joci #3248 üzenetére
Használtam már FESTO vákumérzékelőt, 0-10 V kimenetet ad 0-, -1 Bar vákumnál. Ez elég jó felbontás, nem? Keress rá Festoéknál, de ha arra járok megnézhetem neked a pontos tipust. Ha meg már van megfelelő analógjel akkor a gondok felén túl vagy. Ha nem túl nagy a légtér és pár mBar eltérés megengedett akkor lehet hogy egy sima digitális szeleppel is megoldható a dolog, pláne ha ilyen drasztikusan változnak az üzemi viszonyok. A nitrogén meg lényegében ócsó és nem ráz. A vákumszabályzás érdekes dolog, ha nincs nagy ingadozás az elvételben akkor akár mechanikus eszközzel is megoldható. Nálunk vannak rugós előfeszítésű mechanikus szabályzószelepek is ilyen célra, ha túlszív akkor beenged egy kis melléklevegőt. A vákumszivornya inverteres szabályzása se lenne sokkal gyorsabb szerintem. Alapvetően légmennyiség kérdése az egész. Nem egyszerű, ahogy mondjuk a PID szabályzás sem. Ha kicsi a rendszer tehetetlensége akkor jól és gyorsan beállítható, ha többórás tehetetlenség van a rendszerben akkor ülhetsz mellette napokig, vagy az öntanuló szabályzó még egy hét múlva is "tanul". A gyönyör ott kezdődik, amikor maga a megrendelő sincs tisztában a technológiával.
-
sörösló
aktív tag
válasz DP_Joci #3252 üzenetére
Ja és a vákumszivornyát egy ilyen rugós szeleppel kívülről is szabályozhatod, nem a nitrogént szívja feleslegesen a rendszerből, hanem a külső levegőt. A lényeg az hogy a cső végén legyen egyenletes a szívás, illetve a vákum "nyomása". Egy ilyen szeleppel akár 0.1 bar-ra is le tudod vinni a szívást, ami a beállítás után állandó értéken marad, ha megfelelő teljesítményű a szivattyú és el tudja vinni a hirtelen keletkező többlet gázmennyiséget.
-
Szirty
őstag
válasz DP_Joci #3257 üzenetére
Helló DP_Joci!
Szerintem nem kell ide HW-es PWM kimenet. Egy normál kimenet is megfelelő lesz.
1200-as PID-del még nem játszottam, de szerintem cyclic interrupt OB-ba kell rakni. Ide a 100ms hívási gyakoriság bőven megfelelő lesz szerintem.
A PID PWM kimenetének ciklus ideje szerintem 1-2 másodperc lesz a megfelelő. Max kitöltés 100% is lehet,a minimális bekapcsolási idő meg legyen nagyobb mint az 50Hz periódus ideje (20ms). -
Szirty
őstag
válasz DP_Joci #3259 üzenetére
Helló DP_Joci!
'Van egy préselési folyamat, ahol a nyomóerőről van egy analóg érték"
Ilyet csináltam már párszor S7-300-ra. Izgalmas :-)
Mennyi ideig tart a folyamat, ami alatt rögzíteni kell? Nem lehet túl gyors, mert az A/D és a PLC sem rakéta.
Ha 1-2 másodpercnél hosszabb a rögzítési idő, akkor szerintem nem lesz gond.Egy DB-be kell a PLC-vel elrakosgatni a mintákat, amit a HMI-n egy buffered trenddel meg lehet szépen jeleníteni.
A comfort panelek nyomtatási képességéről nincsen információm, de ha képes nyomtatni, akkor valószínűleg printscreen (hardcopy) formájában tudsz vele grafikont nyomtatni.
-
Szirty
őstag
válasz DP_Joci #3276 üzenetére
Helló DP_Joci!
Nekem még nem teljesen világos mi melyik és mivel van fűtve:
"Van egy, nevezzük kazánnak, amit fűtőszállal fűtűnk"
"Esetleg a kazán hőfokát is szabályozni kéne"
Ha a "kazánt" szabályzóval ellátott fűtőszállal fűtjük és ennek hőjével fűtünk egy másik tartályt, amelyikbe bejutó hőt egy keverőszeleppel lehet állítani, akkor nem lesz semmi gond, a "kazánnal" fűtött tartályban is mérni kell és a keverőszelepet a annak megfelelően állítani tehát oda is kell egy egyszerű szabályzó.
"Tapasztalat híján azon gondolkodom, hogy a kazánban nem lehet-e hő megfutás"
Mivel a fűtőszálat hőmérsékletre kapcsolod, nem fog afölé melegedni.
-
Szirty
őstag
válasz DP_Joci #3278 üzenetére
Helló DP_Joc!
Szóval az zavart meg (csak rosszul idéztem), hogy a kazánban a hőmérsékletet szabályzó tartja, aztán meg azt kérdezed, hogy a kazán hőfokát is szabályozni kéne?
Nyilván ha kazán hőmérséklete szabályozott, akkor az nem fog túlfűteni (hibamentes állapotot feltételezve),
Mi a kérdés? :-)
-
Szirty
őstag
válasz DP_Joci #3281 üzenetére
Szevasz!
Ez valóban kérdés. Nyilván van egy olyan hőmérséklet különbség, amire szükség lesz, hogy a kívánt érték tartható legyen.
Először szerintem közelítsd meg úgy, hogy a kazán beállított (elérendő) hőmérsékletébe nem avatkozol bele.
Legfeljebb ha a tartály hőmérséklete magasabbra vagy közel azonosra van állítva akkor lassan vagy sose éri el a beállított értéket teljesen. Nem tudom ez mekkora problémát okoz.