Bilaga A. Testrapport

Relevanta dokument
Ökad flexibilitet i Anybus X-gateway med hjälp av Lua

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Operativsystem ID1200/06 Tentamen :00-18:00

En kort text om programmering i C.

Modbus. Supportdokument. Lathund för att använda Modbus över RS XXX eller TCP/IP.

F4. programmeringsteknik och Matlab

Datakommunika,on på Internet

Tentamen Nätverksprogrammering Lösningsförslag

Pekare och arrayer. Indexering och avreferering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Ethernet-anslutning. För mer information om skrivarens Ethernet-funktion klickar du på avsnittet nedan: Ethernet-lampor. nätverkskonfigurationssida

3) Routern kontrollerar nu om destinationen återfinns i Routingtabellen av för att se om det finns en väg (route) till denna remote ost.

Föreläsning 5. Vägval. Vägval: önskvärda egenskaper. Mål:

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Programmeringsteknik med C och Matlab

Enkla datatyper minne

Michael Q. Jones & Matt B. Pedersen University of Nevada Las Vegas

Transport Layer. Transport Layer. F9 Meddelandesändning med UDP EDA095 Nätverksprogrammering. Java och UDP TCP/UDP

Modbus Seriell Kommunikation

Ethernet kommunikation med hjälp av optionskortet OPT-CI

F8 Meddelandesändning med UDP

PNSPO! CP1W-CIF mars 2012 OMRON Corporation

Föreläsning Datastrukturer (DAT036)

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Tentamen *:58/ID100V Programmering i C Exempel 3

Datakommunika,on på Internet

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

DIG IN TO Administration av nätverk- och serverutrustning

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

... Funktionsanrop. Vad händer när man kör ett program?

Övning från förra gången: readword

Laboration i Datakommunikation - Introduktion till Sockets och TCP/IP

Profibus. Altivar/Altistart. Kom-igång med Profibus till ATS48/ATV28 (via Modbusgateway)

Kapitel 6, 7, o 8: ARP Vägval Från användare till användare. Jens A Andersson (Maria Kihl)

IP201 Svenska. Installationsanvisning

LABORATIONSRAPPORT Säkerhet och Sårbarhet Laboration 1 Brandväggar

Konfigurera Routern manuellt

C++ Objektorientering - Klasser. Eric Elfving

Och!efter!ca!20!omgångar!hamnade!den!på!en!stabil!konfiguration!enligt!nedan! där!den!stannar!kvar.!

Att använda pekare i. C-kod

Föreläsning Datastrukturer (DAT037)

Objektorienterad Programkonstruktion. Föreläsning 10 7 dec 2015

SORTERING OCH SÖKNING

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

(Lösningsförslag finns sist i denna fil.)

Tentamen Nätverksprogrammering Lösningsförslag

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Instruktioner för uppdatering av enheter med ISP

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram

Konfigurera Routern manuellt

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Tentamen Nätverksprogrammering Lösningsförslag

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

Kapitel 5. Strömmar. Utmatning

Projektrapport. MegaLoad. Nätverksprogrammering EDA

ETS052 Internet Routing. Jens A Andersson

Föreläsning 6: Metoder och fält (arrays)

Webbteknik II. Föreläsning 4. Watching the river flow. John Häggerud, 2011

Datainsamling över Internet

10 Kommunikation i Java

Proxy. Krishna Tateneni Översättare: Stefan Asserhäll

Allt om datalogging och datakommunikation!

Övningar - Datorkommunikation

DIG IN TO Administration av nätverk- och serverutrustning

Hantering av textsträngar och talsträngar. William Sandqvist

Tentamen PC-teknik 5 p

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Programmering B med Visual C

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Operativsystem ID2206 Tentamen TEN1 4.5 hp :00-18:00

Inlämningsuppgift 12b Router med WiFi. Här ska du: Installera och konfigurera en trådlös router i nätverket.

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

WAGO IO System Service Seminar. Diagnostik

Tentamen Grundläggande programmering

Grundläggande datavetenskap, 4p

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Vad är en dator? Introduktion till datorer och nätverk. Pontus Haglund Institutionen för datavetenskap (IDA) 21 augusti 2018

Allt om datalogging och datakommunikation!

IF96015 är kompatibel med Nemo 96 HD HD+ HDLe. Läs informationen nedan och spara din dyrbara tid!

Tentamen i Datorkommunikation den 10 mars 2014

BRUKSANVISNING FÖR NÄTVERKSANVÄNDARE

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser

Hur man ändrar från statisk till automatisk tilldelning av IP i routern.

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

C++-programmets beståndsdelar

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Windows 2000, Windows XP och Windows Server 2003

3. Steg för steg. Kör IPv6 på riktigt med FortiGate! Principen är enkel:

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Transkript:

Bilaga A Testrapport

Innehållsförteckning 1 Testrapport... 4 2 Test 1: Skapa en tråd för Lua... 5 2.1 Testutrustning... 5 2.2 Testbeskrivning... 5 2.3 Testkriterier... 5 2.4 Utförande... 5 2.5 Testdata och observation... 6 3 Test 2: Implementering av Lua... 7 3.1 Testutrustning... 7 3.2 Testbeskrivning... 7 3.3 Testkriterier... 7 3.4 Utförande... 7 3.5 Testdata och observation... 8 4 Test 3: Skicka skriptfil till modulens FTP-server... 9 4.1 Testutrustning... 9 4.2 Testbeskrivning... 9 4.3 Testkriterier... 9 4.4 Utförande... 9 4.5 Testdata och observation... 10 5 Test 4: Läsa in fil från FTP-servern... 10 5.1 Testutrustning... 10 5.2 Testbeskrivning... 10 5.3 Testkriterier... 10 5.4 Utförande... 10 5.5 Testdata och observation... 11 6 Test 5: Sätta upp socket och skapa anslutning... 12 6.1 Testutrustning... 12 6.2 Testbeskrivning... 12 6.3 Testkriterier... 12 6.4 Utförande... 12 6.5 Testdata och observation... 14

7 Test 6: Writefunktion... 16 7.1 Testutrustning... 16 7.2 Testbeskrivning... 16 7.3 Testkriterier... 16 7.4 Utförande... 16 7.5 Testdata och observation... 18 8 Test 7: Readfunktion... 19 8.1 Testutrustning... 19 8.2 Testbeskrivning... 19 8.3 Testkriterier... 19 8.4 Utförande... 19 8.5 Testdata och observation... 21 9 Test 8: Tidsberäkning av funktioner... 22 9.1 Testutrustning... 22 9.2 Testbeskrivning... 22 9.3 Testkriterier... 22 9.4 Utförande... 22 9.5 Testdata och observation... 23 10 Test 9: Luaskript... 25 10.1 Testutrustning... 25 10.2 Testbeskrivning... 25 10.3 Testkriterier... 25 10.4 Utförande... 25 10.5 Testdata och observation... 26 11 Test 10: Luaskript... 27 11.1 Testutrustning... 27 11.2 Testbeskrivning... 27 11.3 Testkriterier... 27 11.4 Utförande... 27 11.5 Testdata och observation... 28

1 Testrapport På kommande sidor redovisas de tester som utförts under projektets gång. För mer detaljerade resultat från testerna läs kapitel 4 Resultat i rapporten.

2 Test 1: Skapa en tråd för Lua 2.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus X-Gateway Modbus-TCP Master/Client 1 isystem ione emulator X-gateway Emulator Dator 2.2 Testbeskrivning Testa att skapa en tråd för Lua att köras i så att processen ska kunna köras separat och få sin del av exekveringstiden. 2.3 Testkriterier Förväntat resultat är att tråden som skapas körs på ett korrekt vis och exekverar den kod som den innehåller. 2.4 Utförande Följande tillägg gjordes i HMS OS: I filen ab_cfg.h: Där stackstorleken defineras #define LUA_STACK_SIZE (80*SB) Där prioritetsordningen sätts LUA_TASK_PRIO I filen abu_init.c: Vid inkluderingar #include lua_.h Där trådarna initialiseras Ab_Verify( LUA_Init( ioptions ) );

Filerna lua_.c och lua_.h skapades och i.c-filen lades lua_task( void ). 2.5 Testdata och observation Tråden kördes som förväntat och koden exekverades som den skulle.

3 Test 2: Implementering av Lua 3.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator X-gateway Emulator Dator 3.2 Testbeskrivning För att testa om Lua kan köras på hårdvaran. 3.3 Testkriterier Förväntat resultat är att Lua ska kompileras på rätt sätt och att det ska kunna köras Luaspecifik kod i C-koden. 3.4 Utförande I filen där Lua-tråden körs initieras Lua enligt följande: lua_state *l; static const lual_reg lualibs[] = { { "base", luaopen_base }, { NULL, NULL } }; /* A function to open up all the Lua libraries you declared above. */ static void openlualibs(lua_state *l) { const lual_reg *lib; for (lib = lualibs; lib->func!= NULL; lib++) { lib->func(l);

} } lua_settop(l, 0); I tråden kördes sedan koden: l = lua_open(); openlualibs( l ); lua_pushnumber( l, 5 ); t = lua_tonumber( l, 1); if( t == 5 ) { UP_SetAbccLed2Green(); { 3.5 Testdata och observation Efter modifiering av filen lauxlib.c enligt kapitel 3.1 i rapporten fungerade Lua som förväntat och testkoden kördes med med godkänt resultat. Den valda dioden tändes vilken gav en visuell indikation på att testet fungerade.

4 Test 3: Skicka skriptfil till modulens FTP-server 4.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator 1 Ethernetkabel 1 Total Commander från www.ghisler.com X-gateway Emulator Dator Ethernet 4.2 Testbeskrivning För att testa om det går att skicka filer till modulens inbyggda FTP-server. 4.3 Testkriterier Förväntat resultat är att det går att skicka filer till FTP-servern på modulen. 4.4 Utförande Följande tillägg gjordes i HMS OS: I filen tcpip_env.h: Där objekt inkluderas #define FTP_OBJECT Kommunikation med modulens FTP-server sattes upp i Total Commander genom att ansluta till 10.10.20.89. Därefter skickades skriptfilen över till modulen.

4.5 Testdata och observation Filen skickades över korrekt och genom att ansluta på nytt verifierades det att överföringen var komplett. 5 Test 4: Läsa in fil från FTP-servern 5.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator 1 Ethernetkabel 5.2 Testbeskrivning För att testa om det går att läsa in skriptfiler från FTP-servern till Lua. 5.3 Testkriterier Förväntat resultat är att det går att läsa in en skriptfil från FTP-servern och sedan exekvera den kod som skriptet innehåller. 5.4 Utförande I Lua-tråden lades kod in för att öppna filen enligt följande: FIL *fl; if(!( fl = UI_FS_FileOpen( 1:\\LUATEST.LUA, r ) ) ) { /* Errorhandler */ }

där FIL är den struktur för filer som ingår i operativsystemet. UI_FS_FileOpen är den funktion som öppnar fatfs-filerna och 1:\\ är ftp-enheten. r står för att filen ast ska kunna läsas och inte skrivas på. Sedan kontrolleras storleken på filen och därefter allokeras minne för att kunna läsa innehållet. Detta görs med hjälp av funktionen UI_FS_FileGetChar enligt nedanståe kod: while( ( ( b = UI_FS_FileGetChar( fl ) )!= EOF ) { *luamallocstring = b; luamallocstring++; } Med Luas lual_loadstring function läses sedan datan in till Lua. 5.5 Testdata och observation Inläsningen av skriptfilen fungerar och koden exekveras korrekt.

6 Test 5: Sätta upp socket och skapa anslutning 6.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator 1 Ethernetkabel 1 Dator att skapa anslutning till 1 Wireshark X-gateway Emulator Dator Ethernet 6.2 Testbeskrivning Testa om det går att skapa sockets i Lua och om det är möjligt att få till en anslutning till en dator kopplad till samma nätverk. 6.3 Testkriterier Förväntat resultat är att det går att skapa en socket på modulen och sedan ansluta till en dator på nätverket. 6.4 Utförande Följande kod lades in som skriptfil på modulen: require("string") errorcode = 0 local Addr = "10.10.20.72" local Port = 333 local SckHnd, ErrStr, Str, ClAddr, ClPort, SrvAddr, SrvPort

sock, err = socket.tcp() SckHnd, ErrStr = sock:connect("10.10.20.72", 333, 0, 0) if SckHnd then ClAddr, ClPort = sock:getsockname() SrvAddr, SrvPort =sock:getpeername() Str, ErrStr = sock:receive() if Str then sock:s(string.format("greetings from %s:%d to %s%d\r\n", ClAddr, ClPort, SrvAddr, SrvPort)) errorcode = 10 else errorcode = 1 sock:close() Följande kod för att agera server kördes på en dator kopplad till samma nätverk som modulen: local socket = require( socket ) local Addr = "10.10.20.72" local Port = 333 local Str, Len, SckHnd, ClientHnd, ErrStr, BindAddr, BindPort, ClAddr, ClPort SckHnd, ErrStr = assert(socket.bind(addr, Port)) if SckHnd then BindAddr, BindPort = SckHnd:getsockname() print("listening on ", BindAddr, ", port ", BindPort, "\n") ClientHnd, ErrStr = SckHnd:accept() if ClientHnd then ClAddr, ClPort = ClientHnd:getpeername() print("connection from ", ClAddr, ", port ", ClPort, "\n") Str = string.format("greetings from %s:%d to %s:%d\r\n", ClPort) Len, ErrStr = ClientHnd:s(Str) if Len then Str, ErrStr = ClientHnd:receive() if Str then print("received from client: [", Str, ]\n") else print("receive error: ", ErrStr, "\r\n") ClientHnd:shutdown("both") BindAddr, BindPort, ClAddr,

else print("s error: ",ErrStr, "\n") ClientHnd:close() else print("client connection.", ErrStr, "\n") SckHnd:close() else print("listening socket. ",ErrStr, "\n") 6.5 Testdata och observation Modulen skapar en socket och skapar en anslutning till datorn som agerar server. Resultatet påvisas dels av utskriften från serverprogrammet, men även med hjälp av analysverktyget Wireshark. Här ses datan som kommer från modulen Greetings from 10.10.20.99:1024 to 10.10.20.72:333. Modulen skickar här med sin egen adress och port, men även mottagarens adress och port. På samma sätt mottager modulen liknande data från servern. Denna data läses in till Lua-tråden och skrevs ut på datorns skärm. På nästa sida redovisas kommunikationsflödet från Wireshark.

På översta raden ses anslutningsförfrågan och på raden under accepterar servern förfrågan. Den markerade raden visar den data modulen skickar till servern och sista raden stängs anslutningen.

7 Test 6: Writefunktion 7.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator 3 Ethernetkablar 1 Anybus-S (Slave) 1 Dator att skapa anslutning till 1 EIPScan 1 Anybus-S Development Tool II X-gateway Emulator Dator Anybus-S Ethernet Router 7.2 Testbeskrivning Testa att skapa en funktion i ett Luaskript för att läsa data från ABCC-modulens buffert och sedan skicka detta vidare på Modbussidan. Kommunikationen mellan ABCC-modulen och dess buffert sker i C-kod. 7.3 Testkriterier Förväntat resultat är att korrekt data skall läsas in från bufferten och sedan skickas vidare. 7.4 Utförande Följande kod lades in i Luaskriptet require("socket") require("string")

function modbusinit() sstringw = "" length = 16 Buffer[1] = string.char( 0 ) Buffer[2] = string.char( 0 ) Buffer[3] = string.char( 0 ) Buffer[4] = string.char( 0 ) Buffer[5] = string.char( 0 ) -- Transaction identifier -- Protocol identifier -- Message length Buffer[6] = string.char( 7+length*2 ) Buffer[7] = string.char( 0 ) -- Unit identifier Buffer[8] = string.char( 16 ) -- Function code Buffer[9] = string.char( 4 ) -- Address1 Buffer[10] = string.char( 0 ) -- Address2 Buffer[11] = string.char( 0 ) -- Word count: Length1 Buffer[12] = string.char( length ) -- Length2 Buffer[13] = string.char( length*2 ) -- Byte count(length * 2) function modbuswritemultiple() receivebuff = Lua_Read_PdBuff() for i=1,32,1 do Buffer[13+i] = string.char( receivebuff[i]) sstringw = table.concat( Buffer ) sock:s( sstringw ) receivebuff = nil Str, ErrStr = sock:receive('*b',12) if Str then Str = string.sub(str, 10, 10) if not string.byte(str) == 16 then else print("write error") print("error, no receive...") Buffer = {} local Addr = "10.10.20.75" local Port = 502 local SckHnd, ErrStr, Str

modbusinit() sock, err = socket.tcp() SckHnd, ErrStr = sock:connect(addr, Port, 0, 0) if SckHnd then while 1 do modbuswritemultiple() Följande kod lades till i C-koden: int Lua_Read_PdBuff(lua_State *l) { int i; GS_UseCritical(); lua_newtable(l); GS_EnterCritical(); for (i = 1; i < 33; i++) { lua_pushnumber(l, i); // Key lua_pushnumber(l, appd_abrdpdbuff[i]); // Data lua_settable(l, -3); // The table location } GS_ExitCritical(); } return 1; 7.5 Testdata och observation Korrekt data lästes in från bufferten och skickades sedan vidare på Modbussidan. Se kapitel 9.5 för utförligare testdata och observation.

8 Test 7: Readfunktion 8.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator 3 Ethernetkablar 1 Anybus-S (Slave) 1 Dator att skapa anslutning till 1 EIPScan 1 Anybus-S Development Tool II X-gateway Emulator Dator Anybus-S Ethernet Router 8.2 Testbeskrivning Testa att skapa en funktion i Lua som läser data från Modbussidan och sedan skickar denna vidare via ABCC-modulen ut på Ethernet. Kommunikationen mellan ABCC-modulen och dess buffert sker i C-kod. 8.3 Testkriterier Förväntat resultat är att ett paket skall läsas in från Modbussidan och sedan ska datan extraheras från paketet och skickas ut på Ethernet via ABCC-modulens buffert. 8.4 Utförande Följande kod lades in i Luaskriptet:

require("socket") require("string") function modbusinit() Buffer0 = 0 Buffer1 = 0 Buffer2 = 0 Buffer3 = 0 Buffer4 = 0 Buffer5 = 6 Buffer6 = 0 Buffer7 = 3 Buffer8 = 0 Buffer9 = 0 Buffer10 = 0 Buffer11 = 16 -- Transaction identifier -- Protocol identifier -- Message length -- Unit identifier -- Function code -- Address1 -- Address2 -- Word count: Length1 -- Length2 sstring = string.char(buffer0, Buffer1, Buffer2, Buffer3, Buffer4, Buffer5, Buffer6, Buffer7, Buffer8, Buffer9, Buffer10, Buffer11) function modbusreadmultiple() sock:s(sstring) Str, ErrStr = sock:receive('*b',41) if Str then Str = string.sub(str, 12) else print("error, no receive...") Lua_Write_PdBuff(Str) local Addr = "10.10.20.75" local Port = 502 local SckHnd, ErrStr, Str modbusinit() sock, err = socket.tcp() SckHnd, ErrStr = sock:connect(addr, Port, 0, 0) if SckHnd then while 1 do modbusreadmultiple()

Följande kod lades in i Luatråden: int Lua_Write_PdBuff(lua_State *l) { int i; GS_UseCritical(); const char *stri = lual_checkstring(l, 1 ); } GS_EnterCritical(); for (i = 0; i < 32; i++) { appd_abwrpdbuff[i] = stri[i]; //<<<<test } GS_ExitCritical(); return SUCCESS; 8.5 Testdata och observation Korrekt data lästes in från Modbussidan och skickades sedan vidare ABCC-modulens buffert. Se kapitel 9.5 för utförligare testdata och observation.

9 Test 8: Tidsberäkning av funktioner 9.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator 3 Ethernetkablar 1 Anybus-S (Slave) 1 Dator att skapa anslutning till 1 EIPScan 1 Anybus-S Development Tool II 1 Wireshark X-gateway Emulator Dator Anybus-S Ethernet Router 9.2 Testbeskrivning Beräkna tidsåtgången för de funktioner som implementerats i Luaskriptet. 9.3 Testkriterier Få fram den tid det tar för funktionerna att exekveras. 9.4 Utförande En gateway, en Anybus-S och en dator kopplades till en router. På datorn kördes programmen EIPScan och Anybus-S Development Tool II. Skriptet ligger i en loop som först läser in data från ABCC-modulens buffert och sedan skriver ut den data på Modbussidan. Därefter läses data från Modbus för att sedan skickas till ABCC-modulens buffert.

De båda funktionernas tidsåtgång mättes även separat. 9.5 Testdata och observation Med hjälp av Wireshark erhölls de tider det tog för datan som skickar att passera genom X- gatewayen. Dessa redovisas i detalj i kapitel 4.2.4 i rapporten.

Här går det att sätta en referensmarkör då förändringen från Ethernetsidan först påträffas och sedan läsa ut när den skickas ut på Modbussidan. I detta fall ca 15,5 ms. På samma sätt utfördes testet då data på Modbussidan skickades och sedan lästes ut på Ethernetsidan.

10 Test 9: Luaskript 10.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator 3 Ethernetkablar 1 Anybus-S (Slave) 1 Dator att skapa anslutning till 1 EIPScan 1 Anybus-S Development Tool II 1 Oscilloskop Tektronix TDS 224 X-gateway Emulator Dator Anybus-S Ethernet Router 10.2 Testbeskrivning Mäta tidsåtgången för de två funktionerna modbusreadmultiple() och modbuswritemultiple() i Luaskriptet var för sig samt tillsammans. 10.3 Testkriterier Få fram tidsåtgången för funktionerna var för sig samt tillsammans. 10.4 Utförande Direkt innan funktionsanrop sätts port TP1 hög och när funktionen körts sätts den låg. Med hjälp av oscilliskopet mäts sedan tidsåtgången.

10.5 Testdata och observation Oscilloskopet visade tydligt till och frånslag av porten och tidsåtgången kunde utläsas. Se kapitel 4.2.3 för resultat.

11 Test 10: Luaskript 11.1 Testutrustning Följande utrustning används i testet. Antal Utrustning 1 Anybus x-gateway Modbus-TCP Master/Client 1 isystem ione emulator 3 Ethernetkablar 1 Anybus-S (Slave) 1 Dator att skapa anslutning till 1 EIPScan 1 Anybus-S Development Tool II X-gateway Emulator Dator Anybus-S Ethernet Router 11.2 Testbeskrivning Skapa en skriptfil för att tillse att det går att läsa in data från ABCC-modulens buffert och sedan skriva ut det på Modbussidan, men även läsa från Modbus och skriva till ABCCmodulens buffert. 11.3 Testkriterier Förväntat resultat är att det med hjälp av Luafilen går att läsa från ABCC-modulens buffert via en C-funktion och sedan skriva ut med Modbus. Det skall även gå att läsa in från Modbus och skicka vidare till ABCC-modulen via en C-funktion. Detta ska sedan upprepas i en evig loop utan att minnet tar slut. 11.4 Utförande

Se bilaga C för hela skriptkoden och test 6 och 7 för den C-kod som lagts till. En gateway, en Anybus-S och en dator kopplades till en router. På datorn kördes programmen EIPScan och Anybus-S Development Tool II. Skriptet ligger i en loop som först läser in data från ABCC-modulens buffert och sedan skriver ut den data på Modbussidan. Därefter läses data från Modbus för att sedan skickas till ABCC-modulens buffert. I EIPScan sätts en kommunikation upp till gatewayen och här kan det både läsas och sättas värde för respektive byte som skickas/tas emot. I programmet Anybus-S Development Tool II går det att göra motsvarande för den Anybus-S som kopplats in. I respektive program går det sedan att läsa ut den data som skickas från det andra programmet. 11.5 Testdata och observation Initialt kördes loopen ca 50 gånger och därefter blev heapen full. Efter viss optimering (se kapitel 4.2.4 i rapporten) kunde skriptet köras utan att minnet tog slut. Kommunikationen fungerade då enligt de kriterier som satts upp. I första bilden ses de båda programmen innan dess att någon data är modifierad. I bild två har datan på Modbussidan ändrats och skickats ut på Ethernetsidan. I bild tre har datan på Ethernetsidan ändrats och skickats ut på Modbussidan.