Trådlös styrning av industrirobot via 5G Examensarbete i högskoleingenjörsprogrammet Mekatronik TIMOTEI VASIU ANDRÉ DA SILVA GONÇALVES Institutionen för Elektroteknik CHALMERS TEKNISKA HÖGSKOLA Göteborg, Sverige 2019 EXAMENSARBETE Trådlös styrning av industrirobot via 5G TIMOTEI VASIU ANDRÉ DA SILVA GONÇALVES Institutionen för Elektroteknik CHALMERS TEKNISKA HÖGSKOLA Göteborg, Sverige 2019 Trådlös styrning av industrirobot via 5G TIMOTEI VASIU ANDRÉ DA SILVA GONÇALVES © TIMOTEI VASIU, ANDRÉ DA SILVA GONÇALVES, 2019 Institutionen för Elektroteknik Chalmers tekniska högskola SE-412 96 Göteborg Sverige Telefon: +46 (0)31-772 1000 The Author grants to Chalmers University of Technology and University of Gothenburg the non-exclusive right to publish the Work electronically and in a non-commercial purpose make it accessible on the Internet. The Author warrants that he/she is the author to the Work, and warrants that the Work does not contain text, pictures or other material that violates copyright law. The Author shall, when transferring the rights of the Work to a third party (for example a publisher or a company), acknowledge the third party about this agreement. If the Author has signed a copyright agreement with a third party regarding the Work, the Author warrants hereby that he/she has obtained any necessary permission from this third party to let Chalmers University of Technology and University of Gothenburg store the Work electronically and make it accessible on the Internet. Omslag: Framtidens fabrik (5G-ACAI, 2018) Chalmers Reproservice Göteborg, Sverige 2019 Trådlös styrning av industrirobot via 5G TIMOTEI VASIU ANDRÉ DA SILVA GONÇALVES Institutionen för Elektroteknik, Chalmers tekniska högskola Examensarbete Sammanfattning På senare år har framsteg inom nätverksteknik, robotteknik och molntjänster öppnat upp nya möjligheter för lättare uppbyggnad och förbättrad funktionalitet av så kallade ’smarta’ fabrikstationer. Ytterligare en viktig utveckling inom detta område vore att kunna ”klippa kablarna”, det vill säga ersätta de traditionella fältbussarna inom industrin med ett trådlöst kommunikationssystem. Effekterna blir då en smartare och mer flexibel fabrik som gör det enklare att installera nya enheter och att bevaka samtliga processer. Utgångspunkten för detta examensarbete är tidigare studier inom ämnet där studenter vid Chalmers skapade ett underlag för kommunikation mellan ett virtuellt programmerbart styrsy- stem (PLC) och en industriell robot via det mobila nätverket, LTE. Föregående examensarbete redovisade ett delvis lyckat koncepttest, men sedan dess har teknologierna utvecklats en hel del. Den nya generationen av mobila nätverk, 5G, förväntas öka prestationer genom att medföra högre bandbredd samt avsevärt lägre fördröjningstider. Detta möjliggör bland annat ”realtidskontroll” av industriella robotar, vilket är ett område väl värt att utforska. I detta sammanhang är en maximal cykeltid av 10 ms ett viktigt krav. En mjukvaruapplikation skapades för att kunna skicka styrsignaler fram och tillbaka från den virtuella PLCn VAC500, till en simulerad robot där programvaran RobotStudio från ABB användes. WebSockets användes som metod för koppling från ena änden till den andra, istället för att använda proprietära fält-bussprotokoller. Den här metoden erbjuder ’full-duplex’ tvåvägskommunikation utan behov av konstant efterfrågning. Testerna som genomfördes bestod i att skicka en styrsignal via 5G till en robot samt registrera kvittens. En genomsnittlig cykeltid på 238 ms kunde uppnås mellan klient och server. Genomsnittlig cykeltid på hela systemet blev 563 ms. Dessa resultat är begränsade specifikt till systemet som testades och tillägg i form av ökande antal givare och don kommer ha en negativ påverkan på den slutgiltiga cykeltiden. Nyckelord: 5G, IIoT,Industri 4.0, TCP/IP-sockets, Trådlös kommunikation i Abstract Recent advances in networking technology, robotics and cloud computing have the potential to facilitate easier implementation of a smart factory station as well as offer improved functionality. This is achieved by ”cutting the cables” and replacing the traditional fieldbus arrangements with a wireless communication system, making the factory smarter and more flexible, making it easier to install new units and with the added benefit of being able to keep metrics on all the processes. The background for this thesis is the previous research done on this subject where a proof of concept was created to allow communication between a virtual Programmable Logic Controller (PLC) and an industrial robot wirelessly over an LTE mobile network. This research showed only moderate success but the technological landscape has subsequently improved and the development of 5G communication brings with it performance gains, both in the high bandwith and the low response times it offers making ”real-time” control of an industrial robot a possibility worth investigating. A maximum cycle-time of 10 ms is required for any such processes. A software application was created to be able to send control signals from the virtual PLC VAC500 to a simulation software by the name of RobotStudio and vice versa. Websockets were chosen as the method of connecting from endpoint to endpoint instead of any of the available fieldbus protocols. This method offers full duplex communication without the need for polling. Tests were carried out via 5G between a client and server as well as where an input was sent to the robot and an output was received by the PLC. An average cycle-time of 238 ms and 563 ms was achieved for the client/server connection and the whole system respectively. These results are only applicable to a system of a similar size, increasing the number of sensors and actuators will make synchronization more difficult, negatively impacting the recorded cycle-time. ii Förord Vi vill tacka ABB och Ericsson för att fått möjligheten att genomföra detta intressanta examensarbete. Ett särskilt tack till ”SmartaFabriker” som gav oss möjlighet att resa till Hannovermässan 2019, vilket verkligen var en givande upplevelse. Ett tack till Lars Egeland och Fredrik Flyrin från Ericsson som ordnat möten och hjälpt oss att komma i kontakt med rätt personer respektive handlett oss. Ett tack till Magnus Seger och Oskar Henriksson från ABB som har gett oss feedback under arbetetsgången. Ett stort tack till Jesper Pedersen som handlett och gett oss värdefull feedback under rapportskrivandet samt även vår examinator Tommy Svensson. Vi vill också tacka Rasmus Lindy och Oscar Hall som gav oss insiktsfulla råd i början av arbetet. I would also like to thank my beloved wife Maria who, with her constant love and support throughout this journey of mine, has given me the strength to follow my dream. I wish to express my sincere thanks to my precious wife, Camelia and my family for their support and encouragement over the past three years. Without them I would have never reached this far. Timotei Vasiu, Göteborg, 2019 iii André Da Silva Gonçalves, Timotei Vasiu, Göteborg, 2019 André Da Silva Gonçalves, Göteborg, 2019 iv Förkortningar 3GPP Generation Partnership Project. AGV Automated Guided Vehicle. IIoT Industrial Internet of Things. PLC Programmable Logic Controller. REST Representational State Transfer RWS Robot Web Sercives NR New Radio TCP Transmission Control Protocol UDP User Datagram Protocol v Figurer 1.1 Simulering av fabrikstation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.1 Olika krav på överföringshastighet för de olika nivåerna i en fabrik. . . . . . . . 4 2.2 OSI-modellen [3]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Olika fältbussar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Industiell Ethernet är nu större än traditionella fältbussar! [5] . . . . . . . . . . 7 2.5 Ethernet TCP/IP-ram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.6 Figuren visar ett IP-paket då man använder sig utav en L2TP-tunnel. . . . . . 8 2.7 Illustration på dataöverföringen med REST-API. . . . . . . . . . . . . . . . . . 9 2.8 Bild som visar olika protokoll för att kommunicera med robot-kontrollern. . . . 10 2.9 Dagens Ethernetbaserade protokoll [10] . . . . . . . . . . . . . . . . . . . . . . . . 11 2.10 Bild som visar olika metoder för att kommunicera med ABB:S robotstyrenhet. . 12 3.1 Överföring av Ethernet-ram via L2TP-tunnel. [2] . . . . . . . . . . . . . . . . . 15 4.1 Systemöversikt för förra årets examensarbete som blev utgångpunkten för detta arbete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2 Översikt av hela systemet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.3 VAC500s gränsnitt Automation builder inställt på Virtual System Testing . . . 18 4.4 UML-diagram för kommunikation mellan PLC:t och Websockets . . . . . . . . . 19 4.5 Diagram som visar Python kod som användes för kommunikation mellan RWS klient och RWS server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.6 Sekvens för att utföra automatiska tester . . . . . . . . . . . . . . . . . . . . . . 23 4.7 Testuppsättning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.1 UML-diagram över hela systemet . . . . . . . . . . . . . . . . . . . . . . . . . . 28 6.1 Olika användningområden med 5G [14] . . . . . . . . . . . . . . . . . . . . . . . 30 6.2 Hur det ser ut med logistik i en fabrik [8] . . . . . . . . . . . . . . . . . . . . . . 31 vi Innehåll 1 Inledning 1 1.1 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Precisering av frågeställningen . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Teoretisk Bakgrund 4 2.1 Industriellt kommunikationsnätverk . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 OSI-modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2.1 Fältbussar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.2 Accessmetoder - master/slave . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.3 Cykeltid och realtidskrav . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.1 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.2 PPP och L2TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.3 TCP - Transmission Control Protocol . . . . . . . . . . . . . . . . . . . . 8 2.3.4 UDP - User Datagram Protocol . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.5 Websockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.6 RWS och REST-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.7 5G New Radio (NR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4 Mjuk- och hårdvara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4.1 Programmable Logic Controller (PLC) . . . . . . . . . . . . . . . . . . . . 11 2.4.2 Automation Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4.3 Codesys’ PLCHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.4.4 RobotStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.4.5 Machina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3 Metod 14 3.1 Första stadiet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2 Andra stadiet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 Tredje stadiet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4 Genomförande 16 4.1 Förstudie - Systemöversikt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.1.1 Master . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.1.2 Slave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2 Procedur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.3 Syntes - Systemöversikt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.4 Mjukvarulösning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 vii 4.4.1 Val av fältbussprotokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.4.2 Kommunikation med PLC:t . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.4.3 Websocketsservern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.4.4 RobotStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.4.5 Machina.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.4.6 Konfiguration av Python-script . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.4.7 Kommunikation mellan Python och RobotStudio . . . . . . . . . . . . . . . 21 4.4.8 Genomförande av test mellan klient och server . . . . . . . . . . . . . . . 22 4.4.9 Test av hela systemet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5 Resultat 24 5.1 Tabeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.2 Mjukvara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.2.1 Kommunikation med PLC:t . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.2.2 Websockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.2.3 Diagram för hela systemet . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2.4 Besvarande av frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . 28 6 Slutsats och diskussion 29 6.1 Tillämpningsområden för 5G . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 6.1.1 Övervakning av processflöde och komponenter . . . . . . . . . . . . . . . 29 6.1.2 Självkörande enheter (AGV) . . . . . . . . . . . . . . . . . . . . . . . . . 29 6.1.3 Virtuellt PLC i molnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.1.4 Fjärrstyrning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.2 Framtidsutveckling av 5G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.2.1 Frekvensband . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.2.2 Integration med annat teknik . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.3 Vidare utveckling av det befintliga systemet . . . . . . . . . . . . . . . . . . . . . 31 6.3.1 Framtidsutveckling av fältbussprotokoller . . . . . . . . . . . . . . . . . . . 31 6.3.2 Machina-biblioteket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.3.3 Säkerhet och kryptering . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.3.4 Miljö och hållbarhet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Referenser 33 Bilagor I A Pythonkod för koppling till virtuell robotkontroller I B Automatisk påverkan av insignal för att utföra cykeltester IV C Läsning av resultatet och skriv ut medelvärdet från antalet cykeltester V D Testresultat cykeltester för olika transportmedium VI E PLC-kommunikation X viii 1 Inledning 1.1 Bakgrund Sedan industriella revolutionen har vissa milstolpar ansetts vara så viktiga att de ansetts vara en ’ny’ industriell revolution. Efter tre iterationer ligger tekniken vid tröskeln till en fjärde iteration av den industriella revolutionen, Industri 4.0 eller Industrial Internet of Things (IIoT). Detta innebär att de flesta industrienheterna kommer att ha en ständig anslutning till nätverksinfrastruktur, vilket kommer att möjliggöra kommunikation mellan olika enheter i industrin på högre grad. Detta är speciellt relevant i samband med industriella processer som är kända för att vara komplexa och de mest krävande där hög precision, exakt synkroniseringen av enheter och storskalig koordination behövs. Det är också tänkt att de flesta industrienheter kommer kunna ge ständig återkoppling som kan leda till mer effektivt förebyggande underhåll. Detta anses leda till mer flexibla, robusta och effektiva fabriker som i högre grad styr sig självt[1]. Projektet Smarta Fabriker är ett exempel på en smart och uppkopplad fabrik som är för tillfället byggd hos Ericsson - ett av de största företag i kommunikationsteknik - på Lindholmen i Göteborg. Fabriken har som mål att öka attraktiviteten för tekniken och sprida kunskap om Industri 4.0. ABB är en stor aktör inom automationsteknik och har flera robotar i fabriken. Detta examensarbete utförs i samarbete med ABB och Ericsson samt ”SmartaFabriker”. Ett område där möjligheter för vidare utveckling av fabriken har identifierats är där molnbaserad virtuella styrenheter kan användas istället för det traditionella Programmable Logic Controller (PLC). Med ett virtuellt PLC i molnet kommer den fysiska trådbundna kommunikationen via fältbussar ersättas av trådlös teknik så att styrsystemet på det sättet kan centraliseras, dvs ’ett’ PLC är tillräckligt för att styra i princip alla enheter i en anläggning. Tidigare examensarbete inom molnbaserad virtuell PLC som utfördes under 2018 visade att det är möjligt att upprätta en anslutning via vanligt mobilt LTE-nätverk genom att översätta styrsignalerna till något industriellt fältbussprotokoll. Det resulterade dock i relativt långa överföringstider som inte riktigt uppnår de realtidskrav som krävs i en fabrikstation. Med 5Gs uppkomst kan däremot överföringstiden minskas avsevärt till följd av höga överföringshastigheter i kombination med låga svarstider[2]. I detta examensarbete kommer möjligheten att ersätta den trådade kommunikationen i fabri- ken med trådlös kommunikation analyseras genom att låta ett virtuellt PLC styra en virtuell fabriksstation via 5G. Ett koncepttest ska även visas upp i ”SmartaFabrikers” fabriksstation. Fabrikstation För att kunna automatisera en fabrikstation behövs ett styrsystem som ansvarar för styrningen av alla underordnade enheter, en fabrik består av flera av dessa styrsystem. Dessa styrsy- stem kan kommunicera såväl med varandra som med underordnade enheter såsom ställdon, 1 industrirobotar och enheter med tillkopplade givare. Kommunikationen mellan alla dessa enheter utförs ofta via en industriell kommunikationsbuss, en så kallad fältbuss, baserad på Ethernet. Överföringen av data utförs med hjälp av speciellt utformade transportprotokoll. Industriella fältbussprotokoll garanterar att data kommer fram eller skickas vid bestämda tider, med den höga noggrannhet som krävs för att uppfylla de strikta realtidskraven som ställs på kommunikationen i moderna industriella processer. En fabrik består av flera styrsystem. Varje styrsystem behöver flera kablar för att hante- ra ingångar och utgångar från olika enheter samt även kommunikation mellan olika styrsystem. Detta innebär att en anläggning består av en oerhörd mängd kablar som behöver installeras, underhållas och eventuellt ersättas, vilket medför stora kostnader för industrin. Detta upplägg gör visserligen att datakommunikationen inom en fabrik blir stabil och pålitlig, men begränsar samtidigt möjligheterna att göra produktionslinjen mer flexibel. Dessutom blir det svårt att införa nya mobila tekniklösningar som t.ex. Automated Guided Vehicles (AGV), vilka förli- tar sig på en trådlös koppling för att kunna navigera i en fabrik. En trådlös lösning skulle kunna göra samma fabrik mer dynamisk, där produktionslinjen snabbt kan omformas för att anpassas till dagens industrikrav. Utmaningen med att använda trådlös kommunikation är att realtidskraven i kommunikationssystemet behöver uppfyllas med hög pålitlighet. Det finns idag trådlösa lösningar med t.ex. WIFI som ofta drabbas av störningar och hög latens då flera enheter ansluts, vilket gör dem opassande för hög-precision, realtidsbaserade processer som kräver flera I/O enheter eller flera styrsystem. Figur 1.1: Simulering av fabrikstation 1.2 Syfte Vidare undersöka möjligheten att ersätta den trådade kommunikationen d.v.s. fältbussar som för nuvarande används i industriella styrsystem, i synnerhet på tidskritiska system med trådlös kommunikation över 5G. Även utveckla en prototyp för att kunna testa kommunikationen mellan ett virtuellt PLC och en industrirobot via 5G-nätet. För att kunna bekräfta att realtidskravet uppfylls ska cykeltiden i systemet mätas. 2 1.3 Avgränsningar • Kommunikation mellan en dator och en robot ska testas. • Endast en ingång samt en utgång används för att mäta cykeltid genom 5G. • Protokoll som analyseras ska vara möjliga att implementeras i den riktiga YuMi-roboten från ABB. • Hänsyn till real-tidskraven i industrin behöver inte uppfyllas i första hand utan en upprättning av kommunikationen mellan en robot och industridator prioriteras. • Ett virtuellt PLC kommer att användas men det ska endast köras ’lokalt’ då konfigureringen av molntjänsterna innebär stora kostnader i form av tid. 1.4 Precisering av frågeställningen • Vilket kommunikationsprotokoll är lämpligt att använda för mobila nätverk inom indu- strin? • Vilken cykeltid kan uppnås för enkla signaler då 5G används som transportmedium? • Vilken hårdvara och mjukvara behövs för att uppnå tidskraven för kommunikation inom industrin? 3 2 Teoretisk Bakgrund 2.1 Industriellt kommunikationsnätverk I en modern uppkopplad fabrikstation sker informationsutbytet på flera nivåer med olika snabbhetskrav för överföringen. Hastighetskraven är höga när det gäller t.ex. överföring av signaltillstånd hos en givare i processen till styrsystemet men för att t.ex. planera underhåll krävs inte lika snabba besked. Det finns alltså olika tidskrav för olika typer av information och därmed olika krav på medium som transporterar informationen [3]. Figur 2.1 visar olika krav på överföringshastighet för de olika nivåer i en fabrik. Figur 2.1: Olika krav på överföringshastighet för de olika nivåerna i en fabrik. Vid fältnivån, där överföring av insignaler från processens olika givare till styrsystemen och utsignaler till olika ställdon sker, är kommunikationsbussens transportprotokoll utformat på ett sådant sätt att den uppfyller hårda realtidskrav genom att all data skickas och mottas inom ett visst tidsintervall. Vid fältnivån krävs att detta tidsintervall ligger under 10 millisekunder. Med detta i tanke var det extremt viktigt för författarna att kunna klassificera olika fältbussar enligt hastighet och funktionalitet. För detta ändamål användes OSI-modellen. 2.2 OSI-modellen För att kommunikationen mellan datorer ska kunna ske behöver reglerna för kommunikationen fastställas - detta kallas för protokoll. Olika protokoll används av olika tillverkare och operatörer och utan väl definierade standarder kan kompatibilitetsproblem uppstå. Därför skapades OSI- modellen - Open System Interconnection Reference Model. Den modellen är ett ramverk som definierar standarder för kommunikation mellan olika datorer och datanät. 4 Figur 2.2: OSI-modellen [3]. Modellen består av sju lager men här behandlas främst lager två till fyra då de är mest maskinnära. Lager ett, det fysiska lagret är i detta fall irrelevant: 2.Länkskiktet Svarar för dataöverföringen mellan två intilliggande noder dvs upprättar en länk med de reglerna som är definierat för just det protokollet så att mottagaren kan förstå meddelandet. Det kan också finnas funktioner för flödeskontroll och felhantering för ökad tillförlitlighet. 3.Nätskiktet Detta skikt ansvarar för kommunikation över ett nätverk som kan bestå av flera noder. Därför är det viktigt att protokollet i detta skikt ser till att rätt paket kommer fram till rätt mottagare. Det finns även funktioner för att hitta den snabbaste vägen för data som skickas. 4.Transportskiktet Ser till att data kommer fram till mottagaren i rätt ordning. Den har även adresseringsfunktio- ner så att data kommer fram till rätt applikation - detta medför att flera applikationer kan användas samtidigt av mottagaren. Skiktet fem, sex och sju ansvarar för hur dialog mellan datorer synkroniseras, hur data framställs respektive kopplingen av nätverksprocess till applikationer[4]. För att kunna uppfylla hårda reatidskrav ligger de flesta fältbussprotokoller i datalänkskiktet. Genom att använda denna modell kunde olika lösningar systematiskt jämföras och sållas bort i genomförandet. 5 2.2.1 Fältbussar Eftersom kraven är olika har också seriella bussar av olika typer utvecklats. Några exempel av de olika fältbussarna finns i figur 2.3. Några fördelar respektive nackdelar med fältbussar jämfört med traditionell överföring via en ledare per in/-utsignal är minskad kablage och flexibel installation respektive fördröjd dataöverföring och utökad komplexitet. Fördröjningen beror på bland annat hur många enheter är kopplade till en styrenhet, kabellängd samt på fältbussens access metoder. Den tiden det tar för data som skickas från styrenheten till en annan enhet att skickas tillbaks till sändaren kallas för cykeltid. 2.2.2 Accessmetoder - master/slave Det finns olika principer för hur en nod (enhet i nätverket) får åtkomst till nätet - vanligast förekommande metod är s.k. Polling, dvs en master-slave uppsättning: en masterenhet och ett antal slavarenheter i nätverket. Mastern lämnar och får data från sina slavar genom att kontakta dem i tur och ordning - genom att ha exakt mängd datautbyte med varje slav blir denna åtkomsttyp tidsdeterministisk. 2.2.3 Cykeltid och realtidskrav Med cykeltid, i samband med industriella fältbussprotokoller, menas den tiden det tar för masternoden att skicka och få tillbaka från samtliga slavnoder. Cykeltiden är ett fast tidsin- tervall och sätts då busssystemet konfigureras. Faktorer som kan påverka cykeltiden är antal uppkopplade slavnoder samt fördröjning i nätverket. Figur 2.3: Olika fältbussar. 6 2.3 Protokoll Ett protokoll som tidigt i förstudiet identifierades som ett flexibelt och väldigt användbart protokoll - i alla nivåer i en fabrik - var Ethernet-protokollet. Detta protokoll har fördelen att det ligger vid skikt två dvs lägsta förutom det fysiska skiktet. 2.3.1 Ethernet Ethernet-kommunikation blir allt vanligare som kommunikationssätt även inom automations- anläggningar. Det visar sig att industriell Ethernet har gått förbi traditionella fältbussar då antalet nya installerade noder i industrin räknades under 2018, enligt en studie gjort av HMS Networks [5]. Detta kan ses i figur 2.4. Från samma figur kan en ökning av trådlösa överföringsmetoder i industrin identifieras. Figur 2.4: Industiell Ethernet är nu större än traditionella fältbussar! [5] Största fördelen med Ethernet är att kunna ansluta till Internet dvs att enkapsulera flera skikt i OSI-modellen. Data som överförs från sändare till mottagare kan tänkas vara ett meddelande av en viss längd som kan transporteras i paket. Via Ethernet kapslas paket in i en Ethernetram tillsammans med annat viktig data som information om IP, TCP/UDP och själva datan som skickas. Figur 2.5 visar en typisk Ethernet-ram. Figur 2.5: Ethernet TCP/IP-ram. 7 Ethernetprotokollet har tre grundläggande beståndsdelar: hur data överförs fysiskt och villkor som gäller för varje media; regler för hur varje nod har rätt att kommunicera, s.k. acessmetoder; Ethernetramens innehåll - MAC-adresser till sändare och mottagare, vilken typ av data som skickas, data och slutligen en checksumma för att kunna upptäcka avvikelser i överföringen på grund av störningar mm. Nackdelen med Ethernet är att det inte går att skicka Ethernet-ramar över ett 5G-nätverk utan ett annat protokoll. 2.3.2 PPP och L2TP Point-to-Point Protocol (PPP) är ett protokoll som ligger i datalänkskiktet, skikt ett i OSI- modellen och som används för att upprätta en länk mellan två ändpunkter. Layer Two Transfer Protocol (L2TP) är en utökning av PPP-protokollet. L2TPanvänder sig av den generella inkapslingsmetoden hos PPP för att skicka paket från ett främmande protokoll över ett IP-nätverk. Detta innebär att paket från det främmande protokollet kan kapslas in i ett UDP- eller TCP-paket. Detta är väldigt relevant eftersom mobila nätverk inte stödjer Ethernet. Figur 2.6: Figuren visar ett IP-paket då man använder sig utav en L2TP-tunnel. Med L2TP-tunneln blir det möjligt att skicka Ethernet-ramar genom 5G. Användaren av en L2TP-tunnel upprättar en länk i datalänksskiktet och använder den länken för att skicka ramar från det främmande protokollet. Eftersom att Ethernet är en IEEE 802.2 standard och 5G är en 3 Generation Partnership Project(3GPP) standard går det inte att skicka Ethernet-ramar över ett 5G-nätverk ännu men möjligheten kommer att inkluderas i senare versioner. 2.3.3 TCP - Transmission Control Protocol Protokollet är ett sätt att skicka trafik mellan olika datorer. Tillsammans med UDP-protokollet kallas dessa två för transportprotokoll. Detta eftersom de styr över hur data skickas över nätverket [6]. TCP har inbyggda funktioner som säkertställer att data kommer till mottagaren i rätt ordning och om den inte kommer fram skickas den igen automatiskt. Detta gör att ingen data förloras när den skickas via TCP-protokollet över ett nätverk. Nackdelen med detta är att det blir långsammare trafik via nätverket på grund av alla extrafunktioner som finns implementerade i protokollet. 2.3.4 UDP - User Datagram Protocol Protokollet är betydligt enklare än TCP utan den kontroll av felfri överföring som erbjuds av TCP. Här ligger fokus på att det ska gå snabbt vilket innebär så lite overhead som möjligt och inga omsändningar. Användningsområdet är därför realtidsapplikationer där dataöverföringen är tidsrelaterad. I automationssammanhang är operatörssystem med realtidsövervakning av processer över Ethernet en typisk UDP/IP-applikation [3]. 8 2.3.5 Websockets En enkel beskrivning av vad Websockets-protokollen innebär ges av Mike Lara [7] i artikeln som han skriver om Websockets för IoT och realtidswebb: Websockets är ett protokoll som möjliggör låga svarstider, bidirektionell samt permanent kommunikation via en enda TCP kanal mellan en klient och en server. Några exempel på var Websockets används i verkligheten är: realtidsuppdatering av data på en hemsida, realtidssamtal, videokonferenser, IoT övervakning samt många andra tillämpningar där data fås in och behöver ständigt uppdateras. Websockets gör det möjligt att uppdatera data på en webbsida till exempel, utan att behöva ladda om sidan varje gång ny data uppdateras. En av skillnaderna mot till exempel HTTP- eller AJAX-protokoll som har används tidigare i webbsammanhang är att med Websockets behöver inte klienten initiera kommunikationen genom att göra en begäran till servern först sedan kan klienten begära en gång till för att hämta data från servern. Dessutom när HTTP används så kan inte servern skicka data till klienten utan att klienten först har begärt att data ska skickas till den. Detta skapar onödig fördröjning i realtidsapplikationer och samtidigt behövs mer bandbredd i jämförelse med Websockets. Varje enstaka byte som kan optimeras bort är viktig när en applikation där tusentals givare kopplas upp och data måste uppdateras i realtid. 2.3.6 RWS och REST-API REST är ett IT-arkiktektur begrepp som beskriver hur maskin-till-maskin kommunikation utförs med nuvarande internetinfrastruktur. Webbtjänster är egentligen speciella servrar som stödjer t.ex. webbsidor eller applikationer. Klientprogram använder API (Application Programming Interface) för att kommunicera med webbtjänsterna. En API exponerar data och funktioner för att underlätta kommunikationen mellan olika datorprogram. En webb-API är det som lyssnar och svarar på klienternas begäran. I figur 2.7 kan vi se hur en enkel förfråga/svar kommnunikation sker mellan en klient och en server. Figur 2.7: Illustration på dataöverföringen med REST-API. RWS(Robot Web Services) använder HTTP som drivande protokoll vilket i sin tur använder URL och olika kommandon för att skriva och läsa data. En URL, som känd, identifierar en hemsida till exempel: www.google.com, men den kan även identifiera en IO-signal som: ’127.0.0.1/rw/iosystem/signals/DO1’. Figur 2.8 visar de olika sätt som finns tillgängliga för att kunna hämta och skriva data till robot-kontrollern. Klienterna behöver inte fråga efter data från servern utan när någon ändring sker i en variabel så skickas detta automatiskt till lyssnande klienter som en ny händelse. Även Websockets protokollet kan användas för att till exempel prenumerera på olika händelseändringar i roboten. 9 Figur 2.8: Bild som visar olika protokoll för att kommunicera med robot-kontrollern. 2.3.7 5G New Radio (NR) Nästa generation av mobila nätverk kallas 5G, eller NR som står för New Radio, och det är en uppgradering av befintlig 4G (LTE) nätverk som i skrivande stund (sommaren 2019) har börjat lanseras i ett tidigt stadie för allmänheten. Det som gör 5G speciellt är bland annat hundra gånger snabbare överföring av datatrafik jämfört med 4G samt mycket mindre fördröjning i nätverket. Ericsson nämner i en rapport från juni 2019 att antalet 5G prenumerationer kommer nå 1.9 miljarder, 35 procent av trafiken kommer använda 5G som transportmedium och upp till 65 procent av den globala populationen kommer ha 5G täckning tills slutet av 2024 [8]. Nedan kommer en lista med viktiga egenskaper som 5G stödjer eller kommer stödja i framtiden [9]: • Låg energiförbrukning • IP-baserat paketnät • Maskin-till-maskin-kommunikation (M2M) • Network slicing - semi-privata nätverk • Ultra-reliable-low-latency communication (URLLC) • TSN (Time Sensitive Networking) • Skicka Ethernet-ramar De viktigaste egenskaperna som behövs för vårt ändamål är M2M, URLLC som innehåller TSN kompabiliteter och att kunna skicka Ethernet-ramar. Dessa egenskaperna kommer tidigast släppas under Release 16 och Release 17 enligt 3GPP [9]. Den stora förändringen av 5G inom industrin är att automatisera det som tidigare inte kunde automatiseras på grund av kablarna. Högre flexibilitet och tillförlitlighet kommer möjliggöra för högre grad av automation i framtidens industrier. 10 Men en viktig aspekt som måste tas hänsyn till är övergången av dagens PLC kommunikation från industriellt Ethernet till 5G. Enligt en studie gjort av Dr. Jens Jakobsen så kan 5G ersätta PLC kommunikationen i stora drag men inte ersätta rörelsestyrningen. Figur 2.9 visar de olika cykeltiderna för de största Ethernetbaserade protokollen. På samma bild visas också att 5G måste kunna skicka Ethernet-ramar eftersom endast två stora protokoll är baserade på TCP/IP eller UDP/IP stacken likt 5G [10]. Figur 2.9: Dagens Ethernetbaserade protokoll [10] 2.4 Mjuk- och hårdvara 2.4.1 Programmable Logic Controller (PLC) PLC är speciellt utvecklade, robusta datorer som används för att styra olika tekniska processer. De består av en processor och decentraliserade I/O moduler, vilket kan vara såväl digitala som analoga ingångs- och utgångsmoduler. PLC arbetar cykliskt dvs den läser av ingångarnas värden, utför programmet och lägger ut uppdaterade värden på utgångsportarna. PLC som valdes för detta projekt var ett av ABBs PLC:er, nämligen PLC:t VAC500 - som finns både i fysiskt- och mjukvaruform (SoftPLC). VAC500 kan köras virtuellt dvs en process eller robot kan styras genom att exekvera PLC-programmet i en vanlig Windows miljö. 2.4.2 Automation Builder Denna mjukvara från ABB används som gränsnitt för att kunna konfigurera, programmera och felsöka VAC500. Denna mjukvara använder Controller Development Systems (CodeSys) - ett utvecklingsmiljö inom den internationella industristandarden IEC 61131-3 - som program- meringsgränssnitt. 11 2.4.3 Codesys’ PLCHandler PLCHandler är en API och bibliotek från Codesys utvecklare, som används för att externt kunna komma åt variabler för en kontroller eller symboler från PLC:t. Dessutom tar PLCHandler hand om interprocesskommunikation mellan VAC500 och andra delar av systemet. 2.4.4 RobotStudio För att kunna simulera en robot används ABB:s egna programvara RobotStudio. Den har en inbyggd styrenhet som beter sig som en verklig robotstyrenhet. Detta gör att om själva programmet fungerar i simuleringen så kommer den i slutskedet även att fungera i verkligheten. Det finns olika sätt att kommunicera med ABB:s robotar och de tre vanligaste metoderna visas i figur 2.10. De olika lagren visar även bakomliggande protokoll som används för att etablera kommunikationen. Figur 2.10: Bild som visar olika metoder för att kommunicera med ABB:S robotstyrenhet. Genom att använda Robot Web Services(RWS)[11] API (RobotWare version 6.08.01) som finns tillgänglig på ABB:s hemsida kan följande processer utföras: • Läsning/Skrivning till I/O-signaler • Läsning/Skrivning av data från RAPID-moduler • Starta/Stoppa/Starta om RAPID-moduler • Prenumerationer, till exempel när någon variabel ändras (WebSocket) • Starta eller stoppa motorerna Dessa och några andra funktioner kan åstadkommas via HTTP och WebSockets som använder TCP protokollet för kommunikation mellan server och klient. Användaren behöver endast programmera klienten som ansluter sig till den inbyggda servern i styrenheten. Att kommunicera med roboten blir då betydligt enklare men åt andra sidan kan det förekomma högre svarstider genom att använda den här uppsättningen. Mer information om RWS finns beskrivet i detalj på ABBs hemsida [11]. 12 Nästa lager i figur 2.10 visar RAPID socket kommunikation. Här skickas meddelanden mellan en klient och server. Dessa meddelanden kan sedan omvandlas till RAPID-instruktioner för att styra roboten. En hantering av inkommande meddelanden samt programmering av både klient och server till styrenheten ska utvecklas vilket medför ytterligare tid. Mer kunskaper om ABB:s egna programmeringsspråk RAPID behövs för att sätta upp kommunikationen mellan en server och en klient. Svarstiderna här är lägre jämfört med RWS eftersom autentiseringen görs endast en gång då en ny socket upprättas, sedan kan meddelanden skickas mellan klient och server utan extra tillägg. Vidare i lager 3 så kommer ’Google Protocol Buffers’ som används mest till direkt rörelsekontroll av roboten. Här används UDP som bakomliggande protokoll eftersom kommunikationen ska ske så snabbt som möjligt. För att komma åt funktionen behöver EGM (Externally Guided Motion) valet finnas tillgängligt i styrenheten. Detta kräver en extra licens. 2.4.5 Machina Machina är ett öppen källkod program skrivet i .NET, dock kan även andra programmerings- språk användas för att kommunicera med en robot via ramverket. Machina är ett ramverk som underlättar människa till robot uppkopplingen genom att bidra med ett visuellt gränssnitt för användaren och på så sätt mycket lättare koppla sig till robotkontrollern och utföra rörelser samt läsa/skriva till I/Os. Projektet är dock i start-up fasen och en hel del funktioner är inte testade ännu. Om ramverket fungerar som det ska kommer den implementeras för att kontrollera en ABB- industrirobot via 5G i realtid med hjälp av en server-klient TCP-kommunikation via 5G. Enligt utvecklaren har de testat att kontrollera en stor industrirobot från ABB med hjälp av en vanlig handkontroll via ramverket. Dock har de kopplat roboten med vanliga Ethernetkablar, en video på detta finns tilllagt på YouTube som visar detta [12]. 13 3 Metod Detta projekt kan indelas i två stadier: första stadiet utgör en förstudie där förra årets hårdvarulösning ska försöka återskapas och cykel-tidsmätningar utföras och andra stadiet, som kan indelas vidare i tre ytterligare steg där alternativa lösningar kommer att undersökas och utvecklas. 3.1 Första stadiet Första stadiet utgör kärnan i detta projekt, då en fungerande hårdvarulösning med en medellåg cykeltid anses vara av ytterst vikt att fastställa i ett tidigt skede av projektet. Därmed möjliggörs även en eventuell vidareutveckling av den befintliga hårdvaran. Beroende på kompatibiliteten mellan 4G och 5G samt huruvida ett 5G modem finns tillgänglig, kan lösningen snabbt testköras med 5G då uppsättningen väl är i drift. Första stadiets delkomponenter: • Raspberry Pi med Linux, används som nätverksbrygga • 4G eller 5G Modem • Laptop kopplad till ett virtuellt styrsystem • Kommunikation med RobotStudio. En L2TP tunnel kommer att konfigureras med avsikt att skicka Ethernet-ramar via mobila nätverket. En fungerande mjukvarulösning med PLCHandler (tidigare mjukvarulösning som skickar signaler från styrsystemet) och det mjukvarubaserade fältbussprotokolet OpenPowerlink kommer att implementeras. 3.2 Andra stadiet Implementera en annan kommunikationprotokoll mellan ABBs industrirobot och hårdvarulös- ningen. Detta görs via Robot Web Services (RWS) som är ett platformoberoende protokoll baserat på Representational State Transfer (REST) vilket är en Application Programming Interface (API). Detta kan underlätta och möjliggöra lättare och snabbare kommunikation till och från industriroboten. RobotStudio kommer användas för att simulera ABB roboten som kommer användas vid senare testning i verkligheten. Programvaran samt licens fås från ABB. Överföringen via 5G/NR till och från hårdvarulösningen kommer implementeras antingen via en tunnel som tidigare examensarbete eller via TCP/IP. Dock så kommer även andra överföringsmetoder att analyseras så att den bästa metoden identifieras och implementeras. 14 Signaler från styrsystemet kommer testas och programmeras så att de kan tas emot från hårdvarulösningen med tillhörande protokoll. Här kommer antingen OpenPowerlink användas eller annan protokoll för överföring beroende på analysen som utförs och möjligheterna som finns. Alla kommunikationstester kommer utföras individuellt för att sedan se om det finns någon flaskhals i systemet. Genom att dela på systemet i flera olika delar kan flaskhalsen lättare identifieras. 3.3 Tredje stadiet Här kommer hela systemet testas i en simuleringsmiljö och om hela implementationen fungerar felfritt kommer den även att testas i verkligheten med alla ingående delar samt en industrirobot från ABB. Figur 3.1: Överföring av Ethernet-ram via L2TP-tunnel. [2] 15 4 Genomförande 4.1 Förstudie - Systemöversikt Det tänkta systemet består av två delsystem: molnet representerar en server i Ericssons serverkluster som kör både en speciellt utvecklad mjukvara och det virtuella PLC:t – detta delsystem utgör fältbussens ’Master node’ och får benämning master ; delsystem 2 består av ett modem och en Raspberry Pi som är konfigurerat på så sätt att den agerar som en nätverksbrygga mellan 5G-nätverket och fältbussen - detta delsystem utgör fältbussens ’Slave node’ och får benämning slave. Detta kan ses i figur 4.1. Figur 4.1: Systemöversikt för förra årets examensarbete som blev utgångpunkten för detta arbete. 4.1.1 Master Såväl det virtuella PLC:t som den utvecklade mjukvaran körs på en ’virtual machine’ – i detta fall både Windows och Linux. Det virtuella PLC som används i koncepttestet är ett mjukvarubaserat PLC från ABB. Mjukvaran implementerar både fältbussprotokollet OpenPowerlink samt ett API mot PLC:t. Mjukvaran har också till uppgift att mappa signalernas symbol-namn i PLC:t till motsvarande symbolnamn på fältbussen (PLC-handler). Styrsignalerna kapslas sedan in i en ethernetram och skickas in till L2TP-tunneln för överföring över 5G-nätet. 16 4.1.2 Slave Ett modem installerat på en RaspberryPi tar emot Ethernetramen från 5G-nätet som se- dan skickas vidare till rätt port för att kunna läsas av fältbussenheten - en enhet som kan kommunicera via det implementerade fältbussprotokollet, tex en modul med ingångs- och utgång-anslutningar eller en industrirobot. Därefter kan enheten (slave-nod) skicka svar till master-nod i omvänt ordning. 4.2 Procedur En RaspberryPi införskaffats med Linux och ett 4G-modem installerades. Vidare utveckla- des mjukvara i C++ som gjorde det möjligt att koppla sig mot det virtuella PLC:t m.h.a. PLCHandler-biblioteket. Det färdiga biblioteket användes som mall i utveckling av mjukvaran och enkel testfunktionalitet åstadkoms så att variabler kunde skrivas och läsas. Även om förstudien var givande för senare stadier i detta projekt valdes att avbryta då det insågs att det skulle bli svårt att implementera denna lösning på grund av att OpenPowerlink- protokollet inte stödjs av ABB-robotar och därför inte går att implementera i Smarta Fabrikers robotarna. 4.3 Syntes - Systemöversikt Även om OpenPowerlink-protokollet valdes bort, var det ändå rimligt att behålla vissa delar av systemet för vidare utveckling. Det virtuella PLC:t VAC500 ansågs vara ändamålsenlig, PL- CHandlers C++ bibliotek likaså. Nästa steg blev då att välja ett kompatibelt fältbussprotokoll som skulle kunna integreras i den hittills utvecklade mjukvaran. För en översikt av det tänkta slutgiltiga systemet se figur 4.2. 4.4 Mjukvarulösning 4.4.1 Val av fältbussprotokoll Det finns flera fältbussprotokoll riktat mot realtidsprocesser, de flesta är proprietära protokoll och kan innebära höga licensavgifter och expert-hårdvara för att upprätthålla snabba syn- kroniserade cykler. Valet av protokoll var begränsat till de som ABB-robotar stödjer vilket utesluter även ’öppna’ protokoll såsom OPC-UA och OpenPowerlink. I Smarta Fabriker används huvudsakligen PROFINET som övervägdes tyngst då det var viktigt för författarna att kunna ta fram en fungerande implementation. Att välja fältbussprotokoll blev en mer komplex och tidskrävande process än tidigare tänkt eftersom det råder låg kompatibilitet och lite standardi- sering i industrin. Därför övervägdes istället att använda befintlig internetsinfrastruktur som ett alternativ till befintliga fältbussprotokoller, i detta fall Websockets. Eftersom ABB är en intresserad aktör, bestämdes det, i diskussion med vår handledare, att ABB:s egna Robot Web Services skulle kunna användas för att ansluta oss till RobotStudios server samt att skicka och ta emot data till/från RobotStudio. Även om Socketsprotokollet ligger på skikt fem i OSI-modellen ansågs detta protokoll - i samband med de förväntade låga svarstider som 5G kommer att innebära - värt att undersöka vidare. 17 Figur 4.2: Översikt av hela systemet 4.4.2 Kommunikation med PLC:t För att kunna kommunicera med det virtuella PLC:t och därmed komma åt PLC:ts variabler användes API:t/biblioteket PLCHandler. Automation Builder utgör gränsnittet till VAC500, CodeSys används för att skapa styrprogram och körs in i Automation Builder. Två globala bool I/O variabler skapades i Codesys: DO1 och DI1 och exponerades genom att ändra inställningar in i CodeSys meny ”Project” -> ”Options” -> ”Symbol configuration”. Ett enkelt testprogram skapades där en utgångssignal sätts till TRUE och en tidsräknare sätts igång. Programmet inväntar sedan en ingångssignal för att då stanna räknaren om en sådan registreras. Detta program kan sedan laddas in till VAC500 genom att köra Virtual System Testing från menyn. Programmet behöver köras i Free running simulation, detta visas i figur 4.3. Figur 4.3: VAC500s gränsnitt Automation builder inställt på Virtual System Testing 18 Som tidigare nämnt var det smidigt att använda PLC:t VAC500 för styrning av roboten. Istället för det ursprungliga C++ program, användes istället en annan version av PLCHandler som skulle vara mer kompatibel med de olika Websockets implementationerna. Denna version bestod av ett C# bibliotek med inbyggd Interprocess-kommunikation och utökad funktionalitet t.ex. events, som är väldigt användbara för att uppmärksamma användaren på en förändring i någon av variablerna. En synkron ’polling’ av variablerna sker var millisekund med hjälp av en Timer-metod där de booleska variablerna i PLC:t läses och sparas så att nya värden jämförs cykliskt med tidigare värden och att förändringar på deras värden upptäcks. Då en förändring registreras skapas en event och den variabel vars värde ändrats skickas vidare till nästa del av programmet. 4.4.3 Websocketsservern Ett enkelt Websocketsserver med låg funktionalitet skapades både i C++ och sedan i C# för att kunna skicka och ta emot data till en klient. Figur 4.4: UML-diagram för kommunikation mellan PLC:t och Websockets 19 4.4.4 RobotStudio RAPID koden som användes för att påverka och läsa I/O är följande (Koden är lite förenklad): MOVEL Target_10; !Hem-läget WaitDI Start_seq,1; !Vänta tills Start_seq går från 0 till 1 SetDO RobotReady,1; !Sätt RobotReady till 1 MoveL Target_20; !Gå till nästa target med robotarmen Reset RobotReady; !Sätt RobotReady till 0 MoveL Target_10; !Gå tillbaka till Hem-läget ’!’ är tecknet för kommentarer i RAPID-språket. Nästa steg för att kunna koppla upp sig till en virtuell robotkontroller ska följande egenskaper kontrolleras i förhand: 1. Kontrollera att brandväggen på datorn tillåter kommunikation från andra enheter. Stäng av brandvägen om du har den möjligheten. 2. En virtuell kontroller tillåter endast kommunikation från den lokala datorn som standard. För att ändra detta måste du lägga in IP-adressen till datorn som du försöker fjärrstyra roboten ifrån. Detta görs i en konfigurationsfil som finns under: ”C:\Users\{user}\AppData\Roaming\ABB Industrial IT\Robotics IT\RobVC\vcconf.xml” Den kan se ut som nedan: Om filen inte finns så skapa en fil ’vcconf.xml’ och lägg till informationen ovan. 3. Skapa en ny station med robotkontroller i RobotStudio och välj en robotmodell. I vårt fall anvädes YuMi roboten(IRB 14000) och RobotWare versionen 6.08.01.00 eftersom den stationen kunde sedan testas på en riktig YuMi robot som finns tillgänglig hos Ericsson. 4. Kontrollera att den nya stationen har alternativet ’616-1 PC Interface’ installerad under Virtual Controller>Change Options>Communication. 5. Skapa globala I/Os under rubriken. Controller>Configuration>I/O System>Signal och namnge en digital ingång (Start_seq kallas den i vårt fall, se bilaga A för fullständig klientkod) samt en digital utgång (RobotReady). Se till att ’Access Level’ på variablerna är ’All’. 6. Starta om kontrollern och nu kan de nya variablerna som skapades i föregående steg övervakas och deras värden kan läsas samt ändras från RWS-klienten. 20 4.4.5 Machina.NET Machina-biblioteket användes under projektet för att upprätta en kommunikation med robot- kontrollern. För att komma igång med Machina.NET följdes instruktionerna från den öppna GitHub-koden [13]. Ett exempel från biblioteket provades och RobotStudio konfigurerades så att en YuMi robot kunde kontrolleras via kommandon från tangentbordet. Detta användes under en presentation/workshop hos Ericsson för att visa möjligheterna av 5G. YuMi-roboten som fanns på datorn simulerades och dess armar kontrollerades från en annan dator via tangentbordet. Detta projekt använde TCP/IP sockets för kommunikation men krävde att RAPID-funktioner skulle läggas in i robotkontrollern för att fungera. Eftersom tiden var begränsad valde vi att inte fortsätta med biblioteket eftersom vi endast skulle skapa en funktion som beräknar tiden en cykeltid tar. Istället ansågs det vara smidigare att skapa en Python-klient för att kunna ansluta till RobotStudio. 4.4.6 Konfiguration av Python-script Filen ’RWPanelSubscriber.py’ som finns i bilaga A ska startas men innan den kan köras behöver dessa steg följas (Python 3.7): 1. Installera senaste requests biblioteket genom att använda antingen ’easy_install re- quests’ eller ’pip install requests’ 2. Installera websocket ws4py biblioteket genom att använda antingen ’easy_install ws4py’ eller ’pip install ws4py’ 3. Ändra den globala variabeln ’ip_adress’ till IP-adressen för robotkontrollern. 4.4.7 Kommunikation mellan Python och RobotStudio Figur 4.5 visar hur Python-scripen är kopplade till varandra samt de viktigaste funktionerna som användes. Nedan kommer även en beskrivning av hur en koppling till RobotStudio utförs med hjälp av Python. En typisk utskrift när RWPanelSubscriber.py startas och en kommunikation med roboten upprättas ser ut som nedan: ———————————————– Initial Events: RobotReady state: 0 Start_seq state: 0 Web Socket connection established. ———————————————– Sedan om dessa variabler ändras kommer den nya värdet skrivas ut löpande i realtid. Filen ’run_loop.py’ som finns i bilaga B ska köras parallellt efter en lyckad uppkoppling. Genom att ändra variabeln no_runs kan antalet cykeltester bestämmas. Därefter utförs automatiskt en sekvens där ’Start_seq’ variablen sätts till ’1’ och roboten gör en enkel uppgift som ska programmeras av användaren. Efteråt ska roboten skicka tillbaka en kvittens genom att sätta variabeln ’RobotReady’ till ’1’. En cykeltid har då utförts och tiden det tog för en HTTP POST request sparas i filen ’cycle_time.txt’. 21 Figur 4.5: Diagram som visar Python kod som användes för kommunikation mellan RWS klient och RWS server. Observera att tiden det tar för roboten att svara skrivs också till samma fil men i en annan kolumn. Dessa adderas sedan för att få den fullständiga cykeltiden. För att se ett exempel på hur filen ’cycle_time.txt’ ser ut och de olika kolumnerna separerade av ett kommatecken, se bilaga D. Filen ’test_results.py’ bearbetar informationen som finns i file ’cycle_time.txt’. Den adderar de två olika kolumnerna och sedan summerar varje rad. Därefter divideras den totala tiden med antalet cykeltester, alltså antalet rader, så att ett medelvärde fås. Detta resultat skrivs ut i terminalen. 4.4.8 Genomförande av test mellan klient och server För att kunna testa 5G-nätet så tidigt som möjligt så skapades en uppsättning likt den i figur 4.7. Observera att den cykeltid som var viktigast för oss att mäta i första hand, är mellan RWS klienten från ena datorn till RWS servern som finns på en annan dator. Den andra datorn kör RoboStudio och simulerar en riktig robotkontroller från ABB. Båda dessa datorerna är kopplade till 5G-nätverket via Sierra Wireless modemen. Som figur 4.7 visar utfördes cykeltidtesterna mellan RWS KLIENTEN och RWS SERVERN som finns inbyggd i robotkontrollern. Efter att en virtuell robotkontroller har startats i RobotStudio så kan cykeltesterna utföras. Sekvensen som är beskrivet i figur 4.6 visar hur I/O signalerna påverkas från Python-scripten samt även hur de nollställs för att kunna skapa en oändlig loop. För att kunna få ett tillförlitlig resultat utfördes hundra cykeltester och resultatet av dessa kan ses i en tabell under Resultat. Genomförande av cykeltester gjordes även via WiFi, LAN och att köra simuleringarna lokalt på en och samma dator utöver det viktiga testet via 5G-nätet. 22 Figur 4.6: Sekvens för att utföra automatiska tester 4.4.9 Test av hela systemet Figur 4.7: Testuppsättning 23 5 Resultat Målet var att utveckla en prototyp för att kunna testa kommunikationen mellan ett virtuellt PLC och en industrirobot via 5G-nätet samt att mäta dess cykeltid. Med systemet som utvecklades är det möjligt att styra de flesta ABB-robotar om motsvarande controller (RobotWare 6.08.01) används. Detta på grund av att den virtuella controller beter sig på samma sätt som den verkliga. Koncepttestet testades virtuellt i RobotStudio och cykeltidstester utfördes. Koncepttestet kopplades även till en verklig YuMi-robot men inga cykeltidstester utfördes då 5G-täckning i lokalen ansågs vara otillräcklig. Tabell 5.1 visar resultatet från de slutgiltiga testerna som utfördes under projektets gång. Det är viktigt att poängtera att 5G inte är färdigimplementerad än och 5G-täckningen var därför inte konsekvent under projektets gång. Den minsta fördröjningen som mättes via 5G var i genomsnitt 70 ms. Fördröjningen mättes genom att utföra ett antal ping komandon från ena datorn till den andra. Observera också att eftersom datorerna inte hade samma gateway så kunde inte kommunikationen ske direkt mellan datorerna. Då nedladdnings- och uppladdningshastigheten testades via tjänster som ’fast.com’ eller ’bredbandskollen.se’ upptäcktes att - då vi använde de givna 5G modemen - medelvärdet av testerna låg runt 100 Mbit/s ned och 5 Mbit/s upp. Observera den låga uppladdningshastigheten. Viktigt att ha i åtanke är även att modemen, vilka var av typen ’Sierra Wireless EM6575’, egentligen är ’4G LTE Advanced’ modem som har låsts till framtida 5G-frekvenser (Band 42 / 3.5 Ghz). 5.1 Tabeller Antal cykeltester Medelvärde (ms) Fördröjning/ping(ms) Lokalt på samma dator 100 15.0208 0 LAN 100 21.0237 5 Trådlös nätverk (WiFi) 100 38.3158 15 Via 5G (NR) 100 238.25 70 Tabell 5.1: Resultat från alla utförda tester då kommunikation mellan robotcontrollern och en klient testades 24 Antal cykeltester Medelvärde (ms) Fördröjning/ping(ms) Via 5G (NR) 100 563 70 Tabell 5.2: Resultat från kommunikation mellan PLC och RobotStudio via 5G 5.2 Mjukvara Mjukvaran som utvecklades är skriven i C# och Python-script. Detta program uppträttar kommunikation mellan ett virtuellt PLC och en Websockets-server via mobila nätverk. Kom- munikation in till RobotStudios server hanteras med hjälp av Robot Web Services. Websockets används som alternativ till de befintliga fältbussprotokollen. 5.2.1 Kommunikation med PLC:t Först behöver en thread sättas upp genom att skapa en instance av PLCHandlerthread och att knyta den StateChanged event till denna instance. Om PLC:ts state ändras så körs en metod som skriver ut PLC:ts nya state. s t a t i c PLCHandlerThread SetUpThread () { var hndl_thrd_obj = new PLCHandlerThread () ; hndl_thrd_obj . StateChanged += Hndl_thrd_obj_StateChanged ; return hndl_thrd_obj ; } pr ivate s t a t i c void Hndl_thrd_obj_StateChanged(PLCHandlerThread .PLCHANDLER_STATE state ) { Console . WriteLine ( ” State Changed ! ” + state . ToString () ) ; } Listing 5.1: PLC:ts nuvarande läge Sedan kan PLCHandler ansluta till VAC500 genom att använda metoden InitPLCHandler med rätt konfigurationsfil. public void InitPLCHandler () { PLCIniFile i n i F i l e = new PLCIniFile ( ”PLC_Id0” , ” 127 .0 .0 .1 ” , true ) ; i n i F i l e . PLCIpAddress = new KeyValuePair(” loca lhos t ” , 1200) ; InitPLCHandler ( i n i F i l e ) ; } Listing 5.2: Anslutning till PLC:t Därefter körs en Timer som läser variablernas värden cykliskt - varje millisekund - för att hålla koll på förändringar i variablernas värden. När en förändring registreras startas tidtagningen och om värdet på ut-variabeln är ’1’ körs Python-scriptet. Då in-variabel blir ’1’ skrivs det värdet till PLC:t. 25 public s t a t i c void TimerProc( object state ) { Stopwatch stopWatch = new Stopwatch () ; object o = hndl_thrd_obj . ReadSymbol( ” .DO1” ) ; s t r ing DO1 = o . ToString () ; i f (DO1 == ”TRUE” ) DO1 = ”1” ; e l s e DO1 = ”0” ; i f (DO1 != oldValue ){ oldValue = DO1; stopWatch . Start () ; i f (DO1 == ”1” ){ s t r ing DI1 = ExecPython(DO1) ; i f (DI1 != ”0” ){ DI1 = ”TRUE” ; hndl_thrd_obj . WriteSymbol ( ” . DI1” , DI1) ; }}} stopWatch . Stop () ; Listing 5.3: Räknare som läser av variablernas värden Metoden ReadSymbol används för att kunna läsa variablerna. På liknande sätt fast med metoden WriteSymbols istället, kan variablerna tilldelas värden. 5.2.2 Websockets Funktionalitet där det gäller Websockets åstadkoms genom att exekvera python-scriptet ifrån C#-programmet. Då en variabel uppdateras, skickas en HTTP-request och en Websockets- anslutning kan då upprättas där scriptet lyssnar på förändringar i variablernas värden. set_Start_seq = requests . post ( ’ http ://{0}/rw/iosystem/ s igna l s /Start_seq? action=set ’ . format ( ip_adress ) , data=data , auth=HTTPDigestAuth( ’ Default User ’ , ’ robot ics ’ ) ) i f set_Start_seq . status_code == 204: def subscr ibe ( s e l f ) : payload = { ’ resources ’ : [ ’ 1 ’ , ’ 2 ’ ] , ’ 1 ’ : ’ /rw/iosystem/ s igna l s /Start_seq ; s tate ’ , ’1−p ’ : ’ 2 ’ , ’ 2 ’ : ’ /rw/iosystem/ s igna l s /RobotReady ; state ’ , ’2−p ’ : ’ 2 ’ } resp = s e l f . s e s s ion . post ( s e l f . subscription_url , auth=s e l f . digest_auth , data=payload ) pr int ( ” I n i t i a l Events : ” ) print_event_init ( resp . text ) i f resp . status_code == 201: s e l f . l ocat ion = resp . headers [ ’ Location ’ ] s e l f . cookie = ’−http−sess ion −={0}; ABBCX={1} ’ . format ( resp . cookies [ ’−http−sess ion− ’ ] , resp . cookies [ ’ABBCX’ ] ) return True e l s e : pr int ( ’ Error subscr ib ing ’ + st r ( resp . status_code ) ) return False def start_recv_events ( s e l f ) : s e l f . header = [ ( ’ Cookie ’ , s e l f . cookie ) ] s e l f . ws = RobWebSocketClient ( s e l f . locat ion , protocols =[ ’ robapi2_subscription ’ ] , headers=s e l f . header ) s e l f . ws . connect () s e l f . ws . run_forever () def c l o se ( s e l f ) : s e l f . ws . c l o se () Listing 5.4: Kod för att prenumerera på RWS 26 För att kunna anropa Python-scriptet används funktionen ExecPython() public s t a t i c s t r ing ExecPython( s t r ing fromPLC) { st r ing DO1 = fromPLC; // create process in fo var ps i = new ProcessStartInfo () ; ps i . FileName = @”C:\ Users\edslndr\AppData\Local\Programs\Python\Python37−32\python . exe” ; //provide s c r i p t and arguments var s c r i p t = @”C:\ Users\edslndr\PycharmProjects\RS_sub_write\ src \run_loop_2 . py” ; //var s c r i p t = @”C:\ Users\edslndr\PycharmProjects\RS_sub_write\ src \RWPanelSubscriber . py ” ; ps i . Arguments = $”\”{ s c r i p t }\” \”{DO1}\”” ; //Process conf igurat ion ps i . UseShellExecute = f a l s e ; ps i . CreateNoWindow = true ; ps i . RedirectStandardOutput = true ; ps i . RedirectStandardError = true ; //Execute process and get output var e r ror s = ”” ; var r e s u l t s = ”” ; using ( var process = Process . Start ( ps i ) ) { e r ror s = process . StandardError .ReadToEnd() ; r e s u l t s = process . StandardOutput .ReadToEnd() ; Console . WriteLine ( ”ERRORS” ) ; Console . WriteLine ( e r ro r s ) ; } //Display to output return r e s u l t s ; } Listing 5.5: Metoden som används för att exekvera Python-scriptet De olika metoderna kan sedan anropas i Main-funktionen. s t a t i c void Main( s t r ing [ ] args ) { hndl_thrd_obj = SetUpThread () ; hndl_thrd_obj . InitPLCHandler () ; Timer t = new Timer(new TimerCallback (TimerProc ) ) ; t . Change(1 , 0) ; Console . ReadKey() ; } Listing 5.6: Main-funktionen 5.2.3 Diagram för hela systemet Figur 5.1 visar det slutgiltiga systemet. Angivna är de viktiga funktionerna som användes för att upprätta en kommunikation mellan PLC:t och RobotStudio samt att skriva/läsa till/från PLC:t. Fullständig kod finns i bilagorna A, B och C. Filen ’cycle_time.txt’ finns i bilaga D. 27 Figur 5.1: UML-diagram över hela systemet 5.2.4 Besvarande av frågeställning Nedan besvaras studiens frågeställningar systematiskt, utifrån erhållna resultat: Vilket kommunikationsprotokoll är lämpligt att använda för mobila nätverk inom industrin? Inom tidsramen och med den utrustning som fanns tillgänglig inom projektet, kunde en lösning med RestAPI / Websockets tas fram för att kommunicera med ABB:s robotar. Dock uppfyller inte denna lösning de hårda realtidskrav som ställs inom industrin. Vilken cykeltid kan uppnås för enkla signaler då 5G används som transportmedium? Tabell 5.1 och tabell 5.2 visar cykeltiderna mellan robotcontrollern och python-scriptet (238 ms) respektive PLC:t (563 ms). Vilken hårdvara och mjukvara behövs för att uppnå tidskraven för kommunikation inom industrin? Proprietär hårdvara samt befintliga protokoll anpassade för just detta ändamål är vanligast. Om kommunikationen dock sker vid en tillräckligt låg nivå i mjukvaran, t.ex. om socketsservern skrivs i RAPID-kod inuti robotcontrollern, kan tidskraven möjligtvis uppfyllas. Detta för att fördröjningen i 5G-nätverket kommer ligga runt 1 ms och då kan de besparingar som görs i nätet kompensera för den relativt höga cykeltiden, med viss marginal. 28 6 Slutsats och diskussion Vi lyckades skapa ett system där styrsignaler skickades till en industriell robot via 5G. Observera att inga riktiga 5G-modem användes. Istället användes de nyaste 4G-LTE Advanced. Värt att nämna också är att modemen ställdes in på att endast använda band 42 (3.5 GHz) frekvensen. Cykeltiden för hela systemet uppfyllde inte kravet för realtids-processer, men om de utlovade svarstider som 5G skulle medföra faktiskt uppnås de kommande åren - kan detta system utgöra en realistisk lösning. Dock tror vi inte att just Robot Web Services kommer vara användbart i detta sammanhang. Dessutom kan vi räkna med en halvering på fördröjningen om ett PLC i molnet används, vilket bevisades i ett tidigare examensarbete [2]. Däremot kan en ökning av anslutna enheter försämra vårt systems prestanda avsevärt eftersom ett högre antal enheter kräver mer synkronisering, så att data från de olika enheterna inte krockar med varandra. Eftersom 5G är en ny teknik som fortfarande håller på att utvecklas försvårade det väldigt mycket för oss t.ex. då vi skulle installera modemen eller när vi skulle utföra tester. Detta på grund av inkonsekvent täckning och att förutsättningarna kunde ändras plötsligt när nätverket t.ex. uppdaterades. När 5G är lite mer etablerat eller åtminstone konfigurerat för just det användningsområde som det är avsett för, kan man med stor sannolikhet få ytterligare en minskning i svarstiderna. 6.1 Tillämpningsområden för 5G Även om realtidskravet för cykeltiden inte uppnåtts i detta arbete är det fortfarande rimligt att använda 5G på cellnivå där cykeltider på 100 ms accepteras, se figur 2.1. 6.1.1 Övervakning av processflöde och komponenter IIoT och industri 4.0 kommer att kräva ständig uppkoppling till Internet, det talas om att de flesta vardagliga föremål kommer att kunna hålla metrics om dess användning så att de kan anpassa sig till användaren. Ett vanligt föremål skulle t.ex. kunna mäta hur ofta och hur länge det används, när det behöver underhållas och dylikt. Dessutom skulle de olika föremålen kunna kommunicera med varandra. Detta uttrycker sig i industriella sammanhang på ett liknande sätt där olika givare och don kan kommunicera inte bara med varandra utan även centralt. Kommunikation mellan dessa kommer att underlättas avsevärt med en trådlös uppkoppling. 6.1.2 Självkörande enheter (AGV) Ett annat användningsområde som kommer att tjäna på trådlös uppkoppling är självkörande enheter som t.ex. transporterar material i en fabrik och eventuellt även människor. I dagsläget är det svårt att upprätthålla en konstant uppkoppling på grund av störningarna som uppstår 29 Figur 6.1: Olika användningområden med 5G [14] i industriella miljöer, men 5G lovar såväl högre bandbredd som privata frekvensband för att minska störningarnas påverkan. 6.1.3 Virtuellt PLC i molnet Mjukvarubaserade PLC:er visar hög potential och även om de inte kan användas för närvarande i processer med hårda realtidskrav, representerar de en viktig utveckling i att kunna centralisera flera PLC:er och därmed eliminera behovet av specialiserad hårdvara. 6.1.4 Fjärrstyrning Ett tillämpningsområde som vi inte hade tänkt på alls var i fjärrstyrning av robotar. Nya haptic enheter som ger återkoppling på t.ex. hur hårt eller mjukt ett föremål är litar sig på en stabil och fördröjningsfri anslutning för att kunna motverka användarens rörelse om denne stöter på något hårt föremål i programmet. 6.2 Framtidsutveckling av 5G 6.2.1 Frekvensband 5G kommer att kunna erbjuda ett brett frekvensspektrum och förväntas fungera mellan 700 MHz och 100 Ghz. Band 3 är benämningen för det vanliga LTE-nätverket och Band 42 anser det nya höga frekvensbandet. De höga frekvenserna har som nackdel att vågorna har svårt att ta sig igenom hårda medier t.ex. väggar. Fördelen är den förväntade höga bandbredden samt låga responstiderna. 5G har två olika typer av frekvensband, licensierad och olicensierad. 30 Figur 6.2: Hur det ser ut med logistik i en fabrik [8] Det olicensierade spektrumet kan användas av vem som helst, på ett liknande sätt som WIFI i dagsläget, det lisensierade sprektrumet å andra sidan är reserverat för implementation i valda anläggningar för att skapa en s.k. ’private network’ - detta förväntas minska störningar i industriella miljö avsevärt [15]. 6.2.2 Integration med annat teknik Det som är mest spännande är den utveckling som pågår just nu inom 5G just där det gäller realtidsaspekten. Version 17 av 5G specifikationen kommer att ha native-stöd för Ethernet utan att behöva tunnla sig fram. Dessutom kommer begreppet Time-Sensitive Networking (TSN) integreras, vilket kommer att föra industrin ett steg närmare det s.k. ultra-reliable low-latency communication (URLLC) [16]. 6.3 Vidare utveckling av det befintliga systemet 6.3.1 Framtidsutveckling av fältbussprotokoller Nya protokoll utvecklas löpande och även om de inte är helt nya, kan de återigen bli användbara för olika ändamål. Om man tänker på protokoll som ryms inom den befintliga internetinfra- strukturen, är ett exempel s.k. WebRTC (Web Real-Time Communication) som använder sig av Real-time Transport Protocol (RTP) för att hantera realtids-aspekten, vilket i sin tur använder sig av UDP för att kunna uppehålla den snabba kommunikationen som krävs [17]. Detta utvecklades ursprungligen för webb-baserade applikationer men kommer eventuellt kunna användas även för detta ändamål, även om den är skriven i C++ och JavaScript. Dessutom pågår förändringar i industrin. Vid det laget har rt-Labs släppt öppen källkod för ProfiNet-stacken som kan skicka Ethernet-ramar i andra skiktet i OSI-modellen och därmed uppfylla realtids-kravet. Den är skriven i C och kan snabbt bli en banbrytare i strävan mot standardisering inom industrin [18]. 31 6.3.2 Machina-biblioteket Innehåller mycket som är väldigt användbart och är dessutom skriven i C#, vilket gör det kompatibelt med vårt utvecklade program. Den använder sig av Sockets för kommunikation med RobotStudio men i detta fall skapas en Socket-server in i RobotStudio genom att skriva RAPID-kod. Jämfört med programmet som utvecklades i detta arbete så kan en Sockets-server användas för att upprätta kommunikation mellan roboten och klienten och därmed slipper man använda RWS, som verkar vara för långsamt för att kunna används i realtidsapplikationer. Något som är intressant att analysera i framtiden är huruvida detta bibliotek, eller åtminstone ett liknande upplägg, eventuellt kan sänka cykeltiden ytterligare. En fördel med detta bibliotek ät att styrningen av en robot kan göras med handkontroller via 5G och detta kan vara en intressant demo att visa upp. 6.3.3 Säkerhet och kryptering En viktig aspekt som behöver tas i anspråk är säkerhet. Upplägget som har utvecklas under detta arbetes gång innehåller inte någon kryptering av meddelanden som skickas över nätverket. Detta kan dock tilläggas utan större ändringar i systemet eftersom det går att använda HTTPS (Hypertext Transfer Protocol Secure) och WSS (WebSocket Secure). Detta innebär i praktiken att ett extra lager, TLS (Transport Layer Security), adderas och möjliggör säkrare transport över nätverket. 6.3.4 Miljö och hållbarhet Förhoppningen är att uppkopplade fabriker kan leda till en så pass stor effektivisering att det kan leda till en minskad miljöpåverkan - även om den totala produktionen eventuellt kan komma att öka. Som tidigare nämnt är övervakning av processflöden och komponenter en slags effektivisering där begreppet ”predictive maintenance” - som förutser när komponenter behöver service, vilket medför att fel kan åtgärdas direkt - eventuellt kan leda till återanvändning av vissa komponenter och maskindelar och på det sättet ge mindre spill i produktionen. Detta uttrycker sig också i att plötsliga stopp i produktionen därmed kan undvikas och på så sätt kan oplanerade stopptider minskas rejält. Dessutom är det virtuella PLC:t en utveckling som kommer att kunna ta över styrningen av processer som i dagsläget hade krävt flera PLC:er för att kunna styras. Detta har flera fördelar: det leder till minskad produktion av PLC:er, mindre resurser kan tilldelas till installationen av de olika PLC:er och slutligen kommer behovet av kablar i industriella miljöer minskas. En möjlig nackdel med trådlös kommunikation är att det medför konstanta radiovågor omkring människan, och i synnerhet med 5G:s ankomst kommer vågtätheten i samhället bli ännu högre. Det finns ingen fastställd process som tyder på att människans hälsa påverkas negativt av detta, men eftersom 5G kommer använda nya frekvensområden, behöver dess påverkan ändå undersökas. Myndigheter rekommenderar såväl framtida epidemiologiska studier som forskning för att karlägga påverkan av andra faktorer i samband med elektromagnetiska fält [19]. 32 Referenser [1] F. C. Mattern F. From the Internet of Computers to the Internet of Things. Springer, 2010. isbn: 978-3-642-17226-7. [2] O. Hall och R. Lindy. “Trådlös kommunikation över mobilt nätverk i industriell miljö”. Bachelor’s Thesis. Chalmers Tekniska Högskola, 2018. [3] O. Oesbeck. “Styr- och övervakningssystem”. Kompendium. 2019. [4] A. Ho. “Kommunikationen mellan två olika PLC:er med hjälp av trådlösa fältbussar”. Bachelor’s Thesis. Högskolan i Gävle, 2017. [5] H. Networks. Industrial Ethernet is now bigger than fieldbuses. url: https://www.hms- networks.com/press/2018/02/27/industrial-ethernet-is-now-bigger-than- fieldbuses. (accessed: 01.06.2019). [6] V. Beal. TCP-Transmission Control Protocol. url: https://www.webopedia.com/TERM/ T/TCP.html. (accessed: 28.05.2019). [7] M. Lara. Websockets for real time web and IoT applications. url: https://www.netburner. com/learn/websockets-for-real-time-web-and-iot-applications/. (accessed: 22.05.2019). [8] E. M. Report. The power of 5G is here and will continue to spread across the globe in the coming years. url: https://www.ericsson.com/en/mobility-report/reports/june- 2019. (accessed: 01.09.2019). [9] T. 3. G. P. P. (3GPP). 5G Releases. url: https://www.3gpp.org/release-15. (accessed: 04.09.2019). [10] D. J. Jakobsen. The benefits of 5G in the factory”. Whitepaper. Development Manager - HMS Labs, 2019. [11] Robot Web Services manual. REST API för kommunikation med kontrollern. ABB Group, 2016. url: http://developercenter.robotstudio.com/webservice/api_reference. [12] G. D. Castillo. Machina - Real Time Robot Control. Youtube. 2017. url: https://www. youtube.com/watch?v=-8rCfHdKsPY. (accessed: 01.05.2019). [13] G. D. Castillo. Machina.NET. url: https://github.com/RobotExMachina/Machina. NET. (accessed: 05.04.2019). [14] R. Yallapragada. 5G Services and use cases. url: https : / / blogs . intel . com / technology/2017/12/5g-americas-white-paper-explores-5g-services-use- cases-and-market-implications/#gs.7qvs64. (accessed: 09.05.2019). [15] S. P. Erik Dahlman och J. Sköld. 5G NR: The Next Generation Wireless Access Technology. Mara Conner, 2018. isbn: 978-0-12-814323-0. [16] 3GPP. Release 17 - key milestones. url: https://www.3gpp.org/release-17. (accessed: 05.10.2019). [17] G. repository. Websockets for real time web and IoT applications. url: https://en. wikipedia.org/wiki/WebRTC. (accessed: 05.10.2019). 33 https://www.hms-networks.com/press/2018/02/27/industrial-ethernet-is-now-bigger-than-fieldbuses https://www.hms-networks.com/press/2018/02/27/industrial-ethernet-is-now-bigger-than-fieldbuses https://www.hms-networks.com/press/2018/02/27/industrial-ethernet-is-now-bigger-than-fieldbuses https://www.webopedia.com/TERM/T/TCP.html https://www.webopedia.com/TERM/T/TCP.html https://www.netburner.com/learn/websockets-for-real-time-web-and-iot-applications/ https://www.netburner.com/learn/websockets-for-real-time-web-and-iot-applications/ https://www.ericsson.com/en/mobility-report/reports/june-2019 https://www.ericsson.com/en/mobility-report/reports/june-2019 https://www.3gpp.org/release-15 http://developercenter.robotstudio.com/webservice/api_reference https://www.youtube.com/watch?v=-8rCfHdKsPY https://www.youtube.com/watch?v=-8rCfHdKsPY https://github.com/RobotExMachina/Machina.NET https://github.com/RobotExMachina/Machina.NET https://blogs.intel.com/technology/2017/12/5g-americas-white-paper-explores-5g-services-use-cases-and-market-implications/#gs.7qvs64 https://blogs.intel.com/technology/2017/12/5g-americas-white-paper-explores-5g-services-use-cases-and-market-implications/#gs.7qvs64 https://blogs.intel.com/technology/2017/12/5g-americas-white-paper-explores-5g-services-use-cases-and-market-implications/#gs.7qvs64 https://www.3gpp.org/release-17 https://en.wikipedia.org/wiki/WebRTC https://en.wikipedia.org/wiki/WebRTC [18] rt-labs. Profinet open source stack. url: https://github.com/rtlabs-com/p-net. (accessed: 05.10.2019). [19] S. S. C. on Electromagnetic Fields. Recent Research on EMF and Health Risk”. Report. Strålsäkerhetsmyndigheten, 2019. 34 https://github.com/rtlabs-com/p-net Bilagor 35 A Pythonkod för koppling till virtuell robotkontroller Innehåll i filen RWPanelSubscriber.py” #IMPORTS import argparse import sys import xml . et ree . ElementTree as ET from timeit import default_timer as timer import requests from requests . auth import HTTPDigestAuth from ws4py . c l i e n t . threadedcl ient import WebSocketClient #GLOBALS ip_adress = ’ 127 .0 .0 .1 ’ start_timer = 0 end_timer = 0 RobotReady = 0 Start_seq = 0 namespace = ’{http ://www.w3. org /1999/xhtml} ’ def print_event_init ( evt ) : # Parsing XML−f i l e to get the needed information root = ET. fromstring ( evt ) i f root . f i n d a l l ( ” .//{0} l i [ @t i t l e =’RobotReady ’ ] ” . format (namespace ) ) : pr int ( ”\tRobotReady state : ” + root . f ind ( ” .//{0} l i [ @t i t l e =’RobotReady ’ ]/{0} span” . format ( namespace ) ) . text ) i f root . f i n d a l l ( ” .//{0} l i [ @t i t l e =’Start_seq ’ ] ” . format (namespace ) ) : pr int ( ”\tStart_seq state : ” + root . f ind ( ” .//{0} l i [ @t i t l e =’Start_seq ’ ]/{0} span” . format ( namespace ) ) . text ) def print_event ( evt ) : g lobal start_timer , end_timer # Parsing XML−f i l e to get the needed information root = ET. fromstring ( evt ) i f root . f i n d a l l ( ” .//{0} l i [ @t i t l e =’Start_seq ’ ] ” . format (namespace ) ) : g lobal Start_seq print ( ”\tStart_seq state : ” + root . f ind ( ” .//{0} l i [ @t i t l e =’Start_seq ’ ]/{0} span” . format ( namespace ) ) . text ) Start_seq = root . f ind ( ” .//{0} l i [ @t i t l e =’Start_seq ’ ]/{0} span” . format (namespace ) ) . text i f Start_seq == ’1 ’ : start_timer = timer () # print (” Start time : {}”. format ( start_timer ) ) #FOR DEBUG i f root . f i n d a l l ( ” .//{0} l i [ @t i t l e =’RobotReady ’ ] ” . format (namespace ) ) : g lobal RobotReady print ( ”\tRobotReady state : ” + root . f ind ( ” .//{0} l i [ @t i t l e =’RobotReady ’ ]/{0} span” . format ( namespace ) ) . text ) RobotReady = root . f ind ( ” .//{0} l i [ @t i t l e =’RobotReady ’ ]/{0} span” . format (namespace ) ) . text i f RobotReady == ’1 ’ : end_timer = timer () # print (”End time : {}”. format ( end_timer ) ) #FOR DEBUG I # print ”Time elapsed = ” , end_timer − start_timer , ” seconds” #FOR DEBUG data = { ’ lva lue ’ : ’ 0 ’ } reset_Start_seq = requests . post ( ’ http ://{0}/rw/iosystem/ s igna l s /Start_seq? action=set ’ . format ( ’ ip_adress ’ ) , data=data , auth=HTTPDigestAuth( ’ Default User ’ , ’ robot ics ’ ) ) # This c l a s s encapsulates the Web Socket Callbacks funct ions . c l a s s RobWebSocketClient ( WebSocketClient ) : def opened ( s e l f ) : pr int ( ”Web Socket connection estab l i shed ” ) def c losed ( s e l f , code , reason=None) : pr int ( ”Closed down” , code , reason ) def received_message ( s e l f , event_xml) : g lobal end_timer , start_timer i f event_xml . is_text : pr int ( ”Events : ” ) print_event (event_xml . data . decode ( ” utf−8” ) ) i f RobotReady == ’1 ’ and Start_seq == ’1 ’ : elapsed_time = end_timer − start_timer pr int ( ”\tElapsed time = {} ms” . format ( elapsed_time ∗ 1000) ) f = open( ”cycle_time . txt ” , ”a” ) f . write ( ”{}\n” . format ( elapsed_time ∗ 1000) ) f . c l o se () e l s e : pr int ( ”Received I l l e g a l Event ” + st r (event_xml) ) # The main RobotWare Panel c l a s s c l a s s RWPanel : def __init__( s e l f , host , username , password ) : s e l f . host = ip_adress # Set th i s to the IP of the robot or the computer running RobotStudio s e l f . username = username s e l f . password = password s e l f . digest_auth = HTTPDigestAuth( s e l f . username , s e l f . password ) s e l f . subscr iption_url = ’ http ://{0}/ subscr ipt ion ’ . format ( s e l f . host ) s e l f . s e s s ion = requests . Sess ion () def subscr ibe ( s e l f ) : # Create a payload to subscr ibe on RobotWare Panel Resources with high p r i o r i t y payload = { ’ resources ’ : [ ’ 1 ’ , ’ 2 ’ ] , ’ 1 ’ : ’ /rw/iosystem/ s igna l s /Start_seq ; s tate ’ , ’1−p ’ : ’ 2 ’ , ’ 2 ’ : ’ /rw/iosystem/ s igna l s /RobotReady ; state ’ , ’2−p ’ : ’ 2 ’ } # Print events resp = s e l f . s e s s ion . post ( s e l f . subscription_url , auth=s e l f . digest_auth , data=payload ) pr int ( ” I n i t i a l Events : ” ) print_event_init ( resp . text ) i f resp . status_code == 201: s e l f . l ocat ion = resp . headers [ ’ Location ’ ] s e l f . cookie = ’−http−sess ion −={0}; ABBCX={1} ’ . format ( resp . cookies [ ’−http−sess ion− ’ ] , resp . cookies [ ’ABBCX’ ] ) return True e l s e : pr int ( ’ Error subscr ib ing ’ + st r ( resp . status_code ) ) return False def start_recv_events ( s e l f ) : s e l f . header = [ ( ’ Cookie ’ , s e l f . cookie ) ] s e l f . ws = RobWebSocketClient ( s e l f . locat ion , protocols =[ ’ robapi2_subscription ’ ] , headers=s e l f . header ) II s e l f . ws . connect () s e l f . ws . run_forever () def c l o se ( s e l f ) : s e l f . ws . c l o se () def enable_http_debug () : import logging # import http l ib # http l ib . HTTPConnection . debuglevel = 1 logging . basicConfig () # I n i t i a l i z e logging logging . getLogger () . setLevel ( logging .DEBUG) requests_log = logging . getLogger ( ” requests . packages . u r l l i b 3 ” ) requests_log . setLevel ( logging .DEBUG) requests_log . propagate = True def main( argv ) : try : parser = argparse . ArgumentParser () parser . add_argument( ”−host” , help=”The host to connect . Defaults to loca lhos t on port 80” , de fault=’ loca lhos t :8080 ’ ) parser . add_argument( ”−user ” , help=”The log in user name . Defaults to default user name” , de fault=’ Default User ’ ) parser . add_argument( ”−passcode” , help=”The log in password . Defaults to default password” , de fault=’ robot ics ’ ) parser . add_argument( ”−debug” , help=”Enable HTTP l e v e l debugging . ” , act ion=’ store_true ’ ) args = parser . parse_args () i f args . debug : enable_http_debug () rwpanel = RWPanel( args . host , args . user , args . passcode ) i f rwpanel . subscr ibe () : rwpanel . start_recv_events () except KeyboardInterrupt : rwpanel . c l o se () i f __name__ == ”__main__” : main( sys . argv [ 1 : ] ) III B Automatisk påverkan av insignal för att utföra cykeltester Innehåll i filen run_loop.py” #IMPORTS from time import s leep import requests from requests . auth import HTTPDigestAuth from timeit import default_timer as timer #GLOBALS ip_adress = ’ 127 .0 .0 .1 ’ no_runs = 10 i = 1 while i <= no_runs : data = { ’ lva lue ’ : ’ 1 ’ } before = timer () set_Start_seq = requests . post ( ’ http ://{0}/rw/iosystem/ s igna l s /Start_seq? action=set ’ . format ( ’ 127 .0 .0 .1 ’ ) , data=data , auth=HTTPDigestAuth( ’ Default User ’ , ’ robot ics ’ ) ) i f set_Start_seq . status_code == 204: a f t e r = timer () req_time = a f t e r − before pr int ( ”\tRequest time = {} ms” . format ( req_time ∗ 1000) ) i += 1 f = open( ”cycle_time . txt ” , ”a” ) f . write ( ”{} , ” . format ( req_time ∗ 1000) ) f . c l o se () s l eep (5) IV C Läsning av resultatet och skriv ut medelvärdet från antalet cykeltester Innehåll i filen ’test_results.py’ sum_number = 0 openthe f i l e = open( ”cycle_time . txt ” , ” r ” ) fo r l i n e in openthe f i l e : f o r num in l i n e . s p l i t ( ’ , ’ ) : sum_number = sum_number + f l o a t (num. s t r i p () ) l i n e s = 0 with open( ’ cycle_time . txt ’ ) as f : f o r l i n e in f : l i n e s = l i n e s + 1 #print (”The sum of your numbers i s %.1 f ” %(sum_number) ) pr int ( ”Number of cyc l e s : {}” . format ( l i n e s ) ) pr int ( ”Total time : {} ms” . format (sum_number) ) pr int ( ”Test r e s u l t average : {} ms” . format (sum_number / l i n e s ) ) V D Testresultat cykeltester för olika transportmedium Innehåll i filen ’cycle_time.txt’ via samma datorn, medelvärde 15.0208 ms HTTP request | Svar från roboten | Tre kolumner 11.0603851989,8.5527740617 8.76718750591,5.01738261134 9.6102590082,5.58231072883 8.46852091989,5.34197324099 8.91138999861,6.37245397537 10.0185626954,5.28904498524 11.0776678946,6.19260592266 9.09825914646,5.73299423245 9.92242770027,5.86801529302 9.61782018759,5.7259731373 9.4800987058,5.74649633849 8.77636893803,5.60391409851 8.84117904711,6.01869879664 9.30781183249,5.68816724032 9.63510288334,5.21289310709 8.42531418051,4.91476660531 9.08961779859,5.43648798339 12.3522667066,5.69950900942 8.75044489439,5.63523898458 8.33566019628,5.34791416763 9.70261341364,5.67196471306 9.32293419127,6.10025151724 9.20735616342,5.78322206698 8.62838585563,5.12755979676 9.03830979556,5.63739932156 8.42855468596,5.51480019854 9.23003970159,5.55854702216 9.23922113371,5.68978749305 8.95027606406,5.27608296343 8.95027606406,8.8806051968 9.09069796707,5.21181293857 9.09069796707,9.09069796707 8.78068961197,5.24475807737 8.74396388349,5.54180441065 8.7174997556,5.33387197731 11.5264779,6.1942261754 9.15604816039,5.51804070399 8.59220021139,5.69572841972 9.32941520218,5.08813364709 9.74906065848,5.75297734941 8.79581197075,5.64766092215 8.73478245137,5.22531504465 9.23490045977,5.81994779546 10.6699042917,5.4364879834 8.64674871986,5.288504901 8.79257146529,5.8982600106 9.2505629028,5.72759339002 9.22733928038,5.20317159071 8.61704408653,5.43918840461 9.83331380029,5.51912087248 12.0195748133,5.54450483187 10.9107818638,5.83128956455 9.5681324373,6.31142445599 9.18737304645,5.75675793911 8.68023394289,5.30308717555 9.69667248697,5.61525586761 8.93083303134,5.90960177971 8.46636058292,5.50075800822 9.06423383919,5.7940237518 9.33589621309,5.49211666035 8.55007364049,6.87041164682 8.72722127197,5.76971996091 9.6599467585,5.62875797365 8.83307778347,5.5553065167 9.37208185733,5.33441206161 10.9188831274,5.45755126885 9.49090039064,5.34737408341 8.71695967137,5.66278328094 9.51412401306,5.21451335979 8.94757564285,6.17370297419 10.2119128542,5.36033610523 8.98052078163,6.02355955482 9.49360081185,5.81400686879 10.4646722796,5.91446253787 10.7179717892,5.61741620458 9.41960927065,5.64982125912 8.72020017682,5.2912053222 9.90082433058,5.68708707184 8.49876563746,5.33333189311 9.40394682763,5.54558500035 8.39830996838,5.61039510943 9.11824226343,6.92279981832 8.81741534045,5.56448794883 10.5192207881,6.29036117054 9.37586244702,5.65792252276 10.4581912687,5.46025169007 9.00104398284,5.95388868756 8.94649547436,5.1648256095 8.83901871014,5.77566088758 9.38396371066,5.71301111547 9.33805655006,5.91716295908 8.70021705986,5.24205765615 9.27864728341,5.34305340948 8.68995545925,5.235036561 8.66133099441,5.49157657611 9.13552495918,5.37059770582 8.69751663864,5.41434452947 9.13984563312,5.26096060463 9.29322955794,5.22531504464 8.84982039499,5.19020956889 VI Innehåll i filen ’cycle_time.txt’ via LAN, medelvärde 21,9237 ms HTTP request | Svar från roboten | Tre kolumner 17.95659900000002,5.271893999974964 16.47253099999979,5.486053999959495 16.82627199999942,5.5962129999898025 15.654206999998976,5.06868200000099 15.638470000002513,4.907890999959363 15.728787000000466,5.6762660000231335 15.827998999998982,5.340316000001621 16.913850999998203,5.335526000010304 16.420530000004874,5.351947999997719 16.346636000001524,5.034470999987661 15.684997000001033,5.71663499999886 15.793787999996312,5.268473000000995 18.363708000000088,5.330052999966028 16.57790100000156,5.4272119999723145 15.593312000000026,4.53978199999483 15.44757399999952,5.646845999990546 16.20705499999886,7.716602999948918 15.634365000000372,5.330735999962144 16.46569000000042,5.295157999967159 18.480025000002342,6.483644000013555 15.539942999993173,8.364556999993056 15.481784999998638,12.382279999997081 15.895051999997634,5.264367999984643 16.516322000001082,5.451158999960626 15.63436499999682,5.348525999977483 15.667892000003292,5.308841999976721 18.32949699999997,5.47168599999992 16.218002999999648,5.2356299999996025 16.291213999998888,5.093997999999544 15.796524000000645,4.979049999999319 15.559101000000908,5.2458940000015275 15.694576000001348,5.679688000000738 16.45474199999697,5.111103000000838 16.675744000000492,5.924637999996207 15.415415999996185,5.564740000004065 16.370583000004046,5.076208000005522 16.31105599999927,5.575686000000246 16.131790999999396,5.337578999998982 16.17968600000097,5.60373999999797 16.529321999996682,5.210998999999106 15.558416999994051,5.39436900000112 18.604552999999967,5.425844000001234 16.376055999999473,5.2992629999977225 16.283686999999603,5.356738000003247 16.184475999999393,5.070734999989668 15.64873399999911,4.869573999997101 16.100316999999364,5.371105999998349 17.819754999997883,5.1891040000100475 17.880650000002163,5.453212000006147 16.161897000003478,5.286947999991298 16.926167000001158,6.502116999996588 16.155054999998697,5.573634000000993 16.478005000003293,5.88084800000388 16.164633999999012,5.035155000001623 16.23100299999436,5.446369999987155 16.722954999998763,5.38410600000816 18.153654000000017,5.4935799999782375 16.48963700000028,5.259577999993326 16.307636000000514,5.423105999994959 19.2908230000004,5.462106000010181 15.838946999998882,5.232210000002624 16.291213999999776,5.220577999999421 16.623743999998553,5.320473000001158 15.681576000000419,5.685161999998911 16.151634000003412,5.2623159999996005 15.48110100000244,5.0652609999986 16.433531000000556,5.469632999997032 15.943631999999042,5.198683000003257 16.43079400000147,5.327999999998667 15.71578699999776,5.607845000000111 15.869051999999328,5.214420000001496 15.806787999999017,5.510686000000931 15.981947999996748,5.1952620000008665 16.229634000005433,5.371105999998349 15.723998000005679,5.238367000004018 17.54675299999997,5.331420999993952 16.389740999999347,5.670793000007279 17.439330000000197,5.14941899999144 16.317214000000746,6.110745000000861 15.83141999999782,5.547633999995583 16.091422999998883,5.16857700000628 15.942946999999208,5.079628999993702 17.67196399999804,10.786686000017198 15.793788000003417,5.4737380000062785 15.765050999995367,5.247946999986652 16.761954999999773,5.327999999991562 15.88889399999971,5.263683000009678 16.118791000003796,5.734424999985777 16.27342399999776,5.214420000015707 16.749640000000454,5.135050000006913 15.69457600000046,5.702266999975336 16.045580000000115,5.818583999996463 16.249477000000567,5.217157000004136 15.731523999999553,5.595529000004262 18.281601999999953,5.38068500000044 15.78010299999999,5.246577999999502 16.1133179999986,5.277368000001559 16.628533000000445,5.319788999997854 16.640847999997987,5.401211999998878 16.595691000002688,5.203473000001679 VII Innehåll i filen ’cycle_time.txt’ via lokal trådlös nätverk, medelvärde 38.3158 ms HTTP request | Svar från roboten | Tre kolumner 26.59910600000001,4.7624549999832 24.323734000001096,0.72965300004964 35.297687999999994,4.646337000005 23.98294199999995,5.31495999999758 29.058644999999217,5.87556700003912 105.72942000000296,30.82309800006155 50.61769299999952,7.93004399991199 27.46539900000755,5.76106900001839 27.15971199999956,2.057716999995704 22.303282999999396,0.23115500869815 26.090887000000006,5.26959300008399 28.90526200000032,9.89108699999743 23.32079900000039,6.05649499995721 33.26049400000031,5.27013399999871 21.365158000001827,5.428917999784665 36.194766999997796,6.17639299975633 21.66706399999896,8.87087000009745 28.281464999992068,14.28736500001273 26.164878000003,4.93906300023225 23.37048700000821,5.07084200009179 53.73613499999408,5.73622500021022 34.36874499999476,6.70729600001861 28.128081999994947,7.96515000018184 23.53629300000648,5.20262300002404 23.039415999988933,7.47097300010872 33.550519000016266,3.72765500342468 22.404818000012483,6.2017770000113 36.60144900001683,3.36795999991399 29.006257999981244,4.32390800003485 39.394760999982736,1.162800000314387 26.07522499999959,4.476210999965105 25.628576000002568,4.27799999999338 24.770384000021295,4.82888600041166 40.27995799998507,2.699336999672723 30.22522500000946,5.61578699953798 24.951312000013104,5.65953399960331 28.258241999992606,5.73784499998742 30.277612999952908,5.95928000013223 36.43510500000957,4.84832800036872 24.58189499998298,3.036888999863313 23.379669000007652,0.23115505133072 29.18502500000386,9.83545799997743 160.81090299996958,18.379577000188 24.784966000026998,0.264100999706512 34.31203700000651,9.22084399969475 34.31203700000651,11.1365190046974 24.42148899996255,6.67597100049685 24.14820800004236,2.121447000359142 23.355904999959876,3.34743700021736 24.292949999960456,6.44967599988358 24.436611999988145,3.98365499956343 21.42564799999036,3.330153999683882 24.490620999984003,7.365657000036663 26.783273999967605,6.102941999984068 28.094596000016736,6.03219100031162 24.31077300002471,2.837598000419077 36.50423499999533,16.2430080000604 28.042749000007916,4.50429500060665 27.279610999983106,1.984806999852669 37.78261200000002,14.68000599999857 23.159315000000902,8.51333399999873 27.447035999998093,7.41156399998094 32.29968600000177,9.00264999999335 25.544863000000362,7.376999000016605 26.590464000001646,6.434012999996241 27.61932300000325,7.45855099999147 33.58940500000074,8.283798999997316 31.585154999987708,8.92541800004015 26.686060000002954,9.03127400008693 36.37515500000177,9.59134000000006 28.41378600000155,7.71617099999844 88.96685300000229,0.2435780000984753 26.234549000008656,7.70266800007407 28.174529000011717,7.4893360002033 26.33554499999491,8.33186600020227 26.524575000024697,8.40207699999508 29.51609600000893,6.968696000001273 39.29214500001876,4.284480999984908 23.75502699999288,9.40717200010178 33.929116999985354,0.2516790000155896 25.36555500000759,6.866079999980457 25.49949599998058,3.725494999997636 29.52527799999416,12.489428000009184 25.485994000007395,7.065371000101455 30.14259300002209,9.517888999994284 29.197986999975,6.976257000019359 34.718178999980864,9.037214999978005 27.532909999990807,9.167915999967136 40.66881800002875,6.018689000029553 31.273527999985617,8.081267000022763 28.324132000022928,8.435021999957826 25.99475199997414,6.445355000039399 29.220130999988214,7.226314999968508 27.826175000029707,9.453618999998525 24.403126999970937,6.889304000026186 26.481366999973943,10.460874999978387 23.671853999999993,8.620270999999846 36.27902000000027,2.4049909999988017 25.84028900000135,8.948640999999924 32.738774000002024,7.008122000002004 VIII Innehåll i filen ’cycle_time.txt’ via 5G, medelvärde 238.25 ms HTTP request | Svar från roboten | Tre kolumner 241.19275499999992,1.400592999999617 245.72227399999846,9.442198000002122 250.249740000001,1.3841709999979912 242.2129230000003,1.3342230000006339 227.18135299999886,1.774859999976022 229.39411200000137,1.358171999996216 227.19161600000604,1.373908999944554 229.1211090000047,1.336960999992698 226.4293979999934,1.3807509999992362 214.3887339999975,1.3410660000090502 231.55350099999993,1.344486999983019 241.53349500000053,1.676331999881787 255.07894500000106,1.406751000188577 240.84380400000072,9.690569000014193 204.8656330000034,1.3225919999797497 214.89779099999964,1.317118000028926 226.94940400000263,1.336960999992698 229.20458400000143,1.343802999974788 227.72804299999905,10.11478499998475 200.37922099999776,1.313697000005022 228.4437340000096,1.3561189999791168 246.50296499999058,1.351328999877998 228.15909999999917,1.820017999894317 223.9990589999934,10.223574000008284 246.30933200000982,1.729700999879265 243.64156900000467,1.325328000071754 211.53349499999877,1.965756000041485 242.2218179999902,1.343118000022514 227.2778280000125,1.3212230000476666 224.65932900001917,1.469698999933932 259.198617,1.350645000022596 237.4603499999992,1.3349079999898095 228.34999600000216,1.603121000016472 246.6295460000012,1.383486999982402 229.482376,9.70493800027141 242.8745610000007,1.3410660000090502 245.71337899999435,1.607227000222488 237.41929700000242,9.110352999982751 203.574871000003,1.328066000041872 222.1270679999981,1.3198550000197429 206.39245099999528,1.482699000074147 213.8670320000074,9.7179379999432 247.81529399999158,1.45464600007017 204.71370999999294,1.262380999467994 228.21588899998346,9.392935000050784 246.33806899998945,1.344486999983019 264.88309499998763,1.315750000033906 227.01235099998485,2.18059999997422 207.1939969999903,1.3164340000457742 240.0405330000126,1.3862240000435122 239.19962999999998,1.371855999991567 239.68884499999987,1.39785600003961 241.4164939999992,1.0235890000558356 231.308551999998,1.39785600003961 226.44718799999453,1.340381999666666 225.85465600000276,1.497752000911682 226.57034699999912,1.334224000611127 226.27408099999968,9.66935899985889 240.791803999997,1.4553309999882913 245.09005599999512,1.336960999992698 225.51459899999315,10.57389400003747 228.43552400000533,1.037956999994094 245.69764100000668,1.385540000011286 245.630589000001,1.3006969999196372 243.71067499998844,1.232275999960908 227.66441100000634,5.3485919999993712 219.7658069999875,1.3246450000679033 246.95933800001058,3.302748999933101 244.5741569999882,2.3636449999694378 228.39378599999804,5.411540000491718 203.1205510000001,259.0768269999999 237.54929800000113,4.238726000000526 225.5461010000017,1.540857000019495 264.7079350000006,14.704514000001723 278.41691300000093,4.094062999964813 246.79786299999762,3.871692999934564 213.6277479999987,1.5093829999983654 238.88899499999638,1.312327999973647 247.41707999999107,1.335592000037713 214.33777300000116,3.20291399999996 202.050695,2.042062999999871 213.8310290000011,14.37540600002755 211.2484659999992,1.297276000025119 215.6548920000006,14.1831410000373 229.7343589999994,4.858626999997284 217.49406799999775,5.61400200001506 234.63954100000024,1.38690800006306 220.7636139999994,1.362275999994722 256.12563300000147,0.858692000084319 222.55505900000344,15.35862599994047 236.25341799999603,13.7445570000965 220.41515599999343,1.464224999781143 237.0046610000145,1.5873840000040218 228.5405920000039,9.644042999980229 220.05079599999135,1.380066999852744 236.5081110000074,1.3882769999895572 240.8363049999798,1.3184870000202409 292.508368,1.4183830000149555 239.145932999985,2.366023999996969 224.03570499999995,4.43988600000011553 IX E PLC-kommunikation using PLCHandlerX ; using System ; using System . Col l ect ions . Generic ; using System . Linq ; using System . Text ; using System . Threading . Tasks ; using System . Threading ; using System . Net . Sockets ; using System . Net ; using System . Diagnostics ; using AxPLCHANDLERXLib; using System . IO ; namespace PLCHandler_app { c l a s s Program { // Sett ing up the PLC private s t a t i c PLCHandlerThread hndl_thrd_obj ; s t a t i c PLCHandlerThread SetUpThread () pr ivate s t a t i c void Hndl_thrd_obj_StateChanged(PLCHandlerThread .PLCHANDLER_STATE state ) pr ivate s t a t i c s t r ing oldValue = ”” ; // Pol l s the PLC synchronously public s t a t i c void TimerProc( object state ) public s t a t i c s t r ing ExecPython( s t r ing fromPLC) s t a t i c void Main( s t r ing [ ] args ) { hndl_thrd_obj = SetUpThread () ; hndl_thrd_obj . InitPLCHandler () ; Timer t = new Time