En liten Modbushistoria
En liten Modbushistoria
Det där med datakommunikation är inte helt lätt.
I vårt projekt har vi ett antal regulatorer och frekvensomformare kopplade till en modbusmaster.
Regulatorerna och modbussmastern är helt vår egen design och konstruktion.
Omformarna kommer från ett stort känt fabrikat.
Nåväl, tanken är att vår master skall skicka referenser till omformarna och slavregulatorerna , lätt som en plätt kan man tycka.
Men ack vad man bedrar sig.
Ingenting funkade med omformarna.
VIsst vi kunde skicka referenser till dem, men retursvaret var alltid, enligt vå modbussmaster felaktig.
Så, vi konstaterar att vår master anser att checksumman på svaret är felaktig.
Jah, bara, bara att dyka ned i koden och felsöka, efter någon veckas provkörning, analys av kod linjelyssning osv, konstaterar vi att vår kod är fullständigt ok, vi följer Modbusstandarden till 100%.
Dock kan vi konstatera att den stora omformartillverkaren måste ha buggar i sin kod.
Skickar ett par mail till deras support, med loggar från linjelyssning osv.
Efter någon frustrerande vecka och en del telefonsamtal så får vi svar från dem, ja de har fel i koden, sorry, uppdateras nästa år, typ, eventuellt.
Men sa de, om man frångår modbuss-standarden och kör 8N1 i stället för kravet i standarden (8N2 eller 8E1), så funkar det.
Ja ja, ok, vi ändrar i koden till 8N1, och visst det funkade, HURRA, ett tag.
Efter en tids drift slutade omformarna att ta emot data, såvida man inte startade om dem, ibland fick vi konstiga fel som processor överbelastad osv.
Hmpf, åter tillbaka till supporten, hmm, till svar får vi, Det inbyggda modbusgränssnittet är rätt nytt, ni är faktiskt de första som använder det, och (mellan raderna), ja vi har märkt att det beter sig lite konstigt i bland.
Dock, löser det sig om ni använder vår externa adapter, den vet vi funkar, eftersom tyusentals anläggningar använder den.
Ok, javisst, kör på skicka dem, Hmm 6 veckors leveranstid, inte acceptabelt, vi har en stor anläggning som står stilla.
Fick adaptrarna installerade dem, frid och fröjd, he he, trodde ni va.
Jo, det visar sig att skriva till omformarna gick alldeles utmärkt, med rätt svar och rätt checksumma osv.
Men läsa från dem, nja, dt funkade för det mesta inte, nog fick vi svar alltid, men i de flesta fallen så var svaret en undantagskod "oåterkalleligt fel, kontakta supporten" enligt bruksen.
Sagt och gjort det gjorde vi.
Nu är det så att modbus är ett rent 16-bitarsprotokoll, så man läser och skriver 16-bitars register.
På senare tid har man diverse modifikationer lyckats få till både 32 och 64-bitars register, och hur i helsike addresserar man 32 bitar med 16, well, normalt sett så när man läser så får man enligt boken LSW vid 16-bitars läsning, vilket är helt ok för oss eftersom det vi är intresserade av ändå ligger i LSW.
Supporten återkommer, och meddelar följande, med den inbyggda modbusporten(som inte funkar) kan man problemfritt (i teorin) läsa LSW av ett 32-bitars ord, men det går inte med den externa adaptern, där måste man läsa hela 32-bitarsregistret, suck,
Hur gör man det då, bra fråga svarar de.
Då inställer sig problemet, det finns ett par sätt att göra detta,
Det är något luddigt och ickespecificerat vad som menas i standarden när man skickar en läs/skrivförfrågan, avser den ett 16-bitars register, ett värde eller.....
Till råga på allt så finns det ett antal sätt att koda informationen, generellt är modbus Big Endian, men vid multibyte register, dvs 32 bitar till exempel så kan man ha BE på allt BE på 2*16 bitar och LE inom resp 16 bitar osv.
Totalt finns det runt 8 sätt att läsa ett 32 bitars register, och man har naturligtvis inte specat hur man skall göra.
Lusläser den där 400-sidiga manualen, och hittar en formel för att omvandla adresserna till 32 bitar.
Ok, då vet man, normalt är registeradresserna vid 16 bitar 0-9999 och vid 32 bitar 20000-39999, typ.
Ja ha, implementerar detta i koden, funkar inte, det visar sig att, man måste läsa 2 register med 32-bitars addressering, för att på ett 32-bitars register.
Suck, nu kan vi i alla fall läsa, återstår att se hur det är med endinessen.
Nä nu skall jag ned i hotellets bastu, med några öl.
I vårt projekt har vi ett antal regulatorer och frekvensomformare kopplade till en modbusmaster.
Regulatorerna och modbussmastern är helt vår egen design och konstruktion.
Omformarna kommer från ett stort känt fabrikat.
Nåväl, tanken är att vår master skall skicka referenser till omformarna och slavregulatorerna , lätt som en plätt kan man tycka.
Men ack vad man bedrar sig.
Ingenting funkade med omformarna.
VIsst vi kunde skicka referenser till dem, men retursvaret var alltid, enligt vå modbussmaster felaktig.
Så, vi konstaterar att vår master anser att checksumman på svaret är felaktig.
Jah, bara, bara att dyka ned i koden och felsöka, efter någon veckas provkörning, analys av kod linjelyssning osv, konstaterar vi att vår kod är fullständigt ok, vi följer Modbusstandarden till 100%.
Dock kan vi konstatera att den stora omformartillverkaren måste ha buggar i sin kod.
Skickar ett par mail till deras support, med loggar från linjelyssning osv.
Efter någon frustrerande vecka och en del telefonsamtal så får vi svar från dem, ja de har fel i koden, sorry, uppdateras nästa år, typ, eventuellt.
Men sa de, om man frångår modbuss-standarden och kör 8N1 i stället för kravet i standarden (8N2 eller 8E1), så funkar det.
Ja ja, ok, vi ändrar i koden till 8N1, och visst det funkade, HURRA, ett tag.
Efter en tids drift slutade omformarna att ta emot data, såvida man inte startade om dem, ibland fick vi konstiga fel som processor överbelastad osv.
Hmpf, åter tillbaka till supporten, hmm, till svar får vi, Det inbyggda modbusgränssnittet är rätt nytt, ni är faktiskt de första som använder det, och (mellan raderna), ja vi har märkt att det beter sig lite konstigt i bland.
Dock, löser det sig om ni använder vår externa adapter, den vet vi funkar, eftersom tyusentals anläggningar använder den.
Ok, javisst, kör på skicka dem, Hmm 6 veckors leveranstid, inte acceptabelt, vi har en stor anläggning som står stilla.
Fick adaptrarna installerade dem, frid och fröjd, he he, trodde ni va.
Jo, det visar sig att skriva till omformarna gick alldeles utmärkt, med rätt svar och rätt checksumma osv.
Men läsa från dem, nja, dt funkade för det mesta inte, nog fick vi svar alltid, men i de flesta fallen så var svaret en undantagskod "oåterkalleligt fel, kontakta supporten" enligt bruksen.
Sagt och gjort det gjorde vi.
Nu är det så att modbus är ett rent 16-bitarsprotokoll, så man läser och skriver 16-bitars register.
På senare tid har man diverse modifikationer lyckats få till både 32 och 64-bitars register, och hur i helsike addresserar man 32 bitar med 16, well, normalt sett så när man läser så får man enligt boken LSW vid 16-bitars läsning, vilket är helt ok för oss eftersom det vi är intresserade av ändå ligger i LSW.
Supporten återkommer, och meddelar följande, med den inbyggda modbusporten(som inte funkar) kan man problemfritt (i teorin) läsa LSW av ett 32-bitars ord, men det går inte med den externa adaptern, där måste man läsa hela 32-bitarsregistret, suck,
Hur gör man det då, bra fråga svarar de.
Då inställer sig problemet, det finns ett par sätt att göra detta,
Det är något luddigt och ickespecificerat vad som menas i standarden när man skickar en läs/skrivförfrågan, avser den ett 16-bitars register, ett värde eller.....
Till råga på allt så finns det ett antal sätt att koda informationen, generellt är modbus Big Endian, men vid multibyte register, dvs 32 bitar till exempel så kan man ha BE på allt BE på 2*16 bitar och LE inom resp 16 bitar osv.
Totalt finns det runt 8 sätt att läsa ett 32 bitars register, och man har naturligtvis inte specat hur man skall göra.
Lusläser den där 400-sidiga manualen, och hittar en formel för att omvandla adresserna till 32 bitar.
Ok, då vet man, normalt är registeradresserna vid 16 bitar 0-9999 och vid 32 bitar 20000-39999, typ.
Ja ha, implementerar detta i koden, funkar inte, det visar sig att, man måste läsa 2 register med 32-bitars addressering, för att på ett 32-bitars register.
Suck, nu kan vi i alla fall läsa, återstår att se hur det är med endinessen.
Nä nu skall jag ned i hotellets bastu, med några öl.
- Lennart Aspenryd
- Tidigare Lasp
- Inlägg: 12607
- Blev medlem: 1 juli 2011, 19:09:09
- Ort: Helsingborg
Re: En liten Modbushistoria
Nu blir jag riktigt avundsam TomasL.
Ja inte på den beklagliga kommunikationen, men på Bastu med Öl : Njut välförtjänt säger Lasp
Ja inte på den beklagliga kommunikationen, men på Bastu med Öl : Njut välförtjänt säger Lasp
Re: En liten Modbushistoria
"Standarder"..suck....
Jag har varit i "andra änden" så att säga. Dvs skrivit en MODBUS slav som jag skulle koppla till en master där det visar sig att mastern inte stödjer 8E1 (trots att det gick att välja i setup'en) vilket effektivt gjorde den till non compliant med MODBUS-specifikationen. Samma sak där, jag misstänker såklart min kod tills jag får fram logik-analysatorn och tittar på vad mastern faktiskt skickar - vilket alltså inte var 8E1....
Jag har varit i "andra änden" så att säga. Dvs skrivit en MODBUS slav som jag skulle koppla till en master där det visar sig att mastern inte stödjer 8E1 (trots att det gick att välja i setup'en) vilket effektivt gjorde den till non compliant med MODBUS-specifikationen. Samma sak där, jag misstänker såklart min kod tills jag får fram logik-analysatorn och tittar på vad mastern faktiskt skickar - vilket alltså inte var 8E1....
Re: En liten Modbushistoria
Exakt, 8N2 gick att välja i omformarens inställninger, visst den skickade 8N2, men räknade checksumman fel.
När vi valde 8N1, så räknade den checksumman rätt. Dock med överbelastad omformarprocessor som följd.
Detta får mig att misstänka att man kör en mjukvaru-port, då en en hårdvaruport, dvs en riktig uart, inte påverkar checksummeberäkningen, (rimligtvis).
Så, nu har jag fått i mig lite mat, kaffe och en enkelmalt.
När vi valde 8N1, så räknade den checksumman rätt. Dock med överbelastad omformarprocessor som följd.
Detta får mig att misstänka att man kör en mjukvaru-port, då en en hårdvaruport, dvs en riktig uart, inte påverkar checksummeberäkningen, (rimligtvis).
Så, nu har jag fått i mig lite mat, kaffe och en enkelmalt.
Re: En liten Modbushistoria
Det är ju skrämmande så mycket felaktiga grejer som (etablerade?) företag släpper på marknaden.
Jag skulle hellre byggt allt själv, och haft kontroll på hela kedjan. Om något går fel så vet jag i alla fall vad det är och jag blir inte beroende av någon obeprövad grej jag köpt in som sedan visar sig vara konstig.
För ett par år sedan byggde jag ett kommunikationsnät som var utvecklat och rekommenderat av Linear Technology. Bekvämt att slippa utveckla allt själv, tänkte jag. Linear's grejer fungerade hemma, men ute hos kund började de att strula. Jag fick snabbt bygga en nödlösning där jag löste problemet med egen kommunikation vid sidan av. Linear erkände problemet, men hade egentligen ingen annan lösning än att jost göra som jag gjorde: inte använda deras "supersmarta" datkommunikations-grejer.
Jag skulle hellre byggt allt själv, och haft kontroll på hela kedjan. Om något går fel så vet jag i alla fall vad det är och jag blir inte beroende av någon obeprövad grej jag köpt in som sedan visar sig vara konstig.
För ett par år sedan byggde jag ett kommunikationsnät som var utvecklat och rekommenderat av Linear Technology. Bekvämt att slippa utveckla allt själv, tänkte jag. Linear's grejer fungerade hemma, men ute hos kund började de att strula. Jag fick snabbt bygga en nödlösning där jag löste problemet med egen kommunikation vid sidan av. Linear erkände problemet, men hade egentligen ingen annan lösning än att jost göra som jag gjorde: inte använda deras "supersmarta" datkommunikations-grejer.
Re: En liten Modbushistoria
Lösningen kanske ligger här
(antar att modifiering av omformarna inte är tillämpligt)
Fast måste säga att jag känner igen denna typ av cirkus
Bygg en egen omformare, eller sätt dit en modbusmodul som använder det protokoll tillverkaren har använt sedan urtider?TomasL skrev:Regulatorerna och modbussmastern är helt vår egen design och konstruktion.
Omformarna kommer från ett stort känt fabrikat.
(antar att modifiering av omformarna inte är tillämpligt)
Fast måste säga att jag känner igen denna typ av cirkus
Re: En liten Modbushistoria
Bygga egna omformare är uteslutet, då det tar för lång tid och kostar för mycket, dvs ej lönsamt.
- FormerMazda
- Inlägg: 6607
- Blev medlem: 27 februari 2006, 14:59:36
- Ort: Asby (Östergötland)
Re: En liten Modbushistoria
Och som integratör till överordnat system är jag inte det minsta förvånad.
Vi brukade sticka ut hakan om nån frågade pris på att koppla upp nåt som ska prata modbus, "det är inga problem alls". Nu med erfarenhet så hanteras det som vilket annat protokoll som helt, det är lika mycket utredningstid för modbus som för vad som helst.
Och just att man måste läsa "32bitars" (2st 16 bitars) är ett problem jag precis löst på en fastighetsvärmepump från känd tillverkare.
Så, stirra er inte blinda på standarden, det skapar nog bara merjobb som det ser ut nu. Tips från coachen.
Vi brukade sticka ut hakan om nån frågade pris på att koppla upp nåt som ska prata modbus, "det är inga problem alls". Nu med erfarenhet så hanteras det som vilket annat protokoll som helt, det är lika mycket utredningstid för modbus som för vad som helst.
Och just att man måste läsa "32bitars" (2st 16 bitars) är ett problem jag precis löst på en fastighetsvärmepump från känd tillverkare.
Så, stirra er inte blinda på standarden, det skapar nog bara merjobb som det ser ut nu. Tips från coachen.
Re: En liten Modbushistoria
@TomasL, Fungerar det att sätta dit någon modbus-till-xx protokollomvandlare som kan styra omformaren med ett äldre mer beprövat protokoll?
Re: En liten Modbushistoria
Gör en hacka på att sälja "buggrättare" för skit som inte följer standarderna. Det går nog att göra en liten peng på en engångsbatch men framförallt borde nån slags "branschorgan för anvädnare av produkter som ska följa standard" stå för att ta fram sånt, som en känga åt tillverkarna.
Det är en sak att det dyker upp en klase supportärenden och berättelser på forum, det kan nog en säljare kanske vifta bort. Om det däremot dyker upp tredjepartprodukter vars enda syfte är att få en tillverkars produkter att faktiskt fungera så blir det svårt för tillverkarens säljare och support att vifta bort buggar...
Det är en sak att det dyker upp en klase supportärenden och berättelser på forum, det kan nog en säljare kanske vifta bort. Om det däremot dyker upp tredjepartprodukter vars enda syfte är att få en tillverkars produkter att faktiskt fungera så blir det svårt för tillverkarens säljare och support att vifta bort buggar...
Re: En liten Modbushistoria
Finns ingen anledning att krångla till det, det är ju bara att fixa till vår kod, så den passar omformarna, inga konstigheter egentligen.
