modbus tcp problem - delar går ej läsa, förslag?
modbus tcp problem - delar går ej läsa, förslag?
första gången jag jobbar med modbus men stör mig på att jag inte kan läsa allt jag vill ha i en enda sväng..
skickar jag denna förfrågan får jag svar på första biten av registret men inte längre, aggregatet säger bara nono.
och bilden nedan är informationen jag också vill ha, där i mellan är bara brus.
på något vis skickar programmet bara ut en förfrågan på 16bit och jag kan inte skifta mellan de två registerbitarna jag vill ha. Har modbus tcp någon typ av "avslut" register så aggregatet fattar att query-svaret ska delas till 2-3svar?
jag har ju alltid möjligheten att skicka förfrågningar via rpi, laptop och dator som i sin tur vidarebefodrar svaren till en och samma client men det känns som fel arbetssätt... om jag inte kan ändra på längden på en förfråga, vad borde jag göra?
skickar jag denna förfrågan får jag svar på första biten av registret men inte längre, aggregatet säger bara nono.
och bilden nedan är informationen jag också vill ha, där i mellan är bara brus.
på något vis skickar programmet bara ut en förfrågan på 16bit och jag kan inte skifta mellan de två registerbitarna jag vill ha. Har modbus tcp någon typ av "avslut" register så aggregatet fattar att query-svaret ska delas till 2-3svar?
jag har ju alltid möjligheten att skicka förfrågningar via rpi, laptop och dator som i sin tur vidarebefodrar svaren till en och samma client men det känns som fel arbetssätt... om jag inte kan ändra på längden på en förfråga, vad borde jag göra?
Re: modbus tcp problem - delar går ej läsa, förslag?
Jag har kanske lite otur när jag läser men fattar inte vad som blev fel.
På första bilden ser det ut som om du läser 13 register med start på 0 och om värdena är rimliga vet vi inget om
Pss nästa gång du läser.
Var finns "bruset", vad är aggregatet för något, har du en register karta?
Dev vanligaste förvirringen för mig brukar vara nummer på register eller adress i dokumentationen.
Om det är oklart löser det sig ju snabbt med att testa lägga till eller dra ifrån 1.
På första bilden ser det ut som om du läser 13 register med start på 0 och om värdena är rimliga vet vi inget om
Pss nästa gång du läser.
Var finns "bruset", vad är aggregatet för något, har du en register karta?
Dev vanligaste förvirringen för mig brukar vara nummer på register eller adress i dokumentationen.
Om det är oklart löser det sig ju snabbt med att testa lägga till eller dra ifrån 1.
Re: modbus tcp problem - delar går ej läsa, förslag?
Frågan är vad du menar egentligen.
Om du i din läsförfrågan anger att du vill läsa 10 register, då får du 10 register, dvs 20 bytes data tillbaka i svaret från slaven, inget annat. (detta under förutsättning att slaven stöder kommandot)
Modbus är egentligen bara 16-bitar per register, dock har olika tillverkare införlivat både 32 och 64 bitars register, men hur dessa register acessas, är specifikt för varje enskild tillverkare.
Vad jag kan se, om jag förstår dina bilder korrekt så får du de data du begär.
Om du i din läsförfrågan anger att du vill läsa 10 register, då får du 10 register, dvs 20 bytes data tillbaka i svaret från slaven, inget annat. (detta under förutsättning att slaven stöder kommandot)
Modbus är egentligen bara 16-bitar per register, dock har olika tillverkare införlivat både 32 och 64 bitars register, men hur dessa register acessas, är specifikt för varje enskild tillverkare.
Vad jag kan se, om jag förstår dina bilder korrekt så får du de data du begär.
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: modbus tcp problem - delar går ej läsa, förslag?
Enligt Modbus specifikationen ska man normalt kunna läsa upp till 125 register i ett enda svep. Dock finns det flera fall när det inte går att göra så.
Vissa slavar har "hål" i sin map och då kan man inte alltid läsa över hålet utan det går bara att läsa de variabler som är definerade i mappen.
En del slavar följer inte specen utan har en begränsning för hur många variabler man kan läsa i taget t.ex. max 10 Input register eller Holding register.
Vissa slavar har "hål" i sin map och då kan man inte alltid läsa över hålet utan det går bara att läsa de variabler som är definerade i mappen.
En del slavar följer inte specen utan har en begränsning för hur många variabler man kan läsa i taget t.ex. max 10 Input register eller Holding register.
Re: modbus tcp problem - delar går ej läsa, förslag?
Förstår inte det alls, vad menar du? Bilderna visar ju tydligt att du får data i alla de register du läser.skickar jag denna förfrågan får jag svar på första biten av registret men inte längre, aggregatet säger bara nono.
Re: modbus tcp problem - delar går ej läsa, förslag?
Förstår inte det alls, vad menar du? Bilderna visar ju tydligt att du får data i alla de register du läser.skickar jag denna förfrågan får jag svar på första biten av registret men inte längre, aggregatet säger bara nono.
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: modbus tcp problem - delar går ej läsa, förslag?
@TomasL
Kanske försöker TS läsa Input register 0 till 32 från sitt "aggregat" med en (1) enda Modbus request men detta kanske inte är möjligt?
Kanske försöker TS läsa Input register 0 till 32 från sitt "aggregat" med en (1) enda Modbus request men detta kanske inte är möjligt?
Re: modbus tcp problem - delar går ej läsa, förslag?
Jo, men i första bilden läser han 13 register från slav #35, och får data från alla 13 register.
I andra bilden läser han 11 register från slav #32, och får data från alla 11 register.
Jag förstår helt enkelt inte vad TS menar.
I andra bilden läser han 11 register från slav #32, och får data från alla 11 register.
Jag förstår helt enkelt inte vad TS menar.
Re: modbus tcp problem - delar går ej läsa, förslag?
sorry för otydligheten.. här ligger registret
https://fsp.ostberg.com/products/front/ ... u-100-t-ec
tack för förtydligandet, jag tyckte det var konstigt att jag inte kan läsa 125 register i ett enda svep, det hade underlättat asevärt, det jag tyckte var struligt är att ibland kunde jag läsa 10input register, ibland 13, ibland 4 beroende på var jag hämtar data ifrån. I detta fall kan man se i dokumentationen att det är hål exempelvis mellan 3x00034 och 3x00041...Jan Almqvist skrev: ↑23 augusti 2020, 19:15:47 Enligt Modbus specifikationen ska man normalt kunna läsa upp till 125 register i ett enda svep. Dock finns det flera fall när det inte går att göra så.
Vissa slavar har "hål" i sin map och då kan man inte alltid läsa över hålet utan det går bara att läsa de variabler som är definerade i mappen.
En del slavar följer inte specen utan har en begränsning för hur många variabler man kan läsa i taget t.ex. max 10 Input register eller Holding register.
jo, det är rätt, det jag tycker är underligt är att testskriptet jag har, skickar enbart en förfrågan och i den får allt inte plats, (iochmed slaven svarar nej nej) då undrade jag ifall själva slaven brukar ha någon typ av meddelande för avslut för att den ska fatta att den ska stycka upp svaret till x antal delar, portionera ut svaretTomasL skrev: ↑23 augusti 2020, 14:43:34 Frågan är vad du menar egentligen.
Om du i din läsförfrågan anger att du vill läsa 10 register, då får du 10 register, dvs 20 bytes data tillbaka i svaret från slaven, inget annat. (detta under förutsättning att slaven stöder kommandot)
Modbus är egentligen bara 16-bitar per register, dock har olika tillverkare införlivat både 32 och 64 bitars register, men hur dessa register acessas, är specifikt för varje enskild tillverkare.
Vad jag kan se, om jag förstår dina bilder korrekt så får du de data du begär.
Edit:
bilden tidigare visade ett svar jag fick, längderna på data varierade. Nu försöker jag hämta samma data igen med samma inställningar men den vägrar ge mig något. skickar bara return på error... vad tusan är felet är det man gör fel? Fel verktyg att simulera svar med? förslag på bättre grejer?
Senast redigerad av Darn 26 augusti 2020, 22:22:28, redigerad totalt 1 gång.
Re: modbus tcp problem - delar går ej läsa, förslag?
I dina bilder finns det ingenting som säger att slaven svarar nej, du får de registren du begär, inget annat.jo, det är rätt, det jag tycker är underligt är att testskriptet jag har, skickar enbart en förfrågan och i den får allt inte plats, (iochmed slaven svarar nej nej) då undrade jag ifall själva slaven brukar ha någon typ av meddelande för avslut för att den ska fatta att den ska stycka upp svaret till x antal delar, portionera ut svaret
Du kan inte begära att slaven skall skicka data som du inte begärt.
Eller är det de röda kryssen som får dig att undra, tja, det är ju den programvaran som du använder som gör så.
Varje rad börjar på jämt 10-tal, så begär du data enbart från register 3(2 beroende på notifikation) så kommer du att få en rad med 2 röda kryss, en ruta med data och därefter 7 röda kryss.
Slaven kan INTE dela upp nånting, den skickar all begärd data som en enda ström i ett enda datagram/meddelande.
Begär du ett register, får du 2 byte, 10 register 20 byte osv.
Det enda slaven kan göra förutom att skicka begärda data är att i stället skicka tillbaka ett felmeddelande, vilket också är strikt definerat.
Modbus är ett strikt master/slav system, där det bara kan finnas en master, men upp till runt 250 slavar.
Slavarna är alltid tysta, såvida mastern inte ber dem om data eller skickar data. En slav kan aldrig någonsin själv starta en sändning, dess funktion är enbart att svara på masterns order.
Modbus TCP är en variant av standard Modbus, eftersom det inte kan finnas mer än en enda master i ett system, så är det svårt, för att inte säga direkt omöjligt för ett övervakande system att läsa av vad som händer i MODBUS-nätet.
Modbus TCP ansluter till en MODBUSTCP-server, vilket alltid är mastern i systemet, via MODBUSD-tcp kan man sub-adressera slavarna i systemet, dvs ModbusTCP-klienten frågar servern (dvs mastern) om data från slav 127, mastern går då ut och hämtar de önskade registern från slav 127 och skickar dessa vidare via sin inbyggda modus-TCP-server till Modbus-TCP-klienten i det överordnade systemet.
Det är det enda sättet som ett övervakande system kan övervaka ett modbussnätverk.
Re: modbus tcp problem - delar går ej läsa, förslag?
Exakt vilka fel får du?bilden tidigare visade ett svar jag fick, längderna på data varierade. Nu försöker jag hämta samma data igen med samma inställningar men den vägrar ge mig något. skickar bara return på error... vad tusan är felet är det man gör fel? Fel verktyg att simulera svar med? förslag på bättre grejer?
Bättre grejjor, tja, har inte en aning om vad du använder, ej heller under vilket OS.
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: modbus tcp problem - delar går ej läsa, förslag?
Mina HMI-appar HMI Droid (Android) och Odrid HMI (iOS) kan konfigureras så att de inte läser annat än exakt de variabler man vill visa. Dock finns inte detta i testkörningsfunktionen i utvecklingsverktyget HMI Droid Studio ännu utan bara i själva apparna.Darn skrev: ↑26 augusti 2020, 21:58:15tack för förtydligandet, jag tyckte det var konstigt att jag inte kan läsa 125 register i ett enda svep, det hade underlättat asevärt, det jag tyckte var struligt är att ibland kunde jag läsa 10input register, ibland 13, ibland 4 beroende på var jag hämtar data ifrån. I detta fall kan man se i dokumentationen att det är hål exempelvis mellan 3x00034 och 3x00041...Jan Almqvist skrev: ↑23 augusti 2020, 19:15:47 Vissa slavar har "hål" i sin map och då kan man inte alltid läsa över hålet utan det går bara att läsa de variabler som är definerade i mappen.
(Som default läser apparna större områden om man har utspridda variabler, detta för att få bättre prestanda.)
Edit: HMI Droid och Odrid HMI läser alltid hela bytes med Discrete Inputs och Coils och detta går inte att stänga av så det kan vara problem att läsa just dessa datatyper.
Re: modbus tcp problem - delar går ej läsa, förslag?
enl dokumentationen på https://fsp.ostberg.com/products/front/ ... u-100-t-ec
försöker jag läsa från 0x00001 till 0x00004
där
-r1: read bit(s) (function 1)
-u unit_id: set the modbus "unit id" (hittar dock inte unit id, skiftar jag i aggregatet via displayen till rs485 blir addressen 1, skiftar jag tillbaka tcp/ip står bara port under modbus men under nätverksinställningar står serienr 34, provat även blankt, samma fel)
-n value_number: number of values to read
och det blir fel.....
använder mig av pymodslave och mbget i simulering på min egna dator, får jag svar på coils och kan även läsa register....
jag är inte så van med android eller ios system, försöker mig hålla mig till att prova på rpinJan Almqvist skrev: ↑27 augusti 2020, 07:11:21 Mina HMI-appar HMI Droid (Android) och Odrid HMI (iOS) kan konfigureras så att de inte läser annat än exakt de variabler man vill visa. Dock finns inte detta i testkörningsfunktionen i utvecklingsverktyget HMI Droid Studio ännu utan bara i själva apparna.
som jag förstått modbus tcp är aggregatet "server" och jag är "client" men när man simulerar kopplar man upp sig mot en "slave" och då antar jag att jag är master?
Uppenbart gör jag något fel
Re: modbus tcp problem - delar går ej läsa, förslag?
Det är nog din klient som är problemet.
Vilket OS kör du?
Om du skall läsa säg fyra "Coils" så:
Ange vilke IP-adress du skall ansluta till
Ange vilken Modbus adress du skall läsa från (borde vara 1 enligt dina uppgifter)
Ange kommando, dvs 01 (Läs coils)
Ange adress för först "Coil"
Ange antal Coils att läsa
Vilket OS kör du?
Om du skall läsa säg fyra "Coils" så:
Ange vilke IP-adress du skall ansluta till
Ange vilken Modbus adress du skall läsa från (borde vara 1 enligt dina uppgifter)
Ange kommando, dvs 01 (Läs coils)
Ange adress för först "Coil"
Ange antal Coils att läsa
Re: modbus tcp problem - delar går ej läsa, förslag?
aggregatet vet jag inte.. detta fick jag ut...
Kod: Markera allt
pi@rpidomoticz:~/mbtget $ sudo nmap -p 502 -sV --script modbus-discover.nse 192.168.1.153
Starting Nmap 7.70 ( https://nmap.org ) at 2020-08-27 19:45 CEST
Nmap scan report for 192.168.1.153
Host is up (0.00052s latency).
PORT STATE SERVICE VERSION
502/tcp open tcpwrapped
MAC Address: 00:1F:68:02:00:23 (Martinsson Elektronik AB)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.07 seconds
Kod: Markera allt
pi@rpidomoticz:~/mbtget $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian