modbus tcp problem - delar går ej läsa, förslag?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Darn
Inlägg: 48
Blev medlem: 24 maj 2011, 18:26:19

modbus tcp problem - delar går ej läsa, förslag?

Inlägg av Darn »

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.. :x

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.
Bild
och bilden nedan är informationen jag också vill ha, där i mellan är bara brus.
Bild

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? :?:
nifelheim
Den första
Inlägg: 2325
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av nifelheim »

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. :)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45270
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av TomasL »

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.
Användarvisningsbild
Jan Almqvist
Inlägg: 1580
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av Jan Almqvist »

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45270
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av TomasL »

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.
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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45270
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av TomasL »

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.
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.
Användarvisningsbild
Jan Almqvist
Inlägg: 1580
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av Jan Almqvist »

@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?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45270
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av TomasL »

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.
Darn
Inlägg: 48
Blev medlem: 24 maj 2011, 18:26:19

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av Darn »

nifelheim skrev: 23 augusti 2020, 12:29:00 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 :-)

Var finns "bruset", vad är aggregatet för något, har du en register karta?
sorry för otydligheten.. här ligger registret
https://fsp.ostberg.com/products/front/ ... u-100-t-ec
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.
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...
TomasL 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.
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

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45270
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av TomasL »

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
I dina bilder finns det ingenting som säger att slaven svarar nej, du får de registren du begär, inget annat.
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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45270
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av TomasL »

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?
Exakt vilka fel får du?

Bättre grejjor, tja, har inte en aning om vad du använder, ej heller under vilket OS.
Användarvisningsbild
Jan Almqvist
Inlägg: 1580
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av Jan Almqvist »

Darn skrev: 26 augusti 2020, 21:58:15
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.
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...
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 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.
Darn
Inlägg: 48
Blev medlem: 24 maj 2011, 18:26:19

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av Darn »

TomasL skrev: 26 augusti 2020, 22:27:12 Exakt vilka fel får du?
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.....
Bild

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....
Bild
Jan 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.
jag är inte så van med android eller ios system, försöker mig hålla mig till att prova på rpin :)

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? :?: :humm:
Uppenbart gör jag något fel :wall:
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45270
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av TomasL »

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
Darn
Inlägg: 48
Blev medlem: 24 maj 2011, 18:26:19

Re: modbus tcp problem - delar går ej läsa, förslag?

Inlägg av Darn »

TomasL skrev: 27 augusti 2020, 19:51:18 Det är nog din klient som är problemet.
Vilket OS kör du?
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
och OS på terminalen jag försöker arbeta helst med är..

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
Skriv svar