- Felpörög az asztali CPU-piac a következő pár hónapban
- Mini-ITX
- Hobby elektronika
- Androidos fejegységek
- Fekete misztikum: DeepCool Mystique 360 vízhűtés
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- Rendkívül ütőképesnek tűnik az újragondolt Apple tv
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Milyen TV-t vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
Hirdetés
-
Felpörög az asztali CPU-piac a következő pár hónapban
ph A friss pletykák szerint az AMD és az Intel is a frissítésein dolgozik.
-
Biztonsági tanácsot és újabb áttörést ígér az OpenAI
it Nem csak biztonsági tanácsot állított fel az OpenAI, de egy új, áttörést ígérő AI-modell tréningezését is elindította.
-
Poco M6 Plus néven újrázhat a Redmi Note 13R
ma A telefon feltűnt a HyperOS által támogatott készülékek listáján és a TÜV Rheinland is adott neki engedélyt.
Új hozzászólás Aktív témák
-
Szirty
őstag
válasz Shirchy #4373 üzenetére
Üdv Shirchy!
A már ajánlott tartály töltés nem adna ötletet?
Szíveskedj megtekinteni! -
Szirty
őstag
válasz Shirchy #4373 üzenetére
Esetleg ezt is nézd meg a hibakezelés résznél!
-
Szirty
őstag
Helló KLR!
"de nem tudok kimérni semmit, pedig küldök #1770 a CIO 104/ CIO 105 kimenetre. "
A #1770 nem hiszem hogy jó lesz!
Ugyanis a 104 és 105 word-ök 3-as és 7-es bitjének jelentése ha tartalmuk nulla ->Output use: NO!#1770 binárisan 1011101110000 tehát a 3-as és 7-es bit is 0 értékű, ami annyit tesz, hogy mind a négy kimenetet kikapcsoltad!
[ Szerkesztve ]
-
Szirty
őstag
Üdv KLR!
Így már jónak kellene lennie!
Annyit még, hogy az első ciklusban az n+1 és n+2 címekre küldött konfigurációs #80CC után mindenképpen várj minimum 200ms-ot mielőtt elküldöd ugyanide a konverziós adatokat!Különben előfordulhat, hogy kimegy ugyan a CIO word-be a #80CC, hiszen kiírja a program, de ha már azelőtt írsz oda mást, pl. a következő programsorban (#1770-et) akkor csak azt fogja megkapni a modul és "azt hiszi" hogy az a konfigurációs beállítás!
-
Szirty
őstag
Üdv!
"> FB1 NW11-en a #PLC_Msg_Count_Tmp -be mindig belekerül a 35 (Ha elötte az
> olvasás át van ugorva akkor is)
> FB1 NW13-on a #PLC_Msg_RCount_Tmp -be mindig belekerül a 416(Ha elötte az
> olvasás át van ugorva akkor is)"Az ökölszabályt be kell tartani! Mindig! Nincs kivétel!
1. Avagy a TEMP változók tartalmát nem szabad felhasználni az értékadás előtt a blokk lefutása során!
2. A TEMP változók tartalma minden alkalommal elveszettnek tekintendő, amikor a blokk lefutott!Ok.: Minden blokk ugyanazt a memóriaterületet használja a TEMP változók tárolására (Stack).
Volt már róla szó.Ha egy TEMP változót olvasol értékadás előtt, akkor az azelőtt lefutott blokk memória szemetét találod benne! Ha nem fut másik blokk vagy az nem használja azt az L címet, akkor ugyanaz van benne amit a blokk beleírt, de ez igen csalóka és rettentő nagy szívás oka lehet!
Hiába adtál te valamikor értéket az FB1-ben #PLC_Msg_Count_Tmp-nek, ahogy a blokk lefutott, huss, az értéknek annyi lesz, elvész. Amikor az FB2 megint fut, már szemét van benne!
Az #PLC_Msg_Count_Tmp az FB1-ben történetesen a 4-es lokális címen van:
Az FB2-ben a 4-es címet az S_ANY pointer 4. byte-ja foglalja el, ami a DB száma:
L #PC_DBNum // Source DB
T LW 4#PC_DBNum meg az FB2 inputja, aminek éppen 35-ös értéket adsz híváskor:
Az LW4 tartalma marad az LW4-ben amikor az FB2 lefut, legközelebb fut az FB1, ahol az LW4-re épp a #PLC_Msg_Count_Tmp változó kerül. Ezért amíg az FB1 nem írja (nem ad neki értéket) a 35 ott ül benne!
Soha, de SOHA nem szabad TEMP változó értékét felhasználni azelőtt, hogy értéket adtunk neki amikor a blokk lefut. Az előző futáskori értékadás itt nem számít. Ahogy a blokk kilép, le van futva, TEMP változó el van veszve!
Emiatt arra is nagyon kell figyelni, hogy ha egy TMP változó értékadása feltételtől függ (pl. elágazás van előtte) de az tartalmának a feldolgozása feltételtől független vagy más feltételtől függ, akkor az elágazás(ok) teljesülésétől fog függni a szívás, vagyis az hogy épp szemét van benne vagy hasznos érték!
Erre NAGYON oda kell figyelni![ Szerkesztve ]
-
Szirty
őstag
Helló rsf!
"Temp változókat nem nagyon szoktam használni és most teljesen elvitte a gondolataimat, hogy az STL-ben van elrontva vmi. Ugyanis STL-ben totál kezdő vagyok ez az első "művem"."
Nem gond amíg baj nem lesz belőle, ezért érdemes kipróbálni amit lehet.
Legalább megjegyzed. Mit gonolsz én hogy tanultam meg ennyire a TEMP tulajdonságait, hogy ezt mindenkinek az orra alá tolom? :-) -
Szirty
őstag
válasz Shirchy #4400 üzenetére
Helló Shirchy!
Ott követted el a hibát, hogy "összeakasztottál" két változót.
Az FC105 RET_VAL kimenetét az MW100-ba küldöd, a skálázás eredményét pedig MD100-ba!Ez azért nem jó, mert az MD100 és az MW100 két byte-ja azonos, így a két változó 2 byte átfedésben van egymással ezért részben felülírják egymást. Hogy hogyan azt az alábbi ábra személteti más címekkel:
Ez talán figyelmetlenség, de ha nem, akkor ajánlom figyelmedbe ezt:
Siemens S7 300-400 adatterületek és címzésmódokMeg kell szüntetned ezt a konfliktust.
Vagy a RET_VAL legyen MW100 helyett MW98, vagy az OUT legyen MD100 helyett MD102 (feltéve persze hogy ezzel nem kerülnek máshol használt változóval hasonlóképpen átfedésbe).[ Szerkesztve ]
-
Szirty
őstag
válasz Shirchy #4407 üzenetére
Üdv Shirchy!
"A DB változóit utólag már nem lehet módosítani csak az első megíráskor?"
A shared DB tartalmát úgy módosítod ahogy csak akarod. Bármikor akármennyi változót tehetsz bele akárhova vagy törölhetsz vagy írhatod át a nevét vagy típusát. Erre semmiféle korlátozás nincsen leszámítva hogy túlságosan nagy nem lehet.
Csakhogy az ezzel járó összes következménnyel számolnod kell ám!
Az egyik amit Mazsika írt, hogy ezzel a DB aktuális tartalma a PLC-ben elvész amikor áttöltöd (felülíródik).
A másik, hogy ha törölsz egy változót a DB-ből vagy annak nevét átírod, és arra a változóra a programod már hivatkozik valahol szimbolikus címzéssel, akkor ez a hivatkozás abban a pillanatban hibás lesz, ami nem meglepő, lévén a változó azon a néven megszűnik létezni!
A harmadik hogy ha változót illesztesz a DB-be (nem a végére) vagy törölsz vagy úgy írod át az adattípusát, hogy az új típus hossza nem azonos a régiével (pl. REAL-t INT-re módosítod) akkor az összes változó címe eltolódik ami az átírt után van. Ezért a programban minden abszolút hivatkozás ami az átírt változó utáni többi változóra vonatkozik (amelyikhez hozzá sem nyúltál) hibás lesz!
-
Szirty
őstag
Hát van ilyen bug is...
Nyilván erre gondolsz... -
Szirty
őstag
Hali!
Én úgy szoktam megkerülni a hibát (workaround) hogy átmenetileg megadok egy általa helyesnek vélt típust és kimentem, majd bezárom a szerkesztőt.
Újra megnyitva megint átírom a hibás típusú változót jóra (mert ekkor derül ki, mint a videón is hogy még mindig hibás, nem íródott át). Megint elmentem és bezárom, harmadszor megnyitva már jó a típus és visszaírom a változót az utasításnál. -
Szirty
őstag
válasz Shirchy #4417 üzenetére
Helló Shirchy!
Az STL forrást Copy-Paste módszerrel be tudod illeszteni.
Azért esik szét, mert proporcionális karakterkészlettel illeszted be. Hogy ne essen szét, válaszz monospaced készletet! Pl. Courier new.A létradiagramot, mivel grafikusan van ábrázolva nyilván képként tudod beilleszteni.
A képet elkészítheted prtscr-el is, de én inkább egy képkivágó programot vagy olyan rajzoló programot ajánlanék ami támogatja a screenshotok készítését.Megoldás lehet még a nyomtatás képbe funkció is. Ha van MS office telepítve akkor nyomtathatsz "Mocrosoft image dokument writer" eszközre ami egy MDI file-t hoz létre amit szabadon beilleszthetsz bármilyen wörd dokumentumba.
Vagy telepíted a PDF Creatort, ami egy PDF nyomtatót hoz létre, stb...
Az FC105-öt miért akarod kinyomtatni?
-
Szirty
őstag
válasz Shirchy #4422 üzenetére
Üdv!
Jó. Akkor itt az FC105 forráskódja:
FUNCTION FC 105 : WORD
TITLE =SCALING VALUES
//
AUTHOR : SEA
FAMILY : CONVERT
NAME : SCALE
VERSION : 2.1
VAR_INPUT
IN : INT ; // input value to be scaled
HI_LIM : REAL ; // upper limit in engineering units
LO_LIM : REAL ; // lower limit in engineering units
BIPOLAR : BOOL ; // 1=bipolar; 0=unipolar
END_VAR
VAR_OUTPUT
OUT : REAL ; // result of the scale conversion
END_VAR
VAR_TEMP
IN_REAL : REAL ; // input value as a REAL number
K1 : REAL ; // low limit for input value
K2 : REAL ; // high limit for input value
SPAN : REAL ; // HI_LIM - LO_LIM
TEMP1 : REAL ; // temporary result
END_VAR
BEGIN
NETWORK
TITLE =
//
// set K1 and K2 constants based upon BIPOLAR
//
SET ; // if(BIPOLAR=0)
A #BIPOLAR; // .
JC EL01; // {
L 0.000000e+000; // K1=0
T #K1; // .
JU EI01; // } else {
EL01: L -2.764800e+004; // K1=-27648.0
T #K1; // .
EI01: NOP 0; // }
L 2.764800e+004; // K2=+27648.0
T #K2; // .
//
// convert input (IN) to real
//
L #IN; // ACC1=IN
ITD ; // convert to double integer
DTR ; // convert to real
T #IN_REAL; // IN_REAL-IN as a real
//
// determine SPAN = HI_LIM - LO_LIM
//
L #HI_LIM; // SPAN=HI_LIM-LO_LIM
L #LO_LIM; // .
-R ; // .
T #SPAN; // .
//
// If the input value is outside the K1 and K2 range, the output
// is clamped to the nearer of either the LO_LIM or the HI_LIM
// and an error is logged. If the input value is exactly at a limit the
// output will be set to the computed limit with no error returned.
// changed 2/14/00 by ERI per RQ210693
L #IN_REAL; // if(IN_REAL<K1)
L #K1; // .
>=R ; // .
JC EL02; // {
L 8; // error
T #RET_VAL; // .
L #LO_LIM; // ACC1=LO_LIM
T #OUT; // OUT=ACC1
JU FAIL; // error
EL02: POP ; // } else {
L #K2; // if(IN_REAL>K2)
<=R ; // .
JC EI04; // {
L 8; // error
T #RET_VAL; // .
L #HI_LIM; // ACC1=HI_LIM
T #OUT; // OUT=ACC1
JU FAIL; // error
EI04: NOP 0; // }
NOP 0; // }
//
// scale the input
//
L #K2; // TEMP1=K2-K1
L #K1; // .
-R ; // .
T #TEMP1; // .
L #IN_REAL; // IN_REAL-K1
L #K1; // .
-R ; // .
L #TEMP1; // divide by TEMP1
/R ; // .
L #SPAN; // multiply by SPAN
*R ; // .
L #LO_LIM; // add LO_LIM
+R ; // .
T #OUT; // OUT=scale(IN_REAL)
//
// set BR bit : no error-set BR bit to 1; with error-set BR bit to 0.
//
L 0; // return error code 0
T #RET_VAL; //
SET ; // RLO = 1 (NO ERROR)
JU SVBR; //
FAIL: CLR ; // RLO = 0 (ERROR)
SVBR: SAVE ; // BR = RLO
END_FUNCTION -
Szirty
őstag
válasz zoli147 #4427 üzenetére
Üdv zoli147!
Így blöffre (tehát anélkül hogy pontos adatnak utána néztem volna) azt mondanám, hogy igen.
Nem tudom mennyi egy Logo ciklus ideje (átlagos felhasználásnál), de ciklus időnyi és kimenet (főleg ha relés) késleltetésnyi pontatlansággal valószínűleg számolni kell. Ez a pontatlanság nagyságrendileg (szintén blöffre) szerintem max. 10-20ms.
Ha ilyen pontatlanság (tehát ez esetben a fél másodpercet 10-20ms szórással hozza) még megfelel, akkor érdemes utánanézni a pontosabb adatoknak.
Nagyon kicentizni azért nem érdemes... -
Szirty
őstag
Üdv rsf!
A DBk számát csökkentheted ha az IEC timereket egy FB-ből hívod és használod a multiple instance lehetőséget.
Akkor csak egyetlen DB-kell akárhány IEC timert használsz.
[ Szerkesztve ]
-
Szirty
őstag
válasz KB.Pifu #4432 üzenetére
Helló KB.Pifu!
Annyi FC105 lehetséges amennyi library van. Hogy melyik mit csinál az teljesen fakultatív.
A blokk neve egyébként AE_464_2. Az S5_Cnvrt a family, amihez tartozik, ez alá sok blokk tartozik.
Szerintem ez a blokk akkor használatos, amikor S7 PLC-n S5 PLC-ről konvertált programot akarunk futtatni (migráció), mert az S5 másképpen kezeli az analóg bemeneteket (sok egyéb különbség mellett). -
Szirty
őstag
válasz Shirchy #4440 üzenetére
Helló Shirchy!
A WinCC Flexible-ben minden objektumnak neve van.
Ezt a nevet automatikusan kapja (BUTTON_1, BUTTON_2, Text_Field_34, stb).
Ezt természetesen utólag átírhatod ha akarod, de két azonos nevű objektum egy képen nem lehet.
Továbbá az objektumok neve (NAME) semmilyen formában nem jelenik meg a runtime képernyőjén!Ennek fényében kérdezném, hogy mit kell érteni nevek alatt a problémád esetében? Mert ebből azt gondolom, hogy nem az objektumok nevét!
-
Szirty
őstag
-
Szirty
őstag
válasz moseras #4437 üzenetére
Üdv moseras!
"hogy szimulálni tudjak, de egyébként S7-1200 CPU lesz, csak sajnos az S7-1200-at nem lehet szimulálni)."
Szerintem lehet. TIA portal 12-vel...
"Elolvastam a [multiple instance] írásod, ott is így van, ha jól értettem."
Az egész multiple instances lényege az, hogy ha egy level1 FB-ből másik FB-t hívsz (level2) akkor level1 FB instance DB-jében a level2 idbje struktúraként beilleszthető.
Mindez többszörös mélységig megtehető. -
-
Szirty
őstag
válasz Shirchy #4460 üzenetére
Hi!
"Átnéztem az objektum neveket és nincs két egyforma,szóval azzal már nem lehet probléma."
Nem kellett volna átnézni, mert nem lehet kettő egyforma! Ez alatt azt kell érteni, hogy egy screenen nem lehetséges. Tehát létre sem tudsz hozni több egyformát! Ennélfogva nem is találhatsz egyformákat.
De szerintem továbbra sem objektum nevekről van itt szó, mivel mint azt már kifejtettem a nevek NEM jelennek meg a runtime-ban! Egy text objektum kijelzett szövege NEM az objektum neve. Ezért az lehet azonos nem csak kettő, de több is!.
-
Szirty
őstag
válasz Shirchy #4463 üzenetére
Helló Shirchy!
Ebbe én is belefutottam már. Erre oda kell figyelni! :-) AMikor új projectet hozol létre az legeslegelső dolog legyen a nyelv beállítása. Akkor is ha csak egy nyelvet akarsz és az nem az angol amire eredetileg beáll.
Minden egyes szöveg ugyanis amit a nyelv beállítása előtt beleírsz a projectbe el fog veszni ha később törlöd az angolt (amibe írtál)."Na ez után jött az,hogy nem javította át a feliratokat. A megoldás tényleg az lett,hogy az angol nyelvi beállítást teljesen töröltem,így már minden klappol."
Miért javította volna? Az angol az nem magyar. Akkor lenne csak nagy a kavalkád, ha öncélúan elkezdené összekeverni a nyelveket amikor úgy adódik. Neked kell tudnod mit csinálsz, a program nem tudja mit szeretnél ha nem közlöd vele valahogyan! Egyébként nyelv törlésénél figyelmeztet, hogy a nyelvhez tartozó összes szöveged el fog veszni és megkérdezi komolyan gondoltad-e.
Egyébként van mód a nyelv átemelésére is, de neked kell csinálni nem automatikusan történik. De legalább nem kell mindent újra begépelni.
1. Mielőtt bármit is törölnél létrehozod a magyar nyelve: Megnyitod a project fában a Language settings / Project Languages-t és pipát raksz a kívánt nyelv elé (pl. Magyar)
2. Megnyitod a project fában a Project Texts-t. Kapsz egy listát, amiben benne van az összes nyelven a nprojectbe eddig beírt összes szöveg! Látod hogy melyik nyelvhez milyen szöveg tartozik. Ha a magyart most hoztad létre, akkor az az oszlop üres (nincs magyar szöveg). Az angol oszlopban meg látod a magyar szövegeket amiket véletlenül írtál be oda
3. Kijelölöd az angol oszlopban az összes szöveget (csak abban az olszlopban és ott mindet)
4. Ctrl-C, Kijelölöd az angol oszlopban az összes sort, majd Ctrl-V. Ezzel átmásolod a szövegeket az angol nyelvből a magyarba. Ezután Language settings / Project Languages-nél ki lehet venni a pipát az angol elől.
Így a szövegek nem vesznek el, de az ékezeteket neked kell egyenként utólag beírkálnod (a Project Texts-ben ezt kényelmesen megteheted, akkor nem marad ki egy sem)
-
Szirty
őstag
-
-
Szirty
őstag
válasz plutokas #4473 üzenetére
Üdv plutokas!
A válasz: Igen!
A következő írásokat ajánlom figyelmedbe a kérdéseddel kapcsolatban:
- A hibakezelő OB-k
- Hibakezelés: az OB86 (Rack Failure)
- DP station állapotának lekérdezése S7 PLC-ben -
Szirty
őstag
válasz moseras #4475 üzenetére
Szevasz!
Funkcionálisan nincs sok különbség. Igazából szerintem koncepció kérdése.
Én a beállításokat, statisztikai adatokat, méréseket, részeredményeket, DB-be szoktam tenni.
A berendezés belső állapotait (Pl. RS tárolók) és bináris változóit pedig merkerekben.A DB-k tartalmát könnyebb elmenteni, továbbá szerkezetük rugalmasan módosítható. A merker memóriaterület mérete fix (és rendszerint kisebb), csak a létrehozott változótípusok meghatározására van lehetőség.
-
Szirty
őstag
Helló!
Pontosan mit szeretnél elérni?
A kérdés nem úgy értendő, hogy hova ne tudjon kattintani, hanem úgy, hogy mi az a cél, amit ezzel a korlátozással kívánsz megvalósítani?
Nem szeretnéd, hogy illetéktelenek lássák, hogy XY rokordban mi van beállítva? Vagy azt hogy nehogy átállítsák?
(Qrvára nem mindegy melyik) -
Szirty
őstag
válasz plutokas #4484 üzenetére
Helló!
Ha nem használsz semmilyen impulzus kimenetet csak standard digitális tranzisztoros kimenetet és a kimenet elbírja a motor áramát (ami alapból nem valószínű,mert az ilyen kimenet 0.5A-es általában) akkor igen, de csak nagyon lassan.
5-10 fordulat percenként egy 1.8 fok/lépéses motorral.Nem szerencsés megoldás azért sem, mert a léptetőmotorok tekercs áramát PWM-es ármszabályozással illik meghajtani.
-
Szirty
őstag
válasz moseras #4492 üzenetére
Helló!
Sajnos én nem tudom mit jelent az hogy "lerakni egy ON/OFF-ot".
"Még valami, amit lehet, hogy nem mondtam: nekem egy képernyőn kellene 1 bit állapotától függően kiírni hogy fűtés vagy hűtés."
Persze. A LOGO-n összesen egy képernyő van
Szóval a special functions közül a "Message texts" neked nem jó?
Attól tartok nem tudok segíteni.
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Győr és környéke adok-veszek-beszélgetek
- eFootball
- Motoros topic
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Robotporszívók
- Honor Magic6 Pro - kör közepén számok
- PHP programozás
- Vicces képek
- Felpörög az asztali CPU-piac a következő pár hónapban
- Kínai, és egyéb olcsó órák topikja
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen