Industrielle styresystemer - Wiki
PLS - MQTT kommunikasjon ble implementert med hjelp av nødvendige bibliotek: WagoAppCloud, WagoSysPlainMem, FloatingPointUtils. Desse blei lagt til via library manager i application.
PLS programmet trenger ein subscriber for å få informasjonen frå kontrolleren. Dette blir gjort med WagoAppCloud biblioteket sin funksjonsblokk for subscriber.
Det viktige her er subData. Subscriber-blokka kopierer mottatt data inn i subData variablen, dette er i form ARRAY OF BYTE. Deretter blir det brukt memcopy frå FloatingPointUtils, for å kopiere den mottatte dataen til variablen angleData, som er ein string. Det er angleData som blir outputen for subscriberen. Videre blir stringen konvertert til riktig form for gjeldande kommunikasjonsprotokoll
For info om funksjonen til resten av variablane se bilde eller dokumentasjon til WagoAppCloud.
Frå arduinoen blir det send ein array of byte. Strukturen på dinna arrayen er følgende
Kvar enkoder i kontrolleren sender ut ein 10 bit verdi, altså den kan vise ein tallverdi frå 0-1024. Fordi MQTT Biblioteket for CodeSys tar inn array of byte, må vi konvertere dei 10bit tallverdiane fra enkoderane til byte. Måten vi gjør dette er slik. Følgende tallverdiar er vilkårlege
enkoder 1 = 1015 = 1111110111
Vi konverterer dette til å representere kvar tall i byte. Dette blir
enkoder 1 = 1015 = 00000001 , 00000000, 00000001, 00000101
enkoder 2 = 0658 = 00000000, 00000110, 00000101, 00001000
og vidare for resten av enkoderane. Resultatet av dette blir at vi sender ein array of byte av med 20 byte. 20 byte fordi vi har 5 enkodera, og vi trenger 4 byte for å representere kvar av dei.
Når PLS har subscriberen implementert, må ein prosessere dataen den får in. Dette blei gjort vi ein funksjonsblokk "Split_string_to_int".
Denne funksjonsblokka tar inn dataen fra subscriberen, og prosseserar den.
Vi tar inndataen på 20 byte og splitter den opp i 4 byte, ein for kvar enkoder verdi. Fordi datatypen string og array of byte er prinsippielt det same, og det var lettare å konvertere blei det gjort på denne måten.
Utgangsdataen frå funksjonsblokka er ein array of int, der rekkefølga på enkoder går frå er slik:
aiJointBinaryState = [base, shoulder, elbow, wrist1, wrist2, wrist3], der kvar verdi er fra 0-1023.