• No results found

4.1 Hämtning av olika datatyper och storlek

När hämtning av växelriktarens register till PLC testades framkom det att det endast kan göras till minnesobjekten systemwords %SW eller memorywords %MW. Decimalt värde över 32767 tolkas som negativt av %MW och positivt av %SW. Hämtning av register kan alltså inte göras till memory double words %MD.

I SMA:s SunSpec tabeller anges registrens plats i adresseringsutrymmet. Då programmet Machine Expert Basic använder registeradressens nummer måste hänsyn tas till det vid hämtning (som tidigare nämnt under rubriken Register). Exempelvis hämtning av registernummer 40003 i SunSpec tabellen anges adressen 40002 i Machine Expert Basic programmet.

Modbus protokollet använder som tidigare nämnt 16bitars register. Det innebär att om SunSpecs datatyp är 32bit eller 64bit kommer exempelvis ett 32bit registerblock bestå av två stycken ihopkopplade 16bitar. När PLC:n ska hämta ett registerblock på 32bit det vill säga två delregister måste inställning i Machine Expert Basic göras så att det hämtar båda delregistren annars sker ingen hämtning. Detta måste göras oavsett om endast ett av delregistren i registerblocket ska användas. Datablocket Manufacturer har exempelvis 16st delregister i sitt registerblock med registernummer 40005 till 40020 det vill säga 16 st delregister är ihopkopplade och tilldelade datatypen string. Se Tabell 9. Dessa register innehåller tillverkarens namn SMA. Bokstäverna i SMA är fördelade i de två första av de 16 delregistren då ett tecken har storleken 1byte och varje enskilt register kan innehålla två tecken det vill säga 2byte. För att kunna hämta dessa två delregister måste alla 16 delregister mappas i Channels assistant, det vill säga i rutan Read objects skrivs 40004 i Offset och 16 i Length. Se Figur 15. I programmeringen kan sedan valfritt antal eller inga register väljas för hämtning. I detta fall de två första där det första registret innehåller bokstäverna SM och det andra registret bokstaven A.

4.2 Logga data i SD kort

4.2.1 Hantering av funktionen DATALOG och tidsstämpel

Testerna visar att det som mest går att använda fyra DATALOGblock numrerade 0-3. Dessa block måste användas i nummerordning, det vill säga det går ej att använda DATALOG1 om inte DATALOG0 används. Varje DATALOGblock kan lagra som mest 500kB och dessutom skapa en .BAK fil med samma storlek. Detta ger totalt 4MB som kan loggas innan SD kortet behöver tömmas. Om SD kortet inte är tömt kommer existerande .BAK fil att skrivas över om det inte förhindras med att använda den booleska variabeln BAK från DATALOGblocket eller någon annan programmeringsfunktion.

I varje DATALOGblock finns det plats för 32 st minnesobjekt som kan loggas med tillval att ha med tidsstämpel till varje loggning. Varje tidsstämpel tar ett utrymme på ca 18byte och innehåller datum och tid ner till sekunder. I csv filen får tidsstämpel och varje minnesobjekt en egen kolumn och varje loggning ger en ny rad. Avslutas loggningen och startas igen vid ett senare tillfälle fortsätter loggningen på raden efter den senaste loggningen.

PLC:n loggar tidsstämpel med formatet dd/MM/yyyy. Om datorn som används för att öppna csv filen inte har samma datumformat blir tidsstämpeln fel. Datumformatet som loggas av PLC:n går inte att ändra vilket innebär att datumformatet måste ändras i datorn. Det är vanligt att datumformatet är yyyy-MM-dd i datorn så ett program tillverkades i Python som gör om datumformatet till yyyy-MM-dd

27

för att slippa ändra i datorn. Koden finns i bilaga C (Pythonprogrammet kräver någon typ av IDE (Integrated Development Environment) för att köra koden).

4.2.2 Hantering vid loggning av hämtade datatyper

För att hämtning av värden över 32767 ska tolkas som positiva måste %MW loggas som ett %MD vilket kan göras från samma minnesplats. Ett alternativ är att %MW tilldelas till ett %MD på ny minnesplats och loggas från den nya minnesplatsen eller använda %SW vid hämtning och sedan logga %SW. När olika register3 hämtas och ska loggas som %MD måste de hämtas med minst ett minneobjekts mellanrum då %MD använder två närliggande %MW (i stigande ordning) för att skapa ett double word. Om hämtning till %MW10 exempelvis ska loggas med %MD10 måste %MW11 lämnas orört, annars kommer eventuellt värde i %MW11 länkas ihop med %MD10. Värdena från %MW10 och %MW11 kommer inte adderas utan länkas ihop, vilket betyder att binärt kommer %MW11 läggas först varpå %MW10 läggs efter för att skapa ett double word.

Denna metod med hämtning till vartannat minnesobjekt går även att använda på delregister till registerblock för hoplänkning i programmeringen innan loggning sker till SD kort. Alternativt att loggning av delregistren sker som %MD separerat för att senare hantera dessa i annat program. Delregister till ett registerblock kan, till skillnad från olika register, med fördel hämtas utan mellanrum mellan minnesobjekten. Detta för att delregister aldrig överstiger 16-bit vilket gör att varje delregister ryms i ett %MW. Dessutom är det oftast hela registerblockets värde som är intressant. Delregistren behöver då hanteras för att värdet i hela registerblocket ska bli rätt.

Om hämtning av ett registerblock på 32bit och minnesobjekt bredvid varandra ska användas måste dessa minnesobjekt användas i bakvänd ordning/fallande ordning om båda delregistren ska loggas som ett %MD. Detta på grund av att Modbus skickar delregistren i stigande ordning och att %MD länkar ihop %MW i fallande ordning. Exempelvis om ett registerblock hämtas som har datatypen acc32 (se Tabell 9) och innehåller två delregister med totala värdet 0x00023A54 kommer 0x0002 skickas först och sedan 0x3A54. I Machine Expert Basic görs inställning i Channel assistant, se Figur 15, så att dessa två delregister hämtas och av programmet blivit tilldelad nätverksobjekten %IMW300.0.0 och %IMW300.0.1.

Nätverksobjektet %IMW300.0.0 hämtar första delregistret med värdet 0x0002 och %IMW300.0.1 hämtar andra delregistret 0x3A54. I programmeringen görs tilldelningen av minnesobjekten i fallande ordning, det vill säga minnesobjektet %MW11 tilldelas nätverksobjektet %IMW300.0.0 och %MW10 till %IMW300.0.1. Minnesobjektet %MW10 har nu värdet 0x3A54 och %MW11 värdet 0x0002. Vid loggning används %MD10 vilket leder till att %MW11 länkas ihop med %MW10 det vill säga %MD10 får värdet 0x00023A54.

Ett alternativ är att använda funktionen CONCATW() i PLC:n och tilldela hoplänkningen till samma %MD eller ett annat. Med CONCATW() kan minnesobjekten länkas samman i vilken ordning som helst

3 Med olika register menas register vars värden inte hör ihop, exempelvis ackumulerad effekt i ett register och ström i ett annat register.

28

exempelvis om värdena hämtas och tilldelas som i exemplet ovan kan CONCATW() användas enligt följande4:

LD 1

[ %MW11 := %IMW300.0.0 ] # %MW11 innehåller nu värdet 0x0002 [ %MW10 := %IMW300.0.1 ] # %MW10 innehåller nu värdet 0x3A54 [ %MD10 := CONCATW( %MW11 , %MW10 ) ] # %MD10 innehåller nu värdet 0x3A54 0002 [ %MD20 := CONCATW( %MW10 , %MW11 ) ] # %MD20 innehåller nu värdet 0x0002 3A54

Det går inte att länka ihop två eller flera %MD vilket innebär att det inte går att skapa minnesobjekt större än signed 32bit i denna PLC. Detta betyder att om ett värde i växelriktaren är större än 2147483647 (DEC) måste loggning till SD kort ske antingen av minnesobjekten var för sig som %MW eller parvis ihopkopplade som %MD och sedan i ett annat program hantera värdena så att det totala värdet blir rätt.

4.2.3 Hämta data från SD kort

Det framgick inte i någon av PLC:s manualer om hämtning kunde ske från SD kortet. I samråd med tillverkaren Schneider och egna tester framkom att det inte går att överföra data från SD kort i PLC via Modbus TCP. SD kortet måste fysiskt förflyttas från PLC till vald källa för att kunna överföra de loggade värdena från SD kortet.

4.3 Skicka data till Embriq

Embriq fick kontakt med både router och PLC men kom inte längre i sina försök att hämta värden från PLC:n då andra jobb behövde prioriteras före detta projekt.

29

Related documents