- Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
- War Thunder - MMO Combat Game
- Battlefield 2042
- Dark Souls sorozat
- Xbox Series X|S
- Megjelenési dátumot kapott végre a Men of War II (PC)
- Call of Duty: Modern Warfare III (2023)
- Forza sorozat (Horizon/Motorsport)
- Le Mans Ultimate
- Escape from Tarkov
Új hozzászólás Aktív témák
-
moseras
tag
Sziasztok
Új vagyok a listán, üdvözlök mindenkit. Eddig PLC-vel nem foglalkoztam, csak 750-307-es CANopen WAGO-val. Ez egy CANopen slave, amit mondok neki egy master-ból, azt csinálja. A master egy linux-os panelPC jelenleg. Azt szeretném, hogy a 750-307-et a későbbiekben lecseréljük 750-837-re. Ez már programozható, PLC-ként is működhet. A programozó SW CodeSys alapú IEC61131-3. Jelenleg a HW még nincs meg, a SW is csak DEMO, de ebben már tudok próbálkozni.
Először teljesen elvi kérdéseim lennének:
1. A létra ágainak(jól fogalmaztam ???) jobb oldalán csak 1 kimenet lehet ? (tehát, ha egy új kimenet kell, ahhoz új network-ot kell készítenem ?)
2. Bonyolultabb hálózat esetén úgy érzem, hogy nem akarok az első ágon kimenetet definiálni, csak egy belső változót, és ezzel folytatni egy új network-ben. Ezt hogy tudom megcsinálni ? Erre való a Marker ?
3. A "kontakt-ok" lehetnek output-ok is ? Tehát képes egy kimenetet bemeneti változóként kezelni ?
4. Ha beteszek egy "TOF"-ot mondjuk 3sec-re, akkor addig amíg ez le nem jár, addig a PLC nem kerül be új ciklusba ? (mondjuk ez érdekes lenne)
5. Analóg jelet hogy lehet létrával kezelni ? Egy konstanshoz kellene hasonlítanom, és az alapján dönteni...
6. Nyomógomb élkezelést (egy nyomásra a kimenet BE, egy másikra pedig KI) hogy lehet létrában megoldani ? IL-ben találtam Szirty oldalán megoldást (pontosabban a PLC programozás jegyzetből), de létrára nem...
7. Melyik nyelv a "jó" megoldás a problémákra az 5 közül ? Gondolom ez feladattól függ, de általánosságban mikor jó a létra, mikor jó az ST ?
8. C, C++-os múltamnmal nekem egyébként az ST tetszik, de a létrát is meg szeretném érteni jól.Egyenlőre.
Köszi.
Imi.
-
moseras
tag
Szia Szirty
Köszönöm a gyors válaszokat!
Ezek alapján el is indultam egy valós példával:
[link]És a hozzátartozó lista:
VAR
IN1: BOOL; (*Garázsfeljáró autó/kézi váltókapcsoló*)
IN2: BOOL; (*Még nem tudom*)
IN3: BOOL; (*Hóérzékelő*)
IN4: BOOL; (*Garázsfeljáró fűtés kézi START/STOP nyomógomb*)
M100: BOOL;
M101: BOOL;
R_TRIG_1: R_TRIG;
SR_1: SR;
M1: BOOL; (*Garázsfeljáró fűtés feltétel*)
IN5: BOOL; (*Lakás fűtés igény*)
M2: BOOL; (*Lakás fűtés feltétel*)
Q101: BOOL; (*Termofej_1*)
Q104: BOOL; (*Garázsfeljáró fűtés aktív*)
T1: TON;
Q102: BOOL; (*Gázkazán*)
Q103: BOOL; (*Garázsfeljáró szivattyú*)
T2: TON;
LAKAS_KERINGETO_SZIVATTYU: BOOL;
Q201: BOOL; (*Lakás keringető szivattyú*)
END_VARSzóval ez egy valós példa szeretne lenni. Házas téma, lakásfűtés + garázsfeljáró fűtés.
1. A létrában az általad linkelt képen látható megoldást (valahol középen leágazok egy kontakttal, és onnan készítek egy coil-t), ezt nem tudtam megoldani. Mindig csak a meglévő coil-al akar párhuzamosan rakni egy másikat, de az elé nem enged befűzni semmit.
2. Kimeneti változók visszacsatolása/nyomógomb megoldás rendben, lásd a képet.
3. Használom az "M"-es változókat is, ez is jó.
4. "FB"-ben tudok több független kimenetet előállítani egy soron, úgyhogy most ezt használom létra helyett
5. Analóg-ot értem, de most ebben nem volt rá szükség. Akkor ST-ben megírom a fg.-t, aztán azt beillesztem a létrába vagy FB-be, ez így jól hangzik
Néhány dolgot nem értek:
6. "FB"-ben, ahogy a képen is látható nem tudok visszacsatoló vonalat rajzolni egérrel, címkézni kell, ez így nem szép7. ahogy a képen is látod, azt próbáltam, hogy először megfogom az eseményeket (pl. a garázsfűtés csak külső eseményektől függ, de a házfűtés a garázsfűtéstől is, ahogy a képen látható). Utána ezekhez a már magasabb szintű eseményekhez rendelem az output-okat. Viszont ez nem tűnik jónak, mert pl. a Q102 (gázkazán)-t az egyik be a másik pedig kibillenti, pedig működnie kellene. Itt akkor egy sorban egy kimenetre koncentráljak, és ahhoz tegyem oda a bemeneteket, mert akkor azt már más nem bántaná Vagy maradjon így, de akkor még egy külön sorban markerezzek, és ott OR-oljam össze a kazán jeleit ?
8. Úgy látom, hogy nem mindegy a network-ok sorrendje. Pl. a képen első a garázs, második a lakás. Ha megfordítanám, akkor a lakás elindulhat a garázzsal együtt
9. Mi alapján nevezzem el az "M"-eket ? Mitől lesz egy "M" M100.3 vagy M110.4 ? Ezt elég fontosnak gondolom, mert az a jó, ha ránézek, és azonnal tudom (nagyjából), hogy mi is akar az ott lenni...
Köszi.
Imi.
[ Szerkesztve ]
-
moseras
tag
Szia.
Csak most tudtam vele foglalkozni:
[link]Ok, értem a kimenetek kiképzését, ennek megfelelően alakítottam át. Egy kimenet csak 1 helyről van vezérelve. Az ágak sorrendje itt valóban nem számít. Valószínű először azokon az ágakon megy végig, amelyek egy másik ágba vissza vannak csatolva, aztán a maradékon.
HMI-vel kapcsolatban kérdeznék most:
Várhatóan MODBUS TCP alapú PLC-t választunk. Ezt szeretnénk vizualizálni. Tegyük fel, hogy a PLC-ben nincs sem WEB szerver, sem helyi vizualizáció (van ilyen is DVI kimenettel, de ~300k). Szóval lenne egy PanelPC valahol, azon egy windows/linux, és ezen futna a kapcsolattartó program. Ez a SW egy MODBUS TCP driveren keresztül tartaná a kapcsolatot a PLC-vel.1. Jól gondolom e a vizualizáció működését ?
2. Milyen "gyári" megoldások vannak erre, egyáltalán van-e PLC független vizualizációs tervező/futtató környezet sok-sok előre rajzolt objektummal, aminek én csak megadom, hogy melyik PLC változó a bemenete vagy kimenete, stb ?
3. Érdemes e egy ilyen vizualizáló SW fejlesztésébe belefogni ?
4. Ha naplózni is szeretném a változók alakulását a vizualizáló gépen (SQL alapon, a lekérdező cgi scripteket meg tudjuk írni), akkor erre milyen lehetőségeim vannak ?Köszi.
Imi.
-
moseras
tag
Szia Szirty!
Köszönöm.
Ok, én is így gondoltam a HMI vizualizáció működését. Sajnos még mindig nem vett a főnököm PLC-t, inkább elment nyaralni
Na mindegy, a következő igények merültek még fel a még nem is létező PLC-vel szemben:- a bemeneti/kimeneti változókon kívül tudok-e olyan változókat létrehozni (és azt HMI-ből állítgatni), ami az értékével egy művelettípust fog leírni... Konkrétan meg lehet e azt csinálni, hogy egy nyomógomb (mint bemenet) egy kimenetet egyszer bekapcsol, egyszer kikapcsol, egyszer inverzbe rak, egyszer pedig a kimenet követi a nyomógomb állapotát, és mindezt attól függően, hogy a művelettípust leíró PLC változómat hogy állítottam be a HMI-ből ? A user-ek azt szeretnék, hogy ezeket ne csak én (mint leendő PLC programozó) tudjam állítani, hanem ők is ? És persze nekem kell majd hozzá a HMI felületet megtervezni
- tegyük fel, hogy van olyan PLC-m, illetve HMI-m, amiben van RTC. A user azt szeretné, hogy egy "valami" változó reggel 6-ig egy X értéket vegyen fel, 6-12 között egy Y-t, stb. Ehhez milyen HMI "elem" van (van-e ilyen egyáltalán), illetve ilyenkor az RTC értékét a HMI-SW olvassa ki saját magából, és az alapján küldi el a PLC-nek, vagy a PLC olvassa ki a sajátját(ezt a verziót most nem tudom elképzelni, hogy ez hogyan is működhet) ? Én valami táblázatos vagy diagramos megoldást képzelek el, azon/abban beállítom a kívánt értéket, az idő lenne az X tengelyen, aztán a HMI olvassa a saját óráját, és leküldi az aktuális értéket...Ha a HMI meghal, akkor a PLC a legutoljára leküldött értékkel dolgozna, ez így rendben is lenne...
- tudok-e olyan változókat létrehozni (és ezt HMI-ből állítani), amely azt írja le, hogy az adott műveletet melyik bemenettel és/vagy kimenettel kell végrehajtani ? Az első kérdésemre visszatérve tehát a user azt is szeretné, hogy melyik nyomógomb melyik kimeneten végezze el azt a műveletet...
Bocs a szájbarágós leírásért, de csak a magam megnyugtatása miatt írom így le, nehogy félreértsük egymást.
Köszönöm.
Imi.
-
moseras
tag
Szia.
Köszi. Nagyon sokat segítesz, ha lesz egy saját HMI-nk, akkor te lehetsz az első, aki letesztelheti
Okés, tehát akkor valahogy így ? (ez most C-ül van, de az most mindegy, ha értem, akkor át tudom tenni ST-re vagy FB-re is):
// ezt a 3 valtozot allitom HMI-bol
unsigned int plc_pushbutton_desc; // ez a nyomogombot leiro valtozo
unsigned int plc_output_desc; // ez a kimenetet leiro valtozo
unsigned int plc_operation_desc; // ez a muveletet leiro valtozo
switch (plc_operation_desc) {
case 0:
bekapcsolo_muvelet(plc_pushbutton_desc, plc_output_desc);
break;
case 1:
kikapcsolo_muvelet(plc_pushbutton_desc, plc_output_desc);
break;
case 2:
inverz_muvelet(plc_pushbutton_desc, plc_output_desc);
break;
default:
inverz_muvelet(plc_pushbutton_desc, plc_output_desc);
break;
}És akkor ebből kell annyi block-ot felrakni, ahány be/kimenetet megadhatok ?
Imi.
-
moseras
tag
Sziasztok!
Találtam beépített PID szabályzót a WAGO-s libekben. Ez egy 0-100 között mozgó REAL-t ad eredményül, ami rendben is van egy analóg beavatkozó egységhez.
De milyen modult kell mellérakni, ha a beavatkozóm egy időalapú jobbra/balra forgást végző szelep ? Egyszerűen az %-ot időre konvertálom, és annak megfelelően nyitom/zárom a szelepet ?
A másik, hogy ha egy kétállapotú (relé) beavatkozóm van, akkor mit csinálok a PID-el ?Köszi.
-
moseras
tag
Szia.
Köszi, megtaláltam. Itt egy PID blokk van, annak sok kimenete, benne az analóg, illetve a PWM növel/csökkent is.
Mondtad, hogy használtok ilyen WAGO-s profibus I/O-kat. Mit csinál olyankor a PLC, ha ezek az I/O-k nem válaszolnak ?
Megáll minden, vagy csak az amivel kapcsolatos a távoli I/O ?
Illetve milyen változót kell a HMI-re kitenni, hogy a user is lásson ebből valamit ?Köszi
Imi.
-
moseras
tag
Szia.
A Moeller a WAGO-hoz hasonlóan CodeSys alapú fejlesztőkörnyezetet használ a PLC program megírására, tesztelésére, illetve a beprogramozásra. Tudtommal az OMRON nem ezt használja, bár konkrétan nem ismerem.
Nyilván az elv ugyanaz: ismerni kell a PLC RS232 portjának beállításait, sebesség, bitszám, stopbitek száma, paritás. Esetleg lehet autobaud-os megoldás is. Ha USB/CAN232 konvertert használsz, akkor ajánlom az ATEN UC-232A-t.
Ha nem programozáshoz, hanem már működés közbeni kommunikációhoz kell, akkor ahhoz OMRON-ost kell kérdezned.
Imi.
-
moseras
tag
Szia.
Köszi, keresem a megoldást rá.
"Az a modul amelyik leszakadt, ilyenkor rendszerint azonnal kikapcsolja a kimeneteit."
Erre nem találok megoldást CANopen-ben. A Beckhoff-nak vannak WATCHDOG-al rendelkező moduljai, amiknél megadható egy időintervallum, ami ha lejár, lekapcsolja a kimeneteit. A WATCHDOG-ot pedig a kommunikáció nullázza. A WAGO-nál nem találok ilyent.
RETAIN memory:
Szükségem lenne ilyenre is. A WAGO-ban van is ilyen 24 kByte (750-841). Azt szeretném, hogy a user a HMI-n kap egy táblázatot nevekkel, ott átírhatja ezeket, majd ezek visszakerülnek a RETAIN memóriába. Ha elmegy a táp, akkor is ezeket megőrzi, és legközelebb már ezekkel indul el. Jól gondolom e ezt ?Köszi.
Imi.
[ Szerkesztve ]
-
moseras
tag
Szia Szirty!
A k-bus ugye a modulok közötti belső busz, ahogy te is írtad. Ez egy 6-os érintkezősávon terjed. Tudtommal kettő a táp (5V), illetve 1 pár LVDS oda, 1 pár LVDS vissza. Az okés, hogy ha ezen a belső buszon leszakad a kommunikáció hiba miatt, akkor leállnak a kimenetek a modulokban.
Jelenleg nekem csak egy CANopen slave-em van, amit távolról vezérlek. Ha ennél megszakad a CAN busz, a kimenetei aktívak maradnak. Azt csináltam, hogy az egyik szabad DO-val egy időrelét impulzussal életben tartottam. Ha megszűnt a CAN busz, akkor az impulzusok is megszűntek, az időrelé is leszakította a számunkra fontos kimenetet.
"Az általam ismert HMI-knél ez máshogy működik"
Az általam felvázolt verziót meg fogom nézni, hogy működhet e úgy, ahogy leírtam.
Köszönöm.
Imi.
-
moseras
tag
Sziasztok!
Voltam egy WAGO-s bemutatón, ahol egy adott feladat végrehajtása közben a PLC-nek min. 5 ms, max. 52 ms, átlagban pedig 7 ms volt a ciklusideje. Ebből következik e az, hogy jelen esetben kevesebb mint 20 felfutó élet (1000/52 ms) tudnék számlálni egy DI bemeneten (mert ugye a legrosszabb esetben 2-szer is változhatna a jelem a bemeneten mielőtt egyszer kiolvasta volna a PLC) ?
Vagyis ha biztosra akarok menni 20 Hz-re, akkor fel kell tennem egy számláló modult ?
Köszi.
Imi.
-
moseras
tag
-
moseras
tag
Sziasztok
Újabb kérdéseim lennének PLC-vel kapcsolatban:
1.Van egy PLC (WAGO), van benne RTC. A gyártó azt javasolja, hogy az RTC-t olvasó részt külön programba tegyük, azt szervezzük külön taszkba, és ezt T#1s0ms időnként alacsony prioritással futtassuk meg. Az RTC értékét pedig ez a taszk tegye le egy GLOBAL DT-be. Ez így jól hangzik, de mi van akkor, ha el kell indítanom valamit 17:40:28-kor, és az RTC-t olvasó taszk mondjuk 17:40:27 legvégén olvasott be értéket, és legközelebb pedig csak 17:40:29 legelején (ez elvileg megtörténhet, hogy mondjuk 1002 msec-enként kerül sorra, hiszen az ütemező több nagyobb prioritással futó taszkot ütemezett be). Szóval ilyenkor kimaradt az én várt másodpercem !? Mi ennek a korrekt megoldása ?
2. Ha van n darab taszkom, amik egy közös GLOBAL területen lévő változót írnak/olvasnak (mint pl. az előbb), akkor mi a megoldása annak, hogy az olvasó taszk csak akkor nyúljon bele, ha az író taszk már végzett az írással (illetve fordítva, addig ne írjon bele, amíg a másik ki nem olvasta) ? Tehát semaphor(), mutex(). lock() stb-re gondolok...
Kell e ilyen ide ?Köszi.
Imi.
-
moseras
tag
Sziasztok
Meg lehet e oldani a direkt címzésű változók tömb-be rakását ?
Tehát e helyett
Valtozo AT %QX0.0: BOOL;
valami ilyent:
ValtozoTomb: ARRAY [1..8] OF BOOL :=
AT %QX0.0,
AT %QX0.1,
AT %QX0.2,
AT %QX0.3,
AT %QX0.4,
AT %QX0.5,
AT %QX0.6,
AT %QX0.7;Persze ezt a fordító nem fogadja el, de a probléma szemléltetésére jó.
Köszi.
Imi.
-
moseras
tag
Szia Szirty!
"Vagyis ha az RTC-ből olvasott idő nagyobb mint a beállított, akkor bebillentesz egy bitet. Ezt a bitet figyeli a programod, hogy mikor változik 0-ról 1-re"
Ez jó ötlet. Tehát akkor a probléma ezek szerint valós...
Akkor fogom bekapcsolni, ha "valós_idő >= bekapcs_idő AND valós_idő < kikapcs_idő""timing dolgait. S7-hez van ilyen, nem tudom wagohoz van-e."
Nyomozok, de eddig nem találtam.
"Ebben le van írva hogy minek mekkora a prioritása és mi mit képes félbeszakítani és mit nem."
Igen, nyilván ez a kérdés. A demo-kban nem figyelnek erre a problémára. Arra gondoltam, hogy lehet, hogy a taszkok nem is szakíthatóak félbe. Így nem jelentkezne a probléma. Ha ez nem lenne megoldva, akkor biztos találtam volna rá utalást, hogy erre figyelni kell.
Köszi.
Imi.
[ Szerkesztve ]
-
moseras
tag
Sziasztok
Használtátok e már a PLC-k filerendszerét naplózásra ?
A példákban azt látom, hogy bizonyos változókat (egész struktúrákat) lementenek a filerendszerbe egy adott néven, majd PLC_START eseménykor visszaolvassák. Gondolom ez egy FLASH alapú eszköz, ha én ezt folyamatos naplózásra használnám, akkor ez nem fog behalni 100k-200k írás után ? Vagy ne használjam naplózásra ?
A másik kérdésem, hogy ha otthonról frissítem a PLC progiját (router-en VPN+dyndns beállítva), és mondjuk a feltöltés közepén beüt valami krakk, akkor mi lesz a PLC-vel ? Timeout-ra fut, és újraindul a régi progival, vagy leáll az egész ?
Erre sem találok utalást a pdf-ekben
Köszi.
Imi.
-
moseras
tag
Szia.
- készíts egy időzítőt, ami a kívánt ütemet adja
- legyen 4 ÉS kapu, amiknek a kimenete megy Q1...Q4-re, egyik bemenetük az időzítőre, másik bemenetük pedig egy shiftregiszterként használt BYTE-os változó bitjeire (a shiftregisztert töltsd fel kezdőértékkel, mondjuk 1-el)
- a gomb felfutó éleinél léptesd a shift regisztert (SHL, SHR)
- ha végiglépett, akkor töltsd fel a kívánt kezdőértékkel újbólÍgy a SHIFT_BIT(1) van, akkor az első lámpa villog, ha SHIFT_BIT(2), akkor a második, stb. Vagyis a kívánt ÉS kaput engedélyezed a SHIFT-el, a többi kimenete néma marad.
Imi.
-
moseras
tag
Szia Szirty
"S7-nél alapból nincs kifejezetten olyan, hogy file rendszer."
WAGO-ban van ilyen, de nem mindegyikben. 1.5M a 750-841-nél, de van CF-es változat is (max. 4GB). Azt hiszem a 8+3-at támogatja csak, de ez nem biztos. Itt tárolódik a PLC-hez írt program, az esetleges feltöltött WEBHMI (ha van ilyen, akkor html file-ok és java *.jar-ok), illetve ha valamit progiból ide mentesz a PLC működése közben, akkor az is. Van egy SysLibFile.Lib, benne open(), close(), seek(), delete(), meg minden egyéb FUNCTION-ban. És van erre épülő magasabb szintű FB (SaveVariable néven), megadsz neki egy változót, a változó méretét, Load vagy Save illetve a file nevét, és van 2 kimenete (error flag, és egy timestamp a file-ról). Ha beFTP-zek, akkor is ezeket látom. Azt hiszem, hogy könyvtárak nincsenek.
"Persze úgy, hogy a CPU értesül a tápfesz megszünéséről, de ő maga pufferről néhányszáz ms ideig még üzemel, amennyi idő alatt iztonságosan kírja a RAM tartalmat."
Igen, ez valószínű. Pl. most találtam: van ShutDown esemény, amihez POU hívást-t lehet rendelni. Ha nem lenne puffer, akkor ez nem lenne megvalósítható. Hopp, itt egy kérdésem lenne: van olyan speciális pufferes modul bármilyen PLC-hez, ami annyit pufferel, hogy 2-3 SMS-t is el tudjon küldeni ilyenkor ?
"Ha tényleg így van, akkor ebből az következik, hogy teljesen mindegy hogy programból milyen gyakorisággal írsz adatokat"
Megkérdezem a WAGO-t, remélem igen. Ha mégsem, akkor nem használom naplózásra. Bár gyanús, mert 1.5M a flash, 512k a program RAM és 256k az adat RAM mérete, itt nem tudja tárolni a teljes filerendszert.
"Ezért ha a feltöltés megszakad vagy adathiba következik be, a feltöltött adatok nem jutnak szerephez."
Ok.
Köszi a segítséget.
Imi.
-
moseras
tag
Szia.
"Így gyakorlatilag létrában egy és kapcsolatot nem tudok megvalósítani vagy hogy milyen komponensekkel lehet"
Ez elég szomorú. Akkor nem tudom, hogy mit tanítanak ottan...
Először is én akkor félreértettem a problémát, mert amit írtam megoldásként, az csak arra jó, amit először írtál (illetve amit én abból megértettem).
Itt egy lehetséges megoldás létrában (ez CodeSys alapú, a te rendszeredet nem ismerem, ezt neked kell adaptálni). Tehát ez az általam először leírt megoldás, nem az ami neked ténylegesen kell, de ha ezt megérted, akkor már azt is meg tudod oldani:
1. és 2. sor: 1Hz/50% kitöltésben előállítása
3. és 4. sor: ez lépteti az "sh"-ban a bitet, illetve ellenőrzi, hogy fel kell e tölteni újból
5.,6.,7.,8. sor: ezek 2 bemenetű ÉS kaput valósítanak meg, és kapcsolgatják Q0...Q3-atAz "sh.0" azt jelenti, hogy az "sh" nevű változó 0.-ik bitje. Általánosan igaz, hogy egy 1 bitesnél nagyobb változónak "változónév.bitszám" módon lehet hivatkozni a bitjeire (0-tól indul az index).
Az időzítő-nél leveheted a jelet az m0-áról is és az m1-ről is. m0 alapból alacsony, m1 alapból magas.
Változólista:
VAR
sh: BYTE := 1;
m0: BOOL;
m1: BOOL;
ton1: TON;
ton2: TON;
ftrig1: F_TRIG;
sh_eq_8: BOOL;
ftrig2: F_TRIG;
END_VAR
VAR_OUTPUT
Q0: BOOL;
Q1: BOOL;
Q2: BOOL;
Q3: BOOL;
END_VAR
VAR_INPUT
I0: BOOL;
END_VARImi.
-
moseras
tag
Szia Szirty
"De azt megteheti, hogy úgy működik mint a write cache memória"
Ez lehetséges. Van X blokk a filerendszerben, akkor Y darabot tárol RAM-ban. Ha olyan blokkra van szükség, ami nics a RAM-ban, akkor ha van szabad hely még a RAM-ban, akkor beolvas egyet oda, ha nincs, akkor a legrégebben írt blokkot kiírja a FLASH-be, és oda olvassa be az új blokkot.
Végül is ez most számunkra mindegy, nagy FLASH-nél folyamatos írásnál úgyis a FLASH-be megy az írás. A kondis puffer pedig segít a RAM-ban lévő blokkokat kiírni a FLASH-be, hogy a filerendszer ép maradjon áramszünet esetén is.
A direkt címzésű változók tömbben való tárolására nem tudsz megoldást ?
Köszi.
Imi.
-
moseras
tag
Sziasztok
Szükségem lenne egy újraindítható timer-re. A "TP" sajnos nem az, futása közben nem lehet újabb éllel újraindítani. msec felbontású lenne jó, hogy tudnék ilyent írni ? Hogy tudom megnézni egy "gyári" "TP" kódját ?
Köszi.
Imi.
-
moseras
tag
Sziasztok
"Szükségem lenne egy újraindítható timer-re."
Magamnak válaszolok:
A TIME() függvényt kell használni, ezzel a PLC indulása óta eltelt időt kapom meg msec-ben. Erre lehet már timer-t építeni, pl. így:
FUNCTION_BLOCK TP_X
VAR_INPUT
IN : BOOL;
PT : TIME;
END_VAR
VAR_OUTPUT
Q : BOOL;
ET : TIME;
END_VAR
VAR
edge : BOOL;
start : TIME;
tx: TIME;
END_VAR
(*
version 1.2 19. oct. 2008
programmer hugo
tested by oscat
retriggerable edge triggered pulse similar to TP but with a retrigger function
if the pt input is 0 then output is always low.
*)
(* @END_DECLARATION := '0' *)
(* read system_time *)
tx := DWORD_TO_TIME(T_PLC_MS());
(* rising edge trigger *)
IF in AND NOT edge THEN
start := Tx;
IF pt > t#0ms THEN Q := TRUE; END_IF;
END_IF;
edge := in;
IF q THEN
et := Tx - start;
IF et >= PT THEN
Q := FALSE;
et := t#0ms;
END_IF;
END_IF;
(* revision history
hm 4. aug 2006 rev 1.0
original version
hm 17. sep 2007 rev 1.1
replaced time() with T_PLC_MS() for compatibility reasons
hm 19. oct. 2008 rev 1.2
renamed to TP_R to TP_X for compatibility reasons
*)
END_FUNCTION_BLOCKForrás:
[link]Imi.
-
moseras
tag
Sziasztok
Ha valakit érdekel, megkérdeztem a WAGO PLC-ben lévő FLASH-t:
Igen, filerendszer van benne, a 750-841-ben 1.5M a flash mérete. Lehet használni változók mentésére és/vagy naplózásra. A magyar forgalmazók szerint a németek sem tudtak egyértelmű választ adni arra, hogy mekkora az max. írásszám, javasolt a minél ritkább írás. Mióta forgalmazás van, azóta 1db PLC-ben szállt el a FLASH, a sok naplózás miatt, de az nem 841 volt, hanem valami más.
Imi.
-
moseras
tag
válasz Totalkezdo70 #613 üzenetére
Szia.
Eddig házas témával (FAL PADLÓ radiátoros fűtés, vízes, levegős, esetleg szondás hőszivattyú, gázkazán sima vagy külső hőmérséklet alapján vezérelt előremenő, garázsfeljáró, medence, napkollektor, világítás relés/dimmeres) foglalkoztam, ha lesz időm, megnézem a problémádat. Én jelenleg csak a WAGO-t ismerem (sajnos), de bármilyen CodeSys alapú PLC esetén tudok segíteni a SW-ben biztosan.
Imi.
-
moseras
tag
válasz Totalkezdo70 #613 üzenetére
Szia.
Megnéztem a PELLETS-es kazánt:
CodeSys DEMO-t innen tudsz venni (ezzel tudod kipróbálni a projekt file-t):
[CodeSys]Tehát csak az első 3 blokkra van meg:
- víztartály nyomásteszt
- pellet tartály szint teszt
- csiga mozgatásA blokkok állapotautomatával mennek, ha hibára (ERROR STATE) futnak, akkor csak a hibatörlő gomb hozza ki onnan őket (és persze addig nem engedélyezik a következő blokkot). Minden blokknak van EN-je, RESET-je.
Nézd meg, hogy így gondoltad-e. A CodeSys demo-val le lehet szimulálni, ahogy a VISU.png-ben is látni, ezt ajánlom mindenképpen.
Imi.
-
moseras
tag
Szia.
"mi az a state az egyes sorok végén?"
Az állapotautomata belső állapotát leíró változó neve.
Az állapotautomatákról pl. itt olvashatsz:
[link]A nyomástesztet valahogy így írnám le (felülről lefelé nézve az új állapotot kikódoló sorokat):
1. ha HIBA állapotban vagyok, ÉS nyomom a RESET-et, VAGY a blokk nincs engedélyezve, akkor NORMAL állapotba megyek
2. egyébként: ha NORMAL állapotban vagyok, ÉS alacsony a nyomás, akkor TÖLT állapotba megyek
3. egyébként: ha TÖLT állapotban vagyok, ÉS a nyomásom eléri VAGY meghaladja a 3.0 bar-t, akkor visszamegyek NORMAL állapotba
4. egyébként: ha a nyomásom magas, akkor átmegyek HIBA állapotba
5. egyébként: a state maradjon az ami, tehát state := state (ha ismered a CASE szerkezetet, akkor ez itt a DEFAULT ág)
Azt is láthatod, hogy a HIBA állapotból csak a RESET hozza ki, tehát ha oda bekerült, akkor csak emberi beavatkozással lehet onnan kivenni.
Ha belegondolsz, akkor ez nem más, mint egy grafikus leírása ezeknek:
if (state == egyik_allapot) {
if (feltetel)
state := masik_allapot;
} else if () {
} else fi () {
} else {
state := state;
}vagy:
case (state) {
case egyik_allapot:
if (feltetel)
state := masik_allapot;
...
default:
state := state;
}Persze, ezt le lehet írni ST-ben is, ki hogy szeretné. Az ST-vel az a baj, hogy a gépészeknek hiába mutatod, nem látják a lényeget, viszont a grafikus leírás sokkal jobban szemlélteti a feladat megoldását.
Imi.
-
moseras
tag
Üdv.
"csak létradiagramban szoktam garázdálkodni"
Szerintem ezt abban is meg lehet oldani, bár igaz, hogy nem próbáltam.
Az enyém FB (funkció blokk)-ban van leírva. Tuti, hogy a te környezetedben is van ilyen.
"Milyen PLC lehet"
A PLC bármilyen CodeSys alapú eszköz lehet, pl. Beckhoff, WAGO, és talán a Moeller is ilyen.
Imi.
[ Szerkesztve ]
-
moseras
tag
Sziasztok!
Pt100 (vagy Pt1000)-re keresek multiplexert. 20-25 darabot kell fogadni, és a nekik megfelelő számú illesztő (4 bemenetűek) sajnos nem fér bele a költségvetésbe. Lassú jelekről van szó, 10-20 sec mintavétel elég.
Ha van 30 millió min. kapcsolásszámú relém (ez 7.5 év 8 másodpercre), akkor azzal kapcsolhatom őket probléma nélkül ?
A másik kérdésem, hogy Pt100 helyett "NTC 20k"-t alkalmazni (0,5C pontossagra van szukseg 0-+30 tartomanyban) helyes e ? És melyik olcsóbb ?
Köszi.
Imi.
-
moseras
tag
Üdv.
"Az NTC esetében nem tudom ugyanez hogy menne"
Tudtommal az NTC-k is szabvány szerinti görbe mentén haladnak. Pl. a WAGO-s "NTC 20k" fogadó modul is írja, hogy ő linearizálja a karakterisztikát, és én már egy SIGNED16bit-ben kapom meg a hőmérsékletet (1 digit per 0.1 °C). Semmi config bit/byte nincs, ahová esetleg meg tudnám adni, hogy ez most melyik altípusú eszköz. Persze ettől függetlenül ha egy gyártó azonos terméke is hatalmasakat szór, akkor gond van
"ha esetleg tönkre megy és cserélni kell..."
Igen, ettől félünk mi is. Keresek 1%-os NTC-t, ha meglesz, beszámolok róla.
Köszi.
Imi.
-
moseras
tag
Szia.
"én is úgy tudtam, hogy az NTC-k nincsenek szabványosítva"
Lásd előző hozzászólás
"Az NTC mérési adatfelvevõkre/felfogókra"
Ezt én sem értem
"Epcos-gyártmányú NTC-khez kiadott szorzótábla:"
Ezek szerint van egy szabvány, és vannak a kivételek
Amit én ismerek WAGO-s PLC-ket, azokhoz van "NTC 20k" modul, és ott nincs semmilyen info arról, hogy van X db különböző altípus, és nekem kellene config bit/byte alapján ezek közül választani. 1%-os eszközöket keresünk, és lemérjük őket, majd beszámolok róla."a kalibrálás szerint a mért adatok jelentős eltérést adtak az adatlap alapján kiszorzott elméleti értékekhez viszonyítva"
Nem hangzik túl jól
Gyári minőséginek mondott termosztátokban is van NTC:
[link]"Nem is tudom, hogy használnak-e tömegesen NTC-t az iparban."
Igen, lakás témában, hűt/fűt, víz/levegős megoldásoknál használnak.
[L:http://www.honeywell.hu/catalog-ecc/ecatdata/md_ld83psspec.html][/L]Köszi.
Imi.
-
moseras
tag
Szia.
Ha egy kicsit bővebb lennél, többet tudnánk segíteni.
Általánosan elmondható, hogy hőmérséklet szab.-hoz PID kell.
Ehhez kell:
- alapjel (ez lehet fix, általad VISU-ból átírható, vagy valamilyen algoritmus alapján egy másik jelhez igazodó)
- mért érték (valamilyen Pt100-as (vagy 1000-es) eszköz)
- egy behangolt PID (önhangoló a legjobb, ha nincs akkor valami módszer a PID paraméterek meghatározására, pl. Ziegler–Nichols)
- valamilyen beavatkozó eszköz ami kapcsolja (vagy vezérli) a hőforrást és/vagy szelepet: ez lehet kétállapotú (RELÉ vagy ami jobb az valamilyen biztosan be nem égő szilárdtestrelé) vagy folyamatosan állítható 0-10V, 4-20mA, vagy valami 3P szelepSzelepek vezérlésére vannak DO-k, ez PLC gyártó függő, pl. a WAGO-nál általánosan használt a 24VDC 0,5A (lehet P-s vagy N-es). Ezek rövidzárvédettek, lehet róluk induktív eszközt is kapcsolni (max. 0.9J-t képesek hővé tenni). Persze lehet velük relét, mágneskapcsolót is kapcsolni.
Tényleg: tudja valaki, hogy a Pt100-nak miért van piros és fehér kivezetése ? Ez nem polaritásfüggetlen ?
Imi.
-
moseras
tag
-
moseras
tag
Udv.
OMRON-osok segítségét kérném:
CP1H kompakt vagy CJ1 moduláris PLC-kkel (illetve a hozzájuk való modulokkal) lehet e olyan RS232 kommunikációt létrehozni, hogy NINCS flow_control, de a DTR és RTS jelek a teljes kommunikáció alatt magasak legyenek ?
Azt akarom, hogy van egy kis fogyasztású RS232 eszközöm, ami képes a magasan tartott DTR és RTS jelekből "táplálkozni", de ehhez a kommunikáció teljes ideje alatt ezt az állapotot fent kellene tartani.
Köszi.
Imi.
-
moseras
tag
válasz adamtoth91 #716 üzenetére
Szia.
Egyetértek Szirty-vel, az ethernet alapú távoli IO lenne a legmegfelelőbb (gondolom ethernet van a laptopon).
Pl:
[link]Sajnos nem olcsók.
Ha van soros port, akkor szóba jöhet a PORT táplált (RTS-ből veszi a tápot) RS232/RS485 konverter, amire egy RS485 alapú távoli IO-t tudsz tenni.
232/485 konverterek:
[link]RS485 alapú távoli IO-k:
[link]Ha soros port sincs, akkor USB-s konverterek kellhetnek:
[link]Egy kis olvasnivaló:
[link]Imi.
-
moseras
tag
válasz Juneanne #723 üzenetére
Udv.
Ez alapján el tudsz indulni, de még nincs kész, az rád vár:
http://moseras.uw.hu/misc/kut.png
A második-hoz:
Gondolom azt tudod, hogy mi az a Tg és Tu. Ezeket kell lemérni, majd ez alapján az ott lévő infók alapján eldönteni, hogy akkor most melyik szabályzót is kellene használni. Majd meg kell határozni a paramétereket a táblázat alapján.
Imi.
[ Szerkesztve ]
-
moseras
tag
válasz Juneanne #727 üzenetére
Udv.
Mi van akkor, ha a tartályban a B alatt van 1 cm-el (és korábban sem volt B felett, tehát a leeresztés nem működik) ? A kút eléri A-t, elindul, ezzel tiltja a leresztést, és hipp-hopp full-ra nyomja a tartályt. Hogy a tartályból épp annyi víz hiányozzon, mint amennyit a kút épp termelt A-C részre, az szerintem gyakorlatilag kizárt. Szerintem mindenképp kell a tartályból visszacsatolás a kútszivattyú működtetésére.
Imi.
-
moseras
tag
válasz Juneanne #728 üzenetére
Udv.
akkor mit csináljak velük ?
Ráteszed őket a PID (illetve ami épp kell) blokk bemenetére. Nem ismerem a te rendszeredet, de nyilván van PI(D) blokk, aminek van P, I, D bemenete, na oda kell ezeket a paramétereket beadni. Tapasztalat alapján azt mondom, hogy vizualizáld a paramétereket, így HMI-ből át tudod írni őket, így a blokk azonnal az új paraméterekkel tud dolgozni, nem kell a progit újrafordítani. Persze ez most a te esetedben nem lényeges.
Ha a PID-el van gondod, akkor ezt javaslom:
[link]és itt a PID rész, kb. a közepétől indul.
A progi CodeSys-ben van.
Imi.
-
moseras
tag
válasz PLC Amatőr #735 üzenetére
Szia.
Ha abszolút kezdő vagy, akkor a google a te barátod.
Egyébként Szirty oldalát ajánlom:
A későbbiekben pedig valószínű döntesz 1 vagy 2 féle PLC mellett, utána már arra célszerű rágyúrni. Én a WAGO-t ismerem, de annyit látok, hogy pl. az OMRON lényegesen eltér ettől.
Üdv.
Imi
-
moseras
tag
-
moseras
tag
Üdv.
Modbus-ra ezt ajánlom:
[link]Csak Modbus RTU vagy ASCII-re ezt:
[link]Ebből lehet tanulni, hogy mindezt hogy oldották meg:
[link]lletve írják a PLCk tetszőleges memóriaterületét (többnyire)
Nemtudom OMRON/SIEMENS-nél hogy van, de WAGO/Beckhoff-nál csak erre a célra kijelölt területeket lehet. Mitsubishi FX-nél gyakorlatilag mindent lehet.
Meg tudja valaki nekem mondani, hogy milyen módon teszik ezt meg?
A PLC-k ismernek egy vagy több kommunikációs módszert, amelyek segítségével adatokat lehet lekérdezni/feltölteni. A fenti példában a MODBUS-ra adtam linkeket, szerintem jó ötlet ezzel kezdeni az ismerkedést.
Imi.
-
moseras
tag
Üdv!
Mitsubishi FX sorozatot programoz itt valaki ?
FX1N-ben nem megy a PID blokk (olyan, mint ha nem is írna bele a kimeneti regiszterbe), és nem jövök rá, hogy miért, leírás szerint működnie kell...Köszi.
Imi.
-
moseras
tag
válasz moseras #1039 üzenetére
Üdv!
A probléma megoldódott, ha valakit érdekel:
1. az S3 paraméternek nem volt kezdeti értéke
2. a D8030 és D8031 nem használható közvetlenül a PID_M funkcióhoz (át kell tenni őket másik regiszterekbe)Mindez úgy oldódott meg, hogy a MITSUBISHI support az itteni hozzászólás után megkeresett email-ben, és néhány levélváltás után elkérték a projektfile-t, és ki is javították.
Köszönet érte.
Imi.
-
moseras
tag
válasz Royality20 #2757 üzenetére
Szia!
Tapasztalatom szerint az idő kb. felében (vagy ennél nagyobb hányadban) legyen szabad a proci. Vagyis ha pl. 15ms a taszk végrehajtási ideje, akkor 30ms-nél gyakrabban nem hívhatod meg!
Imi.
Új hozzászólás Aktív témák
- Übergyors Samsungnak próbál látszani egy hamisított NVMe SSD
- Otthoni hálózat és internet megosztás
- (nem csak) AMD FX / Ryzen tulajok OFF topikja
- Gitáros topic
- Politika
- Kerékpárosok, bringások ide!
- Sorozatok
- Macska topik
- TCL LCD és LED TV-k
- AMD Radeon™ RX 470 / 480 és RX 570 / 580 / 590
- További aktív témák...
- -56% HP EliteBook 840 G8:i7 1165G7,16GB RAM,512GB NMVe SSD,Iris Xe,IR kam.+ujj.olv.,vil.MAGYAR bill.
- Monitortató plexi konzol több elérhető készletről MONITORCENTER
- -50% HP EliteBook 840 G8: i7 1165G7,32GB RAM,1TB NMVe SSD,Iris Xe,IR kam.+ujj.olv.,vil.MAGYAR bill.
- 1.250.000 FT helyett 940.000 FT !! MacBook Pro 16" M3 Pro 12CPU / 18GPU / 18GB / 512 SSD
- RTX 2080TI ROG STRIX GAMER PC