Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

UR roboten støtter Modbus TCP kommunikasjons. Dette vil si at at roboten vil kunne kople seg til en Modbus server eller client.

Modbus TCP protokoll kommer fra tidligere"Modbus serial protocol" fra 1979, men er forbedret med tilkoplinger igjennom ethernet TCP/IP nettverkskommunikasjon.

UR roboten kan både oppføre seg som en klient og og server. Ved tilkopling til Wago PLS setter vi UR-roboten settes opp til å være server, og PLS til slave. Grunner er at manualen vi fant på nett forklarte oppkoplingen denne veien. Men både robot og PLS støtter begge konfigurasjoner.

For konfigurering av robot til klient kan vi bruke:

Oppklopling for Modbus:

-Kopler opp internett til robot og pls til lokalt nett

-Setter opp kommunikasjon fra server til slave(PLS) på codesys. Dette gjøres ved å legge til en ethernet tilkopling, og under legge til en master enhet. Her legger vi til så mange registers og coils vi ønsker og bruke.

-På UR-robot åpner vi for Modbus og legger in IP til PLS. Derretter må vi sette opp antall registers og coils slik som på PLS.



MODBUS terminologi 

Coils: Binære utganger som kan brukes til å sende digitale signaler slik som 1 og 0 tilstander og kan ikke avike fra dette. Både slave og master kan skrive og lese av disse signalene. Dette er en boolks enhet


Register: Dette er et 16-bit minneområde brukt av modbus enheter. Registre i modbus er delt opp i "input registers" og "holding registers". 

Hvor input registers er data som kan skrives av enheten, og eksterne enheter kan lese dette. Dette er vanligvis sensordata eller annen relevant data om enheten som tilstander.

Holding register har data som både kan skrives og leses av en ekstern enhet. Dette er nyttig for å lagre midlertidig data, der en ekstern enhet kan endre parametre.


16-bit: Dataenhet som består av 16 bits, hvor en bit er en minste enheten som beskriver digital verdi som enten er 0 eller 1. Ved bruk av kombinansjonene 0 og 1 i de 16-bit dataenheten kan vi få totalt 2^16 verdier som kan beskrives som 0 - 65536. Dette er den vanligste måten og tolke verdiene men kan være ulikt avhengig av system og aplikasjon. 


I oppsettet vår imellom robot og PLS så støttes kun 16-bit informasjon. Dette skaper problemer da når vi skal lese over vinkler til og fra roboten kommer disse ofte i positive og negative komma tall. Så for å løse dette må vi endre tallet før vi sender det over. Disse tallene varierer imellom -π og π da roboten har en 360 grader +/- arbeidsområde. 



Forsøk 1:

På grunn av begrensningene til 16-bit data, som ikke tillater overføring av negative tall eller desimaltall direkte, måtte vi finne en løsning:

  1. Endre tallet til positivt: Vi tok det opprinnelige tallet og la til π (pi) på det, slik at verdien alltid ble positivt.

  2. Multiplisere med 1000: For å kunne behandle desimaltall, multipliserte vi tallet med 1000. Dette gjorde at hvis tallet besto av et naturlig tall pluss syv desimaltall, ble det transformert til fire naturlige tall pluss fire desimaltall.

  3. Bruk av Trunc-funksjonen: Deretter brukte vi Trunc-funksjonen for å fjerne desimalene helt. Dette resulterte i et heltall som kunne sendes over som en 16-bit verdi.

  4. Overføring via 16-bit verdi: Dette heltallet ble deretter sendt til enheten via en 16-bit verdi.

Når tallet ble mottatt på enheten, ble prosessen reversert:

  1. Dekoding av verdien: Vi dekodet verdien og gjenopprettet det opprinnelige tallet ved å reversere trinnene. Detter medførte at vi fikk tilbake en verdi med et heltall og 3 desimaler, og fortegnet til det opprinnelige tallet ble bevart .


Forsøk 1 var lett å implementere for testing men vi ønsket og få en mer nøyaktig verdi på de overførte tallene.


Forsøk 2:

Ved bruk av to registere kan vi overføre dobbelt så mye data og få bedre nøyaktighet. I dette forsøket skal vi bruke metoden "floating point representation", denne metoden lar oss oveføre dataen ved å dele verdien i 2 enheter og sende den over i 2 registre.

  1. Oppdeling av desimaltallet: Del det desimaltallet du ønsker å overføre inn i to deler: en del for heltallet og en del for desimaldelen.

  2. Konvertering til heltall: Multipliser desimaldelen med en potens av 10 for å flytte desimalpunktet til høyre. Dette konverterer desimaldelen til et heltall.

  3. Overføring av to heltall: Overfør heltallsdelen og desimaldelen til separate registers.

  4. Dekoding på mottakersiden: Når dataen er mottatt, dekoder du de to verdiene fra registers og slår dem sammen tilbake til det opprinnelige desimaltallet ved å dele desimaldelen med en passende potens av 10 og legge den til heltallet.





Programmering av script:

https://s3-eu-west-1.amazonaws.com/ur-support-site/115824/scriptManual_SW5.11.pdf



Universal Robots
user manual for CB3 version 3.8 section 13.11 (Polyscope: Installation -> Modbus Client IO Setup) 




To get more detailed information about Modbus client I/O setup, see section 13.11 of the
CB3 user manual or section 16.4.1 in the eSeries user manual



Kilde: https://s3-eu-west-1.amazonaws.com/ur-support-site/66329/UR%20Modbus_bba_mods_0.1.4.pdf