Hirdetés
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- btz: Internet fejlesztés országosan!
- Brogyi: CTEK akkumulátor töltő és másolatai
- bambano: Bambanő háza tája
- sziku69: Fűzzük össze a szavakat :)
- GoodSpeed: Márkaváltás sok-sok év után
- bb0t: Ikea PAX gardrób és a pokol logisztikája
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
Új hozzászólás Aktív témák
-
DasBoot
aktív tag
válasz
DP_Joci
#8858
üzenetére
Jó szerencsét! Amennyiben képes a mérlegelést az elektronika kezelni, akkor mindenképpen ezzel végezném el. Szerintem a PLC-t felesleges ezzel "terhelni". A járulékos műveleteket nyilván végezze el. Természetesen látatlanban írom ezt. Egyszer volt alkalmam beletekinteni egy Yamató típusúba, azon volt megfelelő számú ki-, és bemenet, . Ennek ellenére nem azt használták, hogy miért, nem tudom (mert Japánok voltak....). Üdv.: Joe
-
crucified
tag
-
byte-by
tag
válasz
DP_Joci
#7064
üzenetére
ha automata rendszerben gondolkozunk akkor legyen a legjobban használható rendszer.
többféle megoldás lehetséges.egyike , hogy 1 szivattyúval gyorsan feltöltjük,zárunk, majd némi nyomást generálunk,utána egy
ellennyomás szeleppel a próbanyomásig növeljük a nyomást.
vagy akkor +1 szivattyú nagyon lassú üzeménél fokozzuk a nyomást.
zárt rendszernél nagyon hamar fel fog menni a nyomás, finoman kell fokozni mindkét esetben.
ezt valamilyen mérő egységgel figyeljük, stb.
így nem kell túl bonyolult rendszer. -
byte-by
tag
válasz
DP_Joci
#7059
üzenetére
halo
ha módszer, akkor lehetőleg minél egyszerűbb legyen.
hogy ne legyen nyomás sokk, amit Szirty említett-
elég 1 szivattyú olyan teljesítménnyel ami nagyjából az üzemi nyomásnak felel meg.
ez nem tölti túl a tartályt.
kell egy szelep a szivattyú és a tartály közé. ennek zárásával, (vagy csőbe nyitásával) változtatod az
űrméretét, így a nyomás növekszik, mivel a folyadék nem összenyomható. van csavarorsós szelep is, stb.
ez lehet kézi, vagy akár pneumatikus, lényeg, hogy szép lassan lehessen működtetni, így nem lesz nyomás ugrás.( lehet kapni - nem is drágán - direkt nyomáspróba kézi-pumpákat. itt hálózati vízzel kell feltölteni a rendszert, majd ugyanez a víz át van vezetve a kézi pumpán, amivel további vizet erőszakolunk a rendszerbe, így a nyomás szintén szépen lassan növöget, ahogy mi pumpáljuk. ekkor szivattyú sem kell )
a módszer egyébként kevésbé információt magáról a hegesztések minőségéről.
ez nyomástartás illetve tömörségi/szilárdsági vizsgálat, a tartály összteljesítményéről kapunk információt.
a varrat egyéb paramétereiről nem ad infót.fontos, hogy ne legyen nagy eltérés a vizsgáló közeg és a vizsgálandó tárgy hőmérséklete között.
ez persze egy idő után kiegyenlítődik, de okozhat nyomás változást. illetve ahol csinálják a próbát lehetőleg állandó nyomás és hőmérséklet viszonyok legyenek.a levegő összenyomható, így ebben az esetben kevésbé használható. a legfőbb probléma vele, hogy
szivárgása esetén nagyon lassú az esetleges nyomásváltozás, az összenyomhatósága miatt.
a folyadék esetében sokkal gyorsabb.mi tejtermék sterilező berendezés fűtőcsöveit szoktuk régebben nyomás próbázni.
lezártuk a végét. a másik végére egy kézi pumpa volt szerelve , átfolyt rajta a víz, majd ha tele lett a kézi
pumpával nyomtunk még rajta.ekkor ügye nem az űrmértéket csökkentettük, hanem a rendelkezésre álló helyre még több vizet préseltünk be, de ugyanaz történik.
volt a pumpa mögött egy óra azon ellenőriztük a nyomást.
csövenként 11 perces volt a sztori.
10 perc volt a nyomástartás, 1 perc a szemrevételezés. -
Szirty
őstag
válasz
DP_Joci
#7059
üzenetére
Ha a módszert kell kitalálni, akkor azt javaslom, hogy a tartályban maradjon néhány százalék levegő (gáz) az összenyomhatóság miatt.
A folyadékkal teljesen nyakig töltött tartályban a vég nyomást kalapácsütés-szerűen érné el a közeg, ami meglehetősen kezelhetetlen.rfs!
Nyomáspróbához rendszerint folyadékot használnak biztonsági okokból. Nem dobja szét a házat ha kireped...
Talán ez az oka a víznek. -
byte-by
tag
válasz
DP_Joci
#5471
üzenetére
halo.
én sem vagyok igazán járatos, de pár dolgot még be kell állítani.
de van róla step-by-step PID segédlet a youtube-on is.
https://www.youtube.com/watch?v=TpmOJ9gKaZwaztán pár pdf. a kártya beállításaihoz.
http://literature.rockwellautomation.com/idc/groups/literature/documents/um/1769-um002_-en-p.pdfén nem foglalkozom AB-vel, példaprogramom nincs,de ezeket azért talán érdemes átnézni.
byte
-
And
veterán
válasz
DP_Joci
#5435
üzenetére
Szia,
Ez konkrétan BAT-300-as típusú volt, de lényegében a nálunk előforduló régebbi Panel PC sorozat összes tagja (BAT VGA Pro, BAT-600, BAT-300) letölthető soros RS232 porton keresztül. Vagyis azok, amelyekben belül még csak két natúr RS232-es port van beépítve, az egyéb fizikai rétegeket - RS422, Profibus DP - pedig egy vagy két opcionális, cserélhető belső konverter 'dobozka' biztosítja. Ezen HMI-k fájl-szintű tartalma letölthető egy '90-es évekből származó, DOS (!) alatt futó programmal, és be is tölthető ugyanolyan (vagy legalább kijelzőméretben megegyező) típusba. Az, hogy a Bartec alkalmazása (BMS Graf Pro) is meg tudja nyitni szerkeszthető formában, egészen ritka, egy .PRJ-fájl megléte esetén lehetséges, ilyet viszont utoljára talán a DOS-os szerkesztőjük generált, az újabb projektek között nem találunk. A BAT-sorozat viszont sajnos már évekkel ezelőtt kifutott, az utód Polaris-család példányainak tartalma pedig egyáltalán nem menthető, feltölteni is csak a saját (jó drága, mert Ex-es) Bartec-es pendrive-jával lehetséges, legalábbis a Profibus-os típusokét. A régi BAT-okból kimentett fájlok Polaris-formátumúra konvertálására is találtunk megoldást, de szerkeszteni vagy módosítani nem tudjuk a projektet, csak 'Polaris-kompatibilissé' tudjuk varázsolni azokat némi fájl-alapú turkálással, hogy betölthetők legyenek a Polaris-okba. -
And
veterán
válasz
DP_Joci
#4978
üzenetére
Megnéztem: ha nincs rajta program, amit a gyári új állapotot kivéve csak kiszedett elemmel lehet produkálni, akkor a CPU-modulon csak a vörös ERR led villog (és az IO-modulokon is), más életjelet nem ad. Csatlakozás után egy 'üres' applikációt hozott létre a PL7 Pro szoftver, és már ekkor eltűnt az ERR jelzés, a RUN led világított / villogott attól függően, hogy futott-e a 'program' vagy nem. Mindezt úgy, hogy egy sort nem írtam bele.
Azt is kipróbáltam, hogy lekapcsolt vagy éppen kiszerelt - elemet nem is tartalmazó - tápnál pár perc nem számít, ennyire gyorsan nem felejti el a programot a CPU, ha éppen van benne program. Tehát a tápcserét kényelmesen végre lehet hajtani, azon nem múlik a program elvesztése (TSX PSY2600-as táp és P57203-as CPU). -
And
veterán
válasz
DP_Joci
#4972
üzenetére
A Premium rendszer leírásában van szó a tápegységek jelzéseiről: [link], lásd az az 50-51. oldalakat. Az elég egyértelműnek tűnik, hogy rendben lévő feszültségszintek esetén a zöld OK jelzésnek világítania kellene. A 24V led szerepe nem ennyire tiszta, mivel a megléte típusfüggő. De két helyen is utalnak arra, hogy a PSY1610-es tápnál ez a led nem játszik: egyrészt azt írják, hogy a sensor power supply csak AC-tápoknál létezik (utóbbiaknál van csak értelme, a '24V' led ennek a kimenetnek a meglétét jelezné), másrészt konkrétan a 1610-es táp adatainál (51. oldal tetején) az 'Output = 24V sensors' ki van húzva, mivel annak DC-tápként nincs olyan kimenete, maga is 24V DC-t igényel.
Tehát ha a BAT led nem aktív és az OK sem, akkor van rá esély, hogy valóban csak táphibás a vezérlő. A CPU-n villogó ERR és a teljesen inaktív RUN led ebben a helyzetben nem túl egyértelmű, de normálisan működő tápnál hiányzó programra utalna. Ha érdekel, jövő hét elején meg tudom írni, hogy milyen jelzéseket ad egy programmal nem rendelkező Premium, mert van egy tesztpéldány a közelemben (annak a tápegysége az a bizonyos PSY 2600). -
And
veterán
válasz
DP_Joci
#4969
üzenetére
Sajnos a közelemben is csak egy TSX PSY 2600-as táp van, de ilyenkor jól jön egy multiméter
.
"A ki-bemeneti kártyák hibában vannak és az a kérdés, hogy lemerült az aksi és elszállt a program"
Ha a programot elfelejtette, akkor a CPU-modulon lévő RUN led biztosan nem fog folyamatosan zöld színnel világítani, és az elemhibát is jelzi egy vörös BAT feliratú led.
Ha még megvan a program, minél előbb csinálj róla egy mentést, amíg nem késő. -
01101010111
csendes tag
-
Dezsi82
tag
válasz
DP_Joci
#4943
üzenetére
Az a helyzet, hogy univerzális programot még nem készítettem, mindegyik alkalmazásspecifikus. Van olyan, ami SQL szervernek küldi az adatot, illetve olyan, ami rögzített adatokat fogad, és azokat tárolja le. Így sok hasznát ezeknek nem vennéd.
Ugyanakkor valamelyik projektünket egy kicsit ráérősebb időmben átalakíthatom, és mint TCP szerver, vagy kliens el tudja végezni ezt a naplózást. Ez azonban nem Profinetes naplózó, hanem TCP socket alapú. És a PLCben is meg kell csinálni a programozás részét. Ami nem sok, csak annyi, hogy adott időközönként, vagy trigger jelre elküldje az adatcsomagot a megfelelő formában, aztán az alkalmazás elmenti csv formában.
Ha gondolod, ezt szívesen megoldom, valószínű a jövő héten jutna rá időm -
Dezsi82
tag
válasz
DP_Joci
#4939
üzenetére
Üdv!
Az RSlinx legtöbb verziójával elérhető, amit írtál, amit különben DDE-nek hívnak.
Ezt gyári szoftverrel ethernetes PLCnél szerintem OPC szerverrel a legegyszerűbb elérni. De kinek mi az olcsó. Nekem a legolcsóbb, hogy írok egy alkalmazást Delphiben, illetve egy egyszerű programrészt a PLCben, aztán mehet is a naplózás
-
Dezsi82
tag
válasz
DP_Joci
#4938
üzenetére
Üdv
Az én esetemben vagy WinCC Flexible vagy Zenon lesz használva.
Elég nagy az esélye a wincc flexible-nek. Azt még ki kell próbálnom, hogy vajon tudok-e olvasni unlinked db-t, vagy sem WinCC Flexible-lel. Ha nem, akkor a PLCbe kell tennem egy függvényt, ami kiolvas egy sort egy elérhető db-be. -
Szirty
őstag
válasz
DP_Joci
#4905
üzenetére
Helló DP_Joci!
Én ezt úgy csinálom, hogy amikor a hajtásnak forognia kell, akkor 100 ms-onként mintát veszek a számláló értékéből (pozícióból) és kivonom belőle az előzőleg vett minta értékét, majd veszem az eredmény abszolút értékét.
Így megkapom az egy tized másodperc alatt megtett út nagyságát. Ha ez néhány másodpercen keresztül túl kicsi vagy túl nagy, akkor hibát jelez.
Írtam erre egy blokkot.Azt kell jól kitalálni hogy milyen gyakoriságú legyen a mintavétel.
Ha az encoder felbontása kicsi vagy az üzemszerű mozgás nagyon lassú is lehet, akkor a tized mp lehet hogy rövid. Illetve jól kell meghatározni a határértéket amin kívül hibajelzés keletkezik.Rosszul megválasztott értékekkel hamis hibajelzéseket ad, vagy a valós meghibásodást későn veszi észre.
Ez észreveszi ha nem jönnek impulzusok az encoderről. Azt viszont nem feltétlenül, ha az encoder tengely és a hajtás kapcsolata elfordul egymáshoz képest (pl. eltörik az encoder kuplung, de egymáshoz ér még a két fele és hajt, de néha kihagy egy-egy kört).
Ezzel ugyanis keletkezik működés közben egy pozíció offset, az meg géptől függően törést is okozhat.Lehet egy ellenőrző pontot (szenzort) tenni valahova a mozgás útjába ahol gyakran halad el. Amikor a szenzor érzékel, akkor meg kell nézni, hogy az encoder pozíció szerint is ott van-e. Ezt nyilván egy pozíció ablakkal kell vizsgálni. Ha az ablakon kívül érkezik a szenzorról impulzus, vagy az ablakon belül nem érkezik róla impulzus, akkor pozicionálási hiba van.
-
moseras
tag
válasz
DP_Joci
#4102
üzenetére
Üdv!
Van ugye egy alapjeled, hogy mekkora legyen a rés szélessége. Ez valahonnan jön: vagy felhasználó által beállított, vagy valamitől függő. Tehát értéktartó, vagy valamit követő formában van jelen.
Aztán van a mért értéked, hogy konkrétan mennyi a rés szélessége. A PID-re ráadod az alapjelet, és a mért értéket, és a PID kimenete változni tud +/- irányba, és ez már tudja változtatni a motor fordulatszámát +/- irányba.
Tegyük fel, hogy a rés kívánt szélessége X, a PID 0-ról elkezdett növekedni, és mondjuk 45% PID kimenet (tegyük fel, hogy a PID kimenete 0-100% tartományban mozog) olyan fordulatszámot eredményezett, amely épp tudja tartani X-et. Ha ezután X-t megnöveled, akkot a PID utánamegy, és megnövekszik a fordulatszám is, ha X-t csökkented, akkor is a PID is csökken, és a fordulatszám is csökken. Tehát a PID mindkét irányba tudja a fordulatszámot változtatni.
Szerintem felesleges trükközni, a PID megfelel erre a célra, persze be kell hangolni, és figyelni kell néhány dologra, pl. hogy van e mondjuk egy minimális fordulatszám, vagy maximális fordulatszám, ami alá/fölé nem mehet.
Imi.
-
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
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.
-
sörösló
aktív tag
válasz
DP_Joci
#4072
üzenetére
Hello,
Van egy s7-1200 –as plc és egy delta servo PTO kimenettel vezérelve.
Elméletileg a servo ha megérkezik a pozícióba, akkor utána tartja, azt a pozíciót ahol van. Nekem fékes motorom van és jelenleg a motor is tartja a pozícióban a terhet meg a fék is. Hogyan lehet azt előidézni, hogy csak a fék tartson és a motor ne melegedjen. Úgy, hogy a pozíció megmaradjon és hiba se legyen, tehát ne a hajtást kapcsoljam ki.Beépítesz egy független hűtőventilátort! Van egy minősített, működési engedéllyel rendelkező géped. Ez egyfajta "műszaki vizsga"! Bármilyen módosítás a Te felelősséged! Ha az a fék egyszer majd nem fog és valakit agyonüt akor mehetsz a börtönbe! Esetleg megpróbálhatod megmagyarázni a bíróságon, hogy te csak jót akartál.
-
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
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
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
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
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
DP_Joci
#3680
üzenetére
Hali DP_Joci!
Amit szeretnél, arra több megoldás is kínálkozik.
Megcsinálhatod ugyanazt amit S7-300-al. De használhatod a HMI recept kezelő funkcióját is, ami éppen erről szól. Másolgathatod a DB-k tartalmát a PLC programban, az is lehetséges.
Nem tudom melyik megoldást tartod megfelelőnek. -
moseras
tag
válasz
DP_Joci
#3602
üzenetére
Üdv!
(* deklarációk *)
FUNCTION_BLOCK Fb_AtlagoloSzuro
VAR_INPUT
rValue: REAL;
bBufferSize: BYTE := 10;
tPeriod: TIME := t#10s;
RESET: BOOL;
END_VAR
VAR_OUTPUT
rAverageValue: REAL;
END_VAR
VAR
Buffer: ARRAY[1..255] OF REAL;
tSampling: TIME;
FillTimer: TON;
I: WORD;
Tick: BOOL;
Init: BOOL := FALSE;
END_VAR
(* kód *)
tSampling := tPeriod / bBufferSize;
FillTimer(
IN := NOT Tick,
PT := tSampling,
Q => Tick
);
IF NOT init OR RESET OR bBufferSize = 0 THEN
Init := TRUE;
FOR I:= 1 TO bBufferSize DO
Buffer[I] := rValue;
END_FOR;
rAverageValue := rValue;
ELSIF Tick THEN
IF I >= bBufferSize THEN
I := 1;
ELSE
I := I + 1;
END_IF;
rAverageValue := rAverageValue + (rValue - Buffer[I]) / bBufferSize;
Buffer[I] := rValue;
END_IF;Az ötlet innen van: [oscat]
A FILTER_MAV_DW nevű blokkot módosítottam, úgy hogy REAL értékkel dolgozzon, továbbá, hogy időalapú legyen.
Ha működés közben módosítod a puffer méretét vagy a teljes periódusidőt, akkor teszteld le úgy is, mert arra nincs tesztelve !
Imi.
-
moseras
tag
válasz
DP_Joci
#3600
üzenetére
Üdv!
Az analóg jelre: egyszerű mozgó átlagoló szűrő (moving average filter), mondjuk 1sec-es mintavételezéssel, és mondjuk 10 sec-es periódussal. Ha megvan a 10 minta, akkor osztod 10-el, és ez lesz a szűrt érték. A következő mintánál a legrégebbit ki kell pakolni a tömb-ből, majd bele a legújabbat, és így tovább. Tehát mindig az utolsó 10 minta átlagát számolod ki. Szoktak még olyant is, hogy az átlagolás előtt eldobják a nagyon kiugró értékeket.
Persze lehet gyorsabb/lassabb a mintavételezés, és nagyobb/kisebb a periódus a jel tulajdonságaitól függően.
Imi.
-
moseras
tag
válasz
DP_Joci
#3281
üzenetére
Üdv!
Ha a kazán belsőleg szabályzott, akkor (remélhetőleg) az általad kívánt hőfokot tartja (persze az elején valamekkora felfutással). Biztosan van beépített védelme, így ha a szivattyú valami miatt leáll, a kazán akkor sem fog felrobbanni.
Veszteség: nyilván lesz veszteség, tehát a kazán hőmérsékletét valamivel nagyobbra kell venni, mint amekkorára a tartályt fel akarod fűteni.
A tartályt néhány fokos hiszterézissel szokták hőn tartani. Itt mi a cél ? Ez egy HMV tartály, vagy micsoda ?
Keverőszelep: ez miért kell ? Keverőszeleppel az előremenőt szokták azonos értéken tartani (mondjuk PI vagy PID szabályzóval), de itt miért kell ez ? Ha a tartályban elérte a hőfok a hiszterézis felső értékét, úgyis leállítod a kazánt, közben nem kell szabályozni szerintem, hacsak nem valami különleges dolog ez.
Még valamit a kazán hőfokhoz: tegyük fel, hogy 50 fokos tartályt akarsz. Tegyük fel továbbá, hogy a veszteségek miatt ehhez 58 fokos kazán elég lenne. De: a te kazánod mondjuk 70 fokon a legjobb hatásfokú (katalógusadat). Ekkor célszerű 70 fokon járatni, így jó lesz a hatásfok, és előbb felfűtődik a tartály.
Rajz: az előremenőt alulra szokták kötni, a visszatérőt pedig felülre.
Imi.
-
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. -
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
#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
#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
#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). -
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.
-
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.

-
-
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?
-
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
-
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
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
-
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.
-
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
-
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.
-
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ége
A 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ő). -
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
#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.
-
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? -
Pelmo
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
-
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...
-
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!
"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
"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
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
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
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-t
L 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 tudom
L 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
-
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
Új hozzászólás Aktív témák
- GYÖNYÖRŰ iPhone 13 mini 128GB Green -1 ÉV GARANCIA - Kártyafüggetlen, MS3338, 100% Akksi
- Új Lenovo 16 Ideapad Slim3 WUXGA IPS Ryzen5 7430U 4.3Ghz 16GB 512GB Radeon RX Vega7 Win11 Garancia
- ÚJ BONTATLAN Apple Macbook Air 15,3 M4 10C CPU/10C GPU/16GB/256GB - Égkék - HUN - mc7a4mg/a 3 év gar
- ÚJ Parkside 10000 mAh powerbank 3 év garanciával.
- Apple iPhone 15 128 GB Kék 12 hónap Garancia Beszámítás Házhozszállítás
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi

.






"
