Fórum témák

» Több friss téma
Fórum » PLC kérdések
 
Témaindító: Thomas10100, idő: Nov 12, 2005
Témakörök:
Lapozás: OK   31 / 129
(#) watt válasza Strucc hozzászólására (») Jún 19, 2011 /
 
Szia!
Nem ismerem a nyelvet, amin a példákat írod, de úgy vélem a bájtok sorrendjét fordítottad meg, majd egy lebegópontos típusú mutatóba tetted a tömb kezdő címét. Ezt a programot milyen rendszer alatt írod? Mi volt ami az adatokat átadta? Én azt az oldalt építem, ami átadja az adatokat...
(#) Strucc válasza watt hozzászólására (») Jún 19, 2011 /
 
Igen, ez többnyire utópia. Egyébként éhenhalnánk.

Btw.: Talán a legjobb megközelítés egy fejlesztendő eszköz kommunikációs felületének meghatározásához annak megvizsgálása, hogy az eszközt milyen környezetben, milyen berendezésekkel együtt fogják használni.

Tehát, például ha a szomszédos eszközök Modbus-on működnek - célszerű Modbust implementálni. És - ebben az esetben nyugodtan át lehet testálni a megjelenítés, adatgyűjtés stb. feladatokat a megfelelő PLC-re, OPC szerverre, stb. Ha Modbus felületet adsz, semmi mást nem definiálsz, csak register-eket, illetve coil-okat. Ha Canopen-t akkor DO-kat... De lehet IP felület is... na itt már sok variáció van ... Pl. Modbus IP felett...

A lényeg az az, hogy az eszköz nem foglalkozik a megjelenítés, adatkonverzió problémájával, csak "adatpontokat" definiál (a legtöbb automatizálásban használatos protokoll így működik). Esetleg megpróbálja kényelmesen kialakítani. Ezért említettem korábban pl. az INT ábrázolást: Például, az említett frekvenciaváltó leírása azt mondja, hogy az XXX regiszter az aktuális kimenő feszültséget tartalmazza, 1 tizedes pontossággal. Ezek után az már a program, ill. megjelenítés feladata, hogy ezzel valamit kezdjen.
(#) watt válasza icserny hozzászólására (») Jún 19, 2011 /
 
Kicsit off, de engem az zavart meg, hogy több helyen eltérő értéktartomány olvashattam a Float típus esetében. Aztán más helyen, ahol az ábrázolást részletezték bit szinten, felcserélték a leírásban az Előjel Mantissza Karakterisztika sorrendjét pont ilyen módon.
Ezek a dolgok elég egyszerűek, még is nagyon kevés a pontos infó és ezért az ember csak szenved, amíg meg nem találja a megfelelő forrást.

Egy OPC szerver leírásában az van, hogy csak rá kell kötni a hálózatra, és már is elérhetőek az adatok. Ebből azt következtetné az ember, hogy van egy szabvány, ami leírja a lebegőpontos számok átadásának módját. Remélem kitisztul a kép, mert most csak a káoszt látom az ügyben.
(#) Strucc válasza watt hozzászólására (») Jún 19, 2011 /
 
Idézet:
„Nem ismerem a nyelvet, amin a példákat írod, de úgy vélem a bájtok sorrendjét fordítottad meg, majd egy lebegópontos típusú mutatóba tetted a tömb kezdő címét. Ezt a programot milyen rendszer alatt írod? Mi volt ami az adatokat átadta? Én azt az oldalt építem, ami átadja az adatokat...”


Ó, ezt csak azért írtam, mert említetted, hogy fura eredményeket kapsz, ha megpróbálod a REAL 4-bájtos adatát felépíteni. Nos, néha ami eltér csak a bájtok sorrendje. Mint a Little / Big endian. Ez is örökké bekavar. Hát van ilyen a lebegőpontosnál is, érdemes kicsit molyolni vele. (először amikor nem működött, gondoltam írok egy konverziós eljárást, aztán rájöttem: csak a bájtok vannak fordítva) (btw, nagyon más gond nem lehet a VB-6-tal sem, kicsit csodálkoznék, ha teljesen egyedi módon ábrázolná a lebegőpontos számokat... Vagy estleg LREAL-t használ? Nem tudom.

A nyelv egyébként CoDeSys - azaz IEC 61131-3 - ST, a probléma meg egy NicoBus átjáróról érkező adatok (pl. hőmérséklet) kezelése volt. Az adatok soros vonalon érkeznek... Hát véletlenül pont fordítva. Az élet már csak ilyen.
(#) watt válasza Strucc hozzászólására (») Jún 19, 2011 /
 
Tehát ha én azt mondom, hogy IEEE 754/1985 formátumban ezen a regisztercímen ilyen sorrendben található a 4 leíró bájt, akkor legyen a megjeleítést programozó gondja, hogy az kiolvassa és úgy kezelje, ahogy én leírtam? Végül is logikus, nem is értem miért akartam elvenni a munkáját valakinek!
(#) Strucc válasza watt hozzászólására (») Jún 19, 2011 /
 
Ha mindenképp lebegőpontosan akarod ábrázolni, akkor igen. Ennek csak akkor van értelme, ha a leírt értékben a tizedespont helye is erőteljesen változik.

Egyébként, az IEEE 754 ábrázolás kapcsán, nekem ez az oldal segített sokat:
http://babbage.cs.qc.edu/IEEE-754/Decimal.html

Addig próbálgattam, míg jó nem lett.
(#) watt válasza Strucc hozzászólására (») Jún 19, 2011 /
 
Az eltérést valószínű a hibás információk miatt gondoltam, amik az értéktartományokra vonatkoztak.

Én PIC C18-ban ütköztem abba, hogy a lebegőpontos számokat nem lehet shiftelni, ami a soros porton való elküldéshez szükséges lenne. Ezért egy uniont hoztam létre így:
  1. //Füstgáz polinom unionok
  2.         union{
  3.          float x;
  4.         struct {
  5.             unsigned b0:8;
  6.             unsigned b1:8;
  7.             unsigned b2:8;
  8.             unsigned b3:8;
  9.         };
  10.         }uFust_Pol_4;
  11.         #define Fust_Pol_4 uFust_Pol_4.x

Ezután már a
  1. uFust_Pol_4.b0
formában egyenként tudtam kezelni a lebegőpontos számot leíró bájtokat.
Ezt a módszert VB6 alatt még nem sikerült megoldanom, de ez más kérdés...
Végül is a MODBUS kommunikáció a PLC- témába vágott, de azt hiszem kezd kilógni a dolog innen, ezért nem is szeretném nagyon tovább terhelni a türelmeteket.
Esetleg egy javaslat, hogy van-e olyan topic, ahová ez a téma beférne? Mert ez nem C (PIC program), nem VB6(az eszköz kliensét ebben írnám), nem MODBUS, nem PLC, nem egy eszköz. Ez mindennek a keveréke...
(#) Strucc válasza watt hozzászólására (») Jún 19, 2011 /
 
Igen, ahogy mondod, ez így szokásos. Tessékj egy példa egy dokumentációból - pontosabban az az alapján készült API-ból: (ez egy ENUM, ami az adattípusokat írja le, és a kommentekben szerepel azok pontos leírása)

  1. TYPE MGW_RX_DATA_TYPE :
  2.  
  3. (
  4.         MGW_RDT_NO_DATA                 := 16#00,       (* No data *)
  5.  
  6.         MGW_RDT_PERCENT                 := 16#01,       (* 1 BYTE: 0 = 0% ; 255 = 100% *)
  7.         MGW_RDT_INT16_1POINT    := 16#03,       (* 2 bytes, signed with one decimal (0x00FF => 25.5; 0xFFFF => -0.1 *)
  8.         MGW_RDT_FLOAT                   := 16#04,       (* 4 bytes, 32-bit floating-point number (IEEE 754) *)
  9.  
  10.         MGW_RDT_UINT16                  := 16#0D,       (* 2 bytes, integer number *)
  11.         MGW_RDT_UINT16_1POINT   := 16#21,       (* 2 bytes, integer unsigned, value x10 (1 digit after point) *)
  12.         MGW_RDT_UINT16_2POINT   := 16#22,       (* 2 bytes, INT. unsigned, value x100 (2 digits after point) *)
  13.         MGW_RDT_UINT16_3POINT   := 16#23,       (* 2 bytes, INT. unsigned, value x1000 (3 digits after point) *)
  14.  
  15.         MGW_RDT_UINT32                  := 16#0E,       (* 4 bytes, integer number unsigned *)
  16.         MGW_RDT_UINT32_1POINT   := 16#0F,       (* 4 bytes, integer unsigned, value x10 (1 digit after point) *)
  17.         MGW_RDT_UINT32_2POINT   := 16#10,       (* 4 bytes, INT. unsigned, value x100 (2 digits after point) *)
  18.         MGW_RDT_UINT32_3POINT   := 16#11,       (* 4 bytes, INT. unsigned, value x1000 (3 digits after point) *)
  19.  
  20.         MGW_RDT_RC_DATA                 := 16#17,       (* 4 bytes (only with room controller): two values MGW_RDT_INT16_1POINT, first temperature, THEN adjustment wheel *)
  21.  
  22.         MGW_RDT_TIME                    := 16#1E,       (* 4 bytes: hour/minute/second/0; example: 23h 59m 59S:23 59 59 00 = Hex(17 3B 3B 00) *)
  23.         MGW_RDT_DATE                    := 16#1F        (* 4 bytes: day / weekday&month / century / year; weekday is placed in the high nibble OF 2nd BYTE, 0=monday, ... 6=sunday; example: sunday, december31ST 2005: 31 108 20 05 = Hex(1F 6C 14 05) *)
  24. );
[code=c]
(#) Strucc válasza watt hozzászólására (») Jún 19, 2011 /
 
Idézet:
„Ez mindennek a keveréke...”


... Csakúgy, mint a legtöbb valós probléma. Én nem érzem innen annyira kilógónak a témát, de nem vagyok hivatott ebben nyilatkozni.
(#) watt válasza Strucc hozzászólására (») Jún 19, 2011 /
 
Kezd tisztulni a kép, nagyon sokat segítettél, köszönöm!

A MODBUS protokolnál nekem elsőre nagyon furcsa volt, hogy a Coils formátumot bitenként kezelik címzik és nincs igazi bájt formátum, csak word. Bennem valószínű azért okozott zavart a megoldás, mert úgy gondolkodtam, mint ha egy memória valós címeit kéne elérni MODBUS-on keresztül, holott nem valós memóriákat címeznek a Funkciók, hanem az eszközökben virtuálisan létrehozott regisztereket, biteket. Ezért is volt nehéz megérteni, hogy a SCADA oldalról hogyan is lesz értelmezve egy átküldött lebegőpontos szám, ami a memóriában tárolódik a PIC-ben adott formátumban. Valójában nem IEEE formátumot küldök át, hanem négy bájtot, amit majd úgy kell értelmezni, ha úgy akarom. Az is külön rész, hogy az értelmezést is én határozhatom meg az eszközöm adatlapjában, amit utána a rendszer programozója lekezel.

Igazából egyszerűbb lenne a felhasználónak, ha még is lenne egy kialakult szabvány minden számtípushoz, mert akkor nem minden esetben lenne szükség egy új eszköz becsatlakoztatásához programozóra.
(#) jym válasza watt hozzászólására (») Jún 19, 2011 /
 
Üdv!

Idézet:

Tehát ha én azt mondom, hogy IEEE 754/1985 formátumban ezen a regisztercímen ilyen sorrendben található a 4 leíró bájt, akkor legyen a megjeleítést programozó gondja, hogy az kiolvassa és úgy kezelje, ahogy én leírtam?


Szerintem is, ez így rendben van.

Például egy folyadékhűtő modbus panel doksija ezt mondja:

Idézet:

Coding of analogue values: Standard 32-bit IEEE format (2 registers).


Egy példa a változólistájából:

Idézet:

Register 3 and Register 4: Outdoor temperature. Format: Float. Type: Read-only.


Neked is ennyi dolgod van az adatszolgáltató cuccal.

Imi.
(#) Strucc válasza watt hozzászólására (») Jún 19, 2011 /
 
Van ilyen szabvány, de az az OSI hálózati szintek között feljebb van / lehet definiálva. Pl. az OPC kliens és szerver között már nyilván vannak egyéb adattípusok.

A Modbus valamelyik alsó szinteken tanyászik, az alkalmazás meg a felső szinteken... A modbus nem foglalkozik az ábrázolással, csak nyers adatról beszél.

Mindenesetre megkönnyíted a programozó dolgát, ha standard számábrázolást használsz, a regiszterek sorrendjében, és azon belül a bájtok sorrendjében. Például

RegXXX1.0 - Float byte1
RegXXX1.8 - Float byte2
RegXXX2.0 - Float byte3
RegXXX2.8 - Float byte4

Ez ugye egyszerű, mert a beolvasott bájtok sorozatára simán rá lehet mutatni egy float (real) pointerrel. De kics*szel a programozóval, hogyha:

RegXXX1.0 - Float byte2
RegXXX1.8 - Float byte1
RegXXX2.0 - Float byte4
RegXXX2.8 - Float byte3

Na persze ez sem annyira vészes azért... :p

Ha meg a szabványos megjelenítő eszközökre hajazol valóban javasolnám az INT alapú ábrázolást! Én leginkább ezekkel találkoztam eddig.
(#) watt válasza jym hozzászólására (») Jún 19, 2011 /
 
Igen, ez így jó lesz, köszönöm!
(#) watt válasza Strucc hozzászólására (») Jún 19, 2011 /
 
A sorrendben én is gondolkodtam, miután ez nem egy szokásos soros kommunikáció, ahol a Hi megy elöl, hanem egyedi és a MODBUS felett álló protokol, ezért az átadás is lehet felhasználóbarátabb.

Az INT alapú a tizedespont helyét meghatározó formátum? Végül is ez se rossz, bár kicsit fura és konvertálni kell az IEEE-ről az elküldés előtt. Ez akár komolyabb erőforrást is igényelhet egy 8bites eszköztől ha belegondolsz.
(#) Strucc válasza watt hozzászólására (») Jún 19, 2011 /
 
Nem feltétlenül. Ráadásul a mai vezérlők CPU idejét firtatni a leggyakrabban szőrszálhasogatás. Amellett, hogy mondjuk TCP/IP kommunikációval, stringek kezelésével, fájlkezeléssel, néha még megjelenítéssel is foglalkoznak, egy int-to-real konverzió talán elhanyagolható. Ráadásul nem is mindig kell.

Például egy konkrét ismert gyártó által mellékelt folyamatszabályzó funkcióblokkok... mind a mai napig nem használnak REAL-t. Még a PID szabályzó sem. A jól bevált 12 bites jeleket veszik, és kezelik a mellékelt diagnosztikai biteket.

Tehát... az eszközöd kialakításánál esetleg az is érdemes figyelembe venni, hogy az adott mérési eredményt: hőmérséklet, nyomás, feszültség, stb... hogyan szokták ábrázolni... Itt bizony gyakran használatos a 12+4 bit...

(Ó, értem... utólag olvastam... tehát, hogy a PIC erőforrásainak okozhat esetleg problémát... Miért? Hogyan keletkezik az érték?)
(#) watt válasza Strucc hozzászólására (») Jún 19, 2011 /
 
Az érték eleve Float típusként él a PIC-ben. Esetemben egy polinom együtthatói, amit írni olvasni kell tudni a kalibrációhoz.
Lehet, hogy a PIC esetében is eltúloztam, de ha belegondolsz elég sok lépésből lehet egy lebegőpontos alakból előállítani a számsort és kiszámolni, hogy hová kerüljön a tizedespont. A PC-nek abszolut nem gond a lebegőpontos alakot konvertálni bármivé.
(#) Bozicze hozzászólása Jún 20, 2011 /
 
Sziasztok!

Néhány nap múlva kimegyek külföldre nyári munkára. A főnököm tudja, hogy a suliban tanultam programozást (C, C++) ezért már előre szólt, hogy meg fog bízni azzal, hogy írjak neki egy programot (amúgy nem ez lesz a munkám, ez csak amolyan plusz dolog). Ma tudtam meg, hogy mit kell csinálnom:
Van egy gépe, amely egy szalagot futtat.
Írni kéne egy olyan programot, amely óránként beindítja a gépet és 5 percig futtatja a szalagot. Annyit tudok még, hogy ez a gép egy PLC.
Namármost a probléma az, hogy én csak C-ben illetve C++ -ban tudok programozni. PLC-ről még semmit sem tudok. Maga a program így elsőre nem hangzik túl nehéznek, viszont fogalmam sincs hogy hogyan álljak neki...
Egyáltalán lehet PLC-t C-ben vagy C++ -ban programozni? Esetleg tudnátok adni egy irányt, hogy merre induljak el? Vagy esélytelen a dolog és inkább hagyjam?

Minden ötletet, tanácsot, választ köszönök előre is!
(#) Steven84278 hozzászólása Jún 21, 2011 /
 
Hello, létezik olyan PLC szimulátor amelyhez nem szükséges hogy rendelkezzem PLC hardverrel, ha igen melyik az? Köszi
(#) moderboy válasza Bozicze hozzászólására (») Jún 21, 2011 /
 
Azt, hogy C-ben lehet-e programozni nem tudom, de egy ilyen feladathoz kicsit túllövés lenne C-ben küzdeni vele. Mi Festo PLCkel foglalkoztunk a suliban, egyszerű létraprogramokat lehet csinálni hozzá, ha jól érted a programozást, akkor egy kis gondolkodással menni fog a dolog maximum 1 nap alatt. Jelzőlámpás kereszteződést olyan 1 óra alatt írtunk, amikor benne voltunk a dologban, ne ijedj meg tőle, a google meg a dokumentáció sokat tud segíteni
(#) Steven84278 válasza Bozicze hozzászólására (») Jún 21, 2011 /
 
Hello! Én is FESTO PLC-n tanultam programozni. Az alapfeladatok elég egyszerűen, hamar elsajátíthatók.

Porgramot írhatsz:

- Utasításlistás programozással,
- Funkcióblokkal,
- Áramúttervel

A programod lehet: lépésprogram, logikai, vagy mixelt

Egyébként nem ártana tudni a teljes problémát! (allokációs listához a szenzorok/aktorok típusait, teljes leírás) A FESTO-ék weboldalán nézz szét. Múltkoriban ott láttam mintafeladatokat.
(#) pontazok hozzászólása Jún 24, 2011 /
 
Szijasztok
Nemrég találtam egy SIEMENS SIMATIC S5 101U nevezetű PLC-t. Azonban a programozója nincs meg:S
Ebben szeretnék segítséget kérni valaki nem tud-e egy kapcsolást amivel kilehetni váltani a hiányzó programozót!

Itt egy link a PLC-ről
http://www.wallerath.com/assets/Doku%20S5-101x/S5-101U_Operating-In..._e.pdf

Nekem az első képen lévő baloldali PLC van meg.
(#) kukac_24 válasza pontazok hozzászólására (») Jún 24, 2011 /
 
Van itt a hobbielektronikán is S5 fórum, ahova már tettem fel én is működő átalakító kapcsolást.
(#) pontazok hozzászólása Jún 24, 2011 /
 
Köszi
Jobban szétnézek!
(#) laffesz hozzászólása Jún 26, 2011 /
 
Sziasztok.
PLC-vel kapcsolatban lenne kérdésem. Most tanulgatom a használatát az egyetemen és úgy döntöttem ebből írok szakdolgozatot. Még csak éppen hogy elkezdtem kóstolgatni, ezért bocsánat ha túl triviálisat kérdezek.

Szóval amit kitaláltam az lényegében az, hogy egy flash-ben írt kijelzőn keresztül vezéreljem a plc-t. (OMRON típusú)

A kijelző már elkészült, és a plc vezérlés egyes részeit is megírtam, viszont a kettőt összekötni még nem tudtam.

Valaki tudna ajánlani valamilyen megoldást erre a problémára (lehetőleg úgy, hogy úgy is működhessen, hogy szimulálom a plc-t a nyárra nem tudok sajnos bemenni a laborba).

Olvastam, hogy OPC-vel lehetséges lenne, esetleg az omron termékcsomagjában a dde menedzserrel is, viszont ezeket még egyáltalán nem ismerem, és nem találtam hozzájuk használható példaprogramot, illetve ingyenes opc szervert.

Megköszönném ha el tudnátok indítani a helyes irányba.
(#) kameleon2 válasza laffesz hozzászólására (») Jún 27, 2011 /
 
Szia!
A Qnx és az Adobe kifejlesztett egy közös, flashen alapuló rendszert, kifejezetten autóelektronikák vezérléséhez: Bővebben: Link . Amennyiben van konkrét megoldásod akár ez alapján - akár más forrásból, a végeredmény engem is érdekel. Én is találtam egyfajta megoldási lehetőséget, de műszaki falakba ütköztem. A Wayteq PNA képes flasht futtatni natívan. Írtam is rá egy kis gombvezérlést, de a beágyazott flash mindig felülbírálta a gombkezelést a sajátjával. Nyilván hackkel is mehetne, de több időm nem volt rá. WinCE6 fut rajta - nálam éppen egy totalcommanderből klónból érhető el. Maga a PNA a memóriakártya és az USB felől biztosan elérhető valahogyan és nem túl drága. De használhatsz IPC-t, PPC-t, TPC-t - amin fut a flash. Ha több infó kell keress meg. Sokat segíthet az OPC szerver használata, hiszen minden jobb érintőképernyőnek is van OPC szervere. De használhatsz célszoftvereket is pld. Galileo (Möller é.k.).
(#) laffesz válasza kameleon2 hozzászólására (») Jún 27, 2011 /
 
Szia.
Köszönöm a választ, amint jutottam valamire neked is megírom hogy mi lett végül a megoldásom.
(#) mazso1988 hozzászólása Jún 29, 2011 /
 
Sziasztok
Érdeklődnék hogy aki használja a Wincc Flexible programot, találkozott-e olyan jellegű hibával hogy Runtime indításakor mindig (ÁLTALÁNOS KAPCSOLATHIBA 0X382) hibát ír bármely kommunikációra!
Segítséget előre is köszönöm.
(#) Szirty válasza mazso1988 hozzászólására (») Jún 29, 2011 /
 
Hali!

Igen.
A hiba kódja 140003

(ha ezt is leírod, hamarabb meg lehetett volna találni)
Azt jelenti, hogy a runtime-nak nincs kapcsolata a PLC-vel.
(#) Johnnie1 hozzászólása Jún 29, 2011 /
 
sziasztok!

Siemens S200-zal programozgatok és kíváncsi lennék nincs e valakinek hozzá vmilyen anyaga a mélyebb programozáshoz.
(#) Szirty válasza Johnnie1 hozzászólására (») Jún 29, 2011 / 1
 
Helló!

Minél mélyebb?

Ez itt az S7-200 528 oldalas magyar nyelvű system manualja

Vannak még további (magyar) leírások az oldalam linkgyűjteményében. nem idézem be mindet, nézz szét ha gondolod...
Következő: »»   31 / 129
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem