- Android szakmai topik
- iPhone topik
- Motorola Edge 50 Pro - több Moto-erő kéne bele
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Nothing Phone 2a - semmi nem drága
- Samsung Galaxy Z Fold4 - egyre megy, honnan nézed
- Google Pixel 6/7/8 topik
- Milyen okostelefont vegyek?
- Samsung Galaxy A54 - türelemjáték
- Redmi Note 13 Pro 5G - nem százas, kétszázas!
Hirdetés
-
Íme, a Huawei Pura 70 széria
ma A sorszámozás maradt, de az idén 12 éves P szériát ezentúl Pura-nak hívják.
-
Lenovo Essential Wireless Combo
lo Lehet-e egy billentyűzet karcsú, elegáns és különleges? A Lenovo bebizonyította, hogy igen, de bosszantó is :)
-
Már azelőtt szoftvert írnak a chipekhez, hogy elindulna a gyártás
it A Cadence szuperszámítógépe a chipek tervezését és a hozzájuk kapcsolódó szoftverek megírását igyekszik felgyorsítani.
Új hozzászólás Aktív témák
-
Szirty
őstag
Szevasz moseras!
"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 ?"
Igen, de ez nem változó típus kérdése, mert ezt már le kell programozni. De természetesen megoldható.
"- 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) ?"
Ó igen a klasszikus probléma, amikor a rendszerben több valós idejű óra is van és időtől függő műveleteket akarunk végezni.
Ebben a tekintetben siemens oldalról tudok kiindulni. A legjobb ilyenkor, ha kinevezzük valamelyik eszköz óráját "master"-nek és a többit ehhez szinkronizáljuk.
Ezzel elérhető, hogy minden óra egyszerre járjon, innentől bármelyik adatait felhasználhatjuk. Én mindig a PLC óráját használom mérvadónak, mert az kikapcsoláskor is ketyeg, a HMI-nél meg ez attól függ milyen fajta. (Bizonyos típusoknál nincs backup áramforrás ehhez.)
Az időre való kapcsolást többféleképpen is meg lehet oldani. Mindegyikhez kell programozni. A legegyszerűbb összehasonlító műveleteket használni, de néhány PLC-ben vannak idő kezelésével foglalkozó funkciók. Pl. S7-nél van time interrupt.
Sajnos ilyenkor foglalkozni kell a téli/nyári időszámítással és azzal is,hogy mi van akkor, ha a felhasználó állít az órán. Ezt meg lehetővé kell tenni, hiszen az óra késhet vagy siethet is."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 ?"
Igen. Programozással. Pont nem rég volt egy ilyen feladatom. HMI-ről állíthatóan kellett eldönteni hogy egy adott bemenetnek mi legyen a funkciója.
Erre is több programozási megoldás létezik. Az egyszerűbb, de kevésbé hatékony, az, hogy sok elágazással és összehasonlítással döntjük el mit is kell csinálnia egy kiemnetnek (az össze selképzelhető kombinációra kell egy ág). A hatékonyabb megoldás az indirekt címzés. Ez sokkal nehezebb és a megoldás nagyban függ az adott PLC képességeitől és ezen képességek ismeretétől a programozó szempontjából. -
attrax
aktív tag
-
attrax
aktív tag
Csao,én ezt INC utasítással oldottam Omronban. (mármint a ki-be kapcsolgatást) minden gombnyomásrqa lép egy bitet és hozzá rendeltem a címéhez 1 db kimenetet.Tehát 1.gomnxomás egy bit jobbra mégegy nyomás mégegy bit.Érted.Sztem legegyxűbb.
Nem vagyok nagy plc guru de a programot ami a garázskapumat viszi csatolhatom ha érdekel vkit.Unterschreiben
-
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.
-
Alx6501
csendes tag
Sziasztok!
PLC-hez keresek olyan köztes modult ami képes lenne az I/O portokat "megnyújtani" (wifi, rádiós modem, ...) segítségével. A porotk száma elég nagy, a távolság viszont néhány 10 méter. Előre is köszi a válaszokat.
Alex
-
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.
-
Szirty
őstag
Hali moseras!
"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 ?"A válasz az, hogy nem folyamatos szabályzót (continuous controller) kell használni, hanem léptető vezérlőt (stepping controller).
Az annyival több, hogy tartalmaz egy PWM vezérlőt is, aminek már nem "analóg" kimenete van, ahnem lét digitális.
Az egyik a beavatkozó jel növelésére, a másik a csökkentésére szologál. -
DP_Joci
tag
Szia,
Igazából a siemens-et ismergetem.
De használtam már TSX premium PLC-t, Advantys OTB és STB modulokkal, profibuszon és etherneten is, működött.
http://automatizalas.schneider-electric.hu/index.php?pid=3|tkid=25
A Twidóról itt találhatsz érdekességeket:
http://automatizalas.schneider-electric.hu/index.php?pid=9|tid=2
-
DP_Joci
tag
Sziasztok,
Van valakinek általános vagy bármilyen ismertetője szervókról (beállítások, paraméterek ),még nem használtam.
Esetleg hasonló doksi robotokról.
köszi
-
Szirty
őstag
Hali!
SyncPos opció frekiváltóhoz
MiniStep léptetőmotor vezérlőAz alábbi linken a hajtás doksik között is találsz (többet is)
Omron cuccok -
DP_Joci
tag
Sziasztok,
Lehet-e siemens (s7-300-400 ) plc-nél a DB sorszámát változóval, vagy indirekten, vagy akárhogy megadni?
PL: minden DB (datablock) 1. bájtját akarom kiolvasni.
-
Szirty
őstag
Hali DP_Joci!
"Lehet-e siemens (s7-300-400 ) plc-nél a DB sorszámát változóval, vagy indirekten, vagy akárhogy megadni? "
Lehet.
Így hirtelen két megoldás jut eszembe.
Az egyik akkor használható ha a DB elérése egy blokkon belül türténik és a DB számát kivülről, paraméterként adod át.
Ezt teszi lehetővé a BLOCK_DB paraméter típus. A szóbanforgó FC/FB interface részében input változóként megadsz egy BLOCK_DB típusó változót.
Pl.:OPN után a DB-t a T DBWxxx L DBWxxx utasításokkal eléred.
A másik módszer nyakatekertebb. Össze kell állítani egy ANY pointert úgy, hogy a nekünk megfelelő számú DB-re mutasson (ez akár integer is lehet). Utána egy pointeres címzéssel elérhető a kívánt DB.
Azért ezzel nem árt vigyázni. Ha rossz DB-re vagy anak nem létező címére hivatkozol, akkor jön a "STOP caused by programming error" -
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.
-
Szirty
őstag
Hali moseras!
"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 ?"Olyankor lép életbe a "B" terv
S7-nél úgy működik a dolog, hogy van egy ún HW config, ahol szépen meg kell adni minden eszközt, ami a buszon van. A profibus token ring rendszerű, vagyis a master minden konfigurált slave-nek egymás után minden busz ciklusban küld egy jelzést, amire a slave-nek válaszolnia kell. Ha valamelyik eszköz leválik a buszról (nem válaszol) azt a master azonnal észleli. Ilyenkor két eset lehetséges:
1. Létezik erre az esetre hibakezelő blokk. Ilyenkor azt végrehajtja. Abba lehet programot írni, hogy mit tegyen a rendszer ilyenkor. Le lehet benne kérdezni melyik eszköz szakadt le, le lehet programozni mit csináljon ilyenkor a gép. stb.
2. Nem létezik a hibakezelő blokk, így azt nem tudja meghívni, a CPU STOP állapotba kerül és a teljes berendezés azonnal megáll.Persze lehet üres hibakezelő blokkot is beletenni. Néha ez is megfelelő. Ilyenkor a smmit hívja meg hiba esetén. vagyis semmit nem tesz a hiba miatt, de nem is áll le (STOP).
Az a modul amelyik leszakadt, ilyenkor rendszerint azonnal kikapcsolja a kimeneteit.
A berendezést vezérlő program ilyenkor esetleg nem megfelelően is működhet, mert ha a leszakadt modulon bemenetek is voltak, akkor azok nulla állapotúnak látszanak és a program is ennek megfelelően fog működni. vagyis ha nem írunk hibakezelést az esetre (B tervet) akkor a program nem fogja "tudni" hogy bizonyos bemenetek nem azért nulla állapotúak mert az adott bemenet fizikailag is nulla állapotú, hanem mert kommunikációs hiba van. Sokszor ez nem mindegy"Illetve milyen változót kell a HMI-re kitenni, hogy a user is lásson ebből valamit ?"
S7-nél az említett hibakezelő blokk (OB) a megoldás erre, amibe írni kell egy programot ami ad megfelelő jelzést ami aztán meg is jeleníthető (akár szövegesen is).
Vagy meg kell hívni az SFC51-et (Reading a System Status List or Partial List with SFC 51 "RDSYSST"). EZzel le lehet kérdezni az összes buszon lévő összes eszköz jelenlétét:A hibakezelő blokkal kapcsolatban firkáltam már. Itt találod.
[ Szerkesztve ]
-
DP_Joci
tag
Szia,
Az első módszert az szoktam használni. Azzal ebben az esetben az a baj, hogy bemenő változó csak konkrét DB lehet.
CALL FC2
DB_in:=DB2A DB[változó] megadást nem fogadja el.
Olyat kerestem első körben, hogy DB[var].DBw0 vagy valami hasonló, de ez nem igazán megy ebben a formában.
Ilyeneket elfogad, hogy:
OPN DB[MW0]
vagy
OPN DB[#DB_temp]
ahol a
L #DB_IN ez egy bejövő word változó, ezt nem lehet közvetlen használni
T #DB_temp ez egy TEMP word változóEz nekem megfelel.
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. -
Szirty
őstag
Helló DP_Joci!
"Az ANY pointeres dolog az érdekes lehet.
Van esetleg egy példád erre, megpróbáltam kreálni egy ilyen pointert, de nem igazán tudok DB-re hivatkozni vele."Egyszer csináltam olyat, hogy különböző számú egyforma szerkezető DB-kből másoltam adatokat, ahol a DB számát a program kalkulálta ki. Itt ANY pointertípusban kellett összeállítani a címet, mert a másolás BLKMOV hívással történt, aminek ANY kell.
Persze hogy nem találom.Ha megnézed az ANY felépítését:
Akkor hamar kiderül hogyan kell összesakkozni egy címet.
Csak arra kell nagyon vigyázni nehogy mellécímezzen az ember. Az indirekt címzés már csak ilyen. Jó nagyokat lehet vele szívni és alaposan tesztelni kell.A helpben van példa az "Example of the Data Type ANY" címszó alatt.
FUNCTION FC1: INT
TITLE = Transfer and handling of ANY pointers
// Task :
// This block should copy a source area to a target area using
// SFC20 (BLKMOV) where the source is put together from
// a number of individual parameters to form an Any pointer
// and the target is already specified as an Any pointer.
AUTHOR: SIEMENS
FAMILY: TOOLS
NAME: ANY_PTR
VERSION: 00.01
VAR_INPUT
SRC_DB : INT;
SRC_Byte : INT;
SRC_Type : BOOL;
SRC_Len : INT;
DEST_Any : ANY;
END_VAR
VAR_TEMP
T_AR1 : DWORD;
T_AR2 : DWORD;
T_SRC_Any : ANY;
T_DEST_Any : ANY;
Count : INT;
SFC_Ret_Val: INT;
END_VAR
BEGIN
NETWORK
TITLE = Save the contents of the address registers AR1 and AR2
TAR1 T_AR1;
TAR2 T_AR2;
NETWORK
TITLE = Put together and check source area
LAR1 P#T_SRC_Any; //Load start address of the source Any
//pointer into AR1
L B#16#10; //Enter syntax ID in the Any pointer
T LB [AR1, P#0.0];
L B#16#2; //Load area type BYTE
AN SRC_Type; //If BYTE was chosen, then
//jump to entry
JC Tran;
L B#16#4; //Otherwise load area type WORD
Tran: T LB [AR1, P#1.0]; //and store in the Any pointer
L SRC_Len; //Enter number of bytes/words to be
//transferred
T LW [AR1, P#2.0];
L SRC_DB; //Enter source DB number
T LW [AR1, P#4.0];
L 0; //If source DB number = 0 then
//transfer from bit memory area,
==I ; //otherwise from a DB
JC Mem;
L P#DBX0.0; //Load area pointer in data block
JU Offs;
Mem: L P#M0.0; //Load area pointer in bit memory area
Offs: L SRC_Byte; //Load copy of the number of the first bytes to be copied SLD 3; //Convert to pointer format
+D ; //Add to area pointer
T LD [AR1, P#6.0]; //Enter result in ANY pointer
NETWORK
TITLE = Enter and check the target Any pointer
L P#DEST_Any; //Place address of Any pointer in AR1
LAR1 ;
L B#16#2; //If the area type of the transferred
//Any pointer
L B [AR1, P#1.0]; //= byte or = word, the jump
//follows
==I ;
O( ;
L B#16#4;
==I ;
) ;
JC Copy;
L W#16#80FF; //Otherwise load error code
T RET_VAL; //Transfer to the caller
JU End; //Finish block processing
Copy: LAR2 P#T_DEST_Any; //Load address of temp. Any pointer
L 5; //5 words must be copied
Back: T Count;
L W [AR1, P#0.0]; //Move the Any pointer
//as an input variable to
T LW[AR2, P#0.0]; //the local data
+AR1 P#2.0;
+AR2 P#2.0;
L Count;
LOOP Back;
NETWORK
TITLE = Call SFC20 (BLKMOV)
CALL SFC20
(
SRCBLK := T_SRC_Any,
RET_VAL := SFC_Ret_Val,
DSTBLK := T_DEST_Any
);
NETWORK
TITLE = Pass on return value of SFC
L SFC_Ret_Val;
T RET_VAL;
NETWORK
TITLE = Restore the contents of the address registers AR1 and AR2
End: LAR1 T_AR1;
LAR2 T_AR2;
END_FUNCTION
DATA_BLOCK DB10
TITLE = Copy_In
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: COPY_IN
VERSION: 00.01
STRUCT
test: ARRAY[0..29] of BYTE;
END_STRUCT;
BEGIN
END_DATA_BLOCK
DATA_BLOCK DB11
TITLE = Copy_Out
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: COPY_OUT
VERSION: 00.01
STRUCT
test: ARRAY[0..29] of BYTE;
END_STRUCT;
BEGIN
END_DATA_BLOCK
ORGANIZATION_BLOCK OB1
TITLE = Cycle
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: OB_CYC
VERSION: 00.01
VAR_TEMP
OB1_System: array [1..20] of byte;
Src_Db : INT;
Src_Byte : INT;
Src_Type : BOOL;
Src_Len : INT;
END_VAR
BEGIN
NETWORK
TITLE = First call example for FC1
// This call for FC1 copies 5 words from memory byte 33
// to DB10 from data byte 3. This means the memory
// words 33, 35, 37, 39, and 41 are copied to the data
// words 3, 5, 7, 9, and 11 of DB10.
L 0;
T Src_Db;
L 33;
T Src_Byte;
Set ;
= Src_Type;
L 5;
T Src_Len;
CALL FC1
(
SRC_DB := Src_Db,
SRC_Byte := Src_Byte,
SRC_Type := Src_Type,
SRC_Len := Src_Len,
DEST_Any := P# DB10.DBX 3.0 BYTE 20,
RET_VAL := MW100
);
NETWORK
TITLE = Second call example for FC1
// This call for FC1 copies 7 bytes from DB11 from
// data byte 13 to the process output image from
// QB99. This means the data bytes 13 to 19
// of DB11 are copied to the output bytes 99 - 105.
L 11;
T Src_Db;
L 13;
T Src_Byte;
CLR ;
= Src_Type;
L 7;
T Src_Len;
CALL FC1
(
SRC_DB := Src_Db,
SRC_Byte := Src_Byte,
SRC_Type := Src_Type,
SRC_Len := Src_Len,
DEST_Any := P# Q 99.0 WORD 5,
RET_VAL := MW100
);
END_ORGANIZATION_BLOCK -
Szirty
őstag
-
DP_Joci
tag
L P##DB_pointer_in_any
LAR1
L B#16#10
T LB [AR1,P#0.0]
L B#16#19
T LB [AR1,P#1.0]
L W#16#1
T LW [AR1,P#2.0]
L W#16#0
T LW [AR1,P#4.0]
L #DB_num_in
T LD [AR1,P#6.0]
//;
L P##DB_pointer_out_any
LAR1
L B#16#10
T LB [AR1,P#0.0]
L B#16#19
T LB [AR1,P#1.0]
L W#16#1
T LW [AR1,P#2.0]
L W#16#0
T LW [AR1,P#4.0]
L #DB_num_out
T LD [AR1,P#6.0]
//;
CALL SFC 84
REQ :=M255.7
SRCBLK :=#DB_pointer_in_any
RET_VAL:=MW8
BUSY :=M3.1
DSTBLK :=#DB_pointer_out_anyIlyen paraméter tipusú ANY-hez volt már szerencséd?
Ezzel hibát nem kapok, de eredményt sem, lehet hogy az SCF84-et értem félre.[ Szerkesztve ]
-
Szirty
őstag
Hali DP_Joci!
L P##DB_pointer_in_any
LAR1Betölti az akku1-be a #DB_pointer_in_any változó címét, majd az akku1-et az 1-es address regiszterbe tolja.
L B#16#10
T LB [AR1,P#0.0]10 hexa értéket tölt akku1-be, majd azt elrakja az AR1 address regiszter által címzett címre 0 byte és 0 bit eltolással (P#0.0 az eltolás).
Lényegében tehát ezzel a #DB_pointer_in_any változó nulladik byte-jába 10 hexa értéket rak.
Ha most megnézed az ANY felépítését:
Akkor látható, hogy az a byte mindig 10h S7 esetén. Nem véletlen tett ide 10h-tL B#16#19
T LB [AR1,P#1.0]Az ANY 1-es byte-jába 19h-t tölt.
Ez a byte mondja meg az adattípust. Ez egy nagyon érdekes sor, mert 19h adattípus nem létezik amennyire tudomL W#16#1
T LW [AR1,P#2.0]A 2-es byte az ANY típusnál az métlési faktor. Ennek akkor van jelentősége, amikor nem egy adatterületre kell hivatkozni (pl. blokk másolás). Ez mindig az adattípusban megadott típus darabszámára vonatkozik. vagyis ha ott Byte típus van meghatározva, akkor itt 10 10 byte-ot jelent, ha ott word van meghatározva, akkor a 10-es érték az ismétlési faktorban már 20 byte-ot jelent, stb.
L W#16#0
T LW [AR1,P#4.0]Itt kell megadni a DB számát, ami nem lehet nulla (mivel 0-ás DB nincs).
Ugyanakkor amennyiben az adatterület definíciója nem DB-t határoz meg (ANY byte6) akkor nulla kell hogy legyen. (bár ilyenkor ezt nyilván nem veszi figyelembe a rendszer).L #DB_num_in
T LD [AR1,P#6.0]A 6. byte elvileg az adatterület típusát adja meg. Az, hogy ide egy #DB_num_in nevű változót tölt arra utal, hogy van itt egy kis csúszás. Szerintem #DB_num_in-t a 4-es byte-ba kéne tölteni.
"Ezzel hibát nem kapok, de eredményt sem, lehet hogy az SCF84-et értem félre."
Attól függ mit szeretnél...
-
DP_Joci
tag
Szia,
Igazából nem létszükséglet számomra jelenleg a pointerek használata, csak mint érdekesség foglalkozom velük.
Vagyis feleslegesen nem akarom rabolni az idődet ezzel, csak ha érdekel és van rá kapacitásod akkor foglalkozz vele.Amiről te beszélsz az a ANY Format for Data Types ez ok.
De van egy olyan is hogy:
ANY Format for Parameter Types
For parameter types STEP 7 stores the data type and the address of the parameters. The repetition factor is always 1. Bytes 4, 5, and 7 are always 0. Bytes 8 and 9 indicate the number of the timer, counter, or block.
Ide nem tudtam kimásolni a helpből az ábrát..
The following table shows the coding of the data types for the parameter type ANY for parameter types.
Hexadecimal Code Data Type Description
b#16#17 BLOCK_FB FB number
b#16#18 BLOCK_FC FC number
b#16#19 BLOCK_DB DB number
b#16#1A BLOCK_SDB SDB number
b#16#1C COUNTER Counter number
b#16#1D TIMER Timer numberValójában én ezt raktam össze, a b#16#19 mondja meg hogy ez egy DB , a 8 as 9-es byte pedig hogy melyik DB.
L #DB_num_in : egy integer változó lenne ami megmondja, hogy melyik DB-t akarom.
Igazá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. -
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
-
thomass
csendes tag
Üdvözlök Mindenkit!
Egy nagyon kezdő kérdést bátorkédnék itt feltenni,bár úgylátom,hogy itt inkább komoly témákban folyik eszmecsere.
PC-PLC közötti RS232 soros adatátviteli beállításokkal kapcsolatban szeretnék információt szerezni.
A Moeller oldalain találtam az alábbi segédletet:
www.moeller.hu/binary/pc-plc_kapcsolat.pdf
A kérdésem az lenne ,hogy az OMRON PLC-k esetében is használhatók-e az oldalon leírtak?
A válaszokat előre is köszönöm! -
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 ]
-
Szirty
őstag
Helló thomass!
"A kérdésem az lenne ,hogy az OMRON PLC-k esetében is használhatók-e az oldalon leírtak?"
Nem, mert az általad linkelt leírásban a Moellerhez való szoftver részleteiről esik szó (mikor hova kell kattintani). Az Omron szoftver ettől eltér, ez a leírás nem követhető Omronnal.
-
Szirty
őstag
Hali moseras!
"A WATCHDOG-ot pedig a kommunikáció nullázza. A WAGO-nál nem találok ilyent."
belenéztem a HW configba mit lehet WAGO-nál állítani.
Van watchdog, 10ms időalappal. Beállítható hogy mit csináljon ha a belső busz (k-bus) megszakad vagy hibás.
Nem tudom kipróbálni mi történik WAGO kimenettel ha leáll a profibusz, mert csak beépítve van egyelőre ilyenünk és én még nem foglalkoztam vele, pár új gépben van beépítve..."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."
Az általam ismert HMI-knél ez máshogy működik: Alapvetően minden változó a PLC-ben van, a HMI-ben csak hivatkozik rájuk az ember. Ha egy értéket kell kijelezni vagy állapotot megjeleníteni változó alapján, a HMI ciklikusan újra és újra lekérdezi a PLC-ből az érintett változó állapotát. Kivétel ez alól siemens OP-knál és egyéb HMI-knél a receptek kezelése. A recept adatrekordjait a HMI tárolja. Külön funkcióhívásokkal lehet ezeket az adatokat a PLC és a HMI között mozgatni.
-
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.
-
DP_Joci
tag
Sziasztok,
Van valakinek s7 canopener , s7 know how manager vagy hasonló programja (persze nem demo).
Ha igen és van rá lehetőség akkor szeretném elkérni (pl.emailben).
Köszi -
Pato7
csendes tag
Sziasztok!
Tudna nekem valaki segíteni? Mitsubishi PLC szeretnék programozni, de eddig csak maga a PLC áll a rendelkezésemre!
Se kábelem, se szoftverem nincsen!
Előre is nagyon köszi -
m.gabor
csendes tag
Sziasztok!
Segitséget szeretnék kérni. Adott egy Omron CPM1A PLC és ezzel kellene megoldanom egy gépnek a működését. 3 pneumatikus karnak kellene megfelelő sorrendben és időzitéssel mozognia. Ehhez szükségem lenne egy kábelre, amivel fel tudom programozni PCről, hogy vezérelje a szelepeket.
Jól gondolom, hogy ez megoldható vele? Analóg áramköröket már építettem, de a digitálishoz tök hülye vagyok.Előre is köszi
M. Gabor
-
m.gabor
csendes tag
Igen, valami CMP1-CIF01 kábelt olvasgattam hozzá (gőzöm sincs, mit jelent az a CIF01). Találtam is egy bekötést, de nem működik. Az sem lehetetlen, hogy én vagyok béna, igy annak is örülnék, ha valaki meg tudná mutatni 10percben, hogy hogy is nézne ki egy ilyen csatlakoztatás, és egy adott bemenet hatására egy adott kimenet változtatgatását hogyan lehet megoldani.
Előre is köszönöm a segitséget,M. Gabor
-
Szirty
őstag
-
Szirty
őstag
Helló m.gabor!
"Megvásárolni meg nem lenne célszerű egy egyszeri használathoz ezt a kütyüt kb35000 ért."
Nos ez igaz. Sajna nincs ilyen rajzom és nem is tudok róla hogy közkézen forogna ilyesmi. Ugyanakkor elég valószínű, hogy egy alkalomra megépíteni épúgy nem célszerű...
Talán a kölcsönkérés ami még járható lehet.
[ Szerkesztve ]
-
Pato7
csendes tag
Na, akkor felteszem újra kérdésem!
Tudna nekem valaki segíteni? Mitsubishi PLC szeretnék programozni, de eddig csak maga a PLC áll a rendelkezésemre!
Se kábelem, se szoftverem nincsen!
Előre is nagyon köszi -
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.
Új hozzászólás Aktív témák
- Be quiet! Pure Wings 2 140mm PWM High-Speed
- Ejha! HP EliteBook 840 G6 Fémházas Laptop 14" -70% i5-8365U 4Mag 16Gb 1TB SSD FHD IPS + Táska!
- ELADÓ intel i5-9400f (igény esetén hűtővel)
- GeForce EVGA GTX 1660 SUPER 6GB
- Részletfizetés. Bontatlan. noblechairs EPIC székek azonnal . 24 / 36 hónap garancia . +36301300000