Läsa Modbus med arduino

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

Om jag tänker skicka X bytes data så slipper jag skapa X antal register
Faktum är att du redan har skapat dem iom att du har variabler och konstanter.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4689
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av Swech »

Kör du modbus skall du vara klar över att slaven aldrig kan tala om för mastern att något har hänt
utan den får snällt vänta på att mastern frågar om något hänt.
I en tillämpning som vi kör är detta en nackdel då mastern måste köra polling på slaven
för att detektera driftslarm

Swech
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

TomasL skrev: 5 oktober 2021, 23:05:45
Om jag tänker skicka X bytes data så slipper jag skapa X antal register
Faktum är att du redan har skapat dem iom att du har variabler och konstanter.
Så i Modbus kan man inte skicka paket?
Alltså man skickar först ett paket hur många bytes man vill ha och i hur många paket. Där efter skickar slaven paketen i korrekt ordning?
TomasL skrev: 5 oktober 2021, 22:55:29 Modbusstandarden kommer knappast att ändras någonsin
Om du bara skall skicka data, så skicka data utan något speciellt protokoll.
Du behöver ju då inte ha med kompabilitet med andra enheter.

Det är ju bara att packa ihop data , köra crc, och skicka allt.
Det låter bra. CANopen verkar ändras hela tiden. Nya dokument för varje år kommer upp för CANopen. Jag vet inte varför CANopen verkar vara så enormt. Men det finns säkert ett behov av komplext protokoll också. Eller så kan det vara den tyska kulturen bakom protokollet med tanke på att CANopen är tyskt. Alla tyska tekniska saker är överdrivet komplicerat.
´
Swech skrev: 5 oktober 2021, 23:07:39 Kör du modbus skall du vara klar över att slaven aldrig kan tala om för mastern att något har hänt
utan den får snällt vänta på att mastern frågar om något hänt.
I en tillämpning som vi kör är detta en nackdel då mastern måste köra polling på slaven
för att detektera driftslarm

Swech
Så är alla protokoll. Frågar man inte, så får man inte veta.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4689
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av Swech »

Nej - så är inte alla protokoll

Swech
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Du får nämna några.

Som jag vet så är det oftast så när det kommer till Server - Klient

Även om J1939 har inte Server - Klient, så måste varje ECU fråga andra ECU:er om deras DM1 meddelanden.

TomasL: Är Modbus ASCII föråldrat?
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Läsa Modbus med arduino

Inlägg av Klas-Kenny »

I J1939 (och typ alla andra CAN-protokoll) är det ofta så att enheter skickar ut en massa data på bussen rätt om någon ber dem eller ej.

Exempelvis en dieselmotor rapporterar varvtal med jämna mellanrum, det är bara för någon på bussen att börja lyssna efter dem.
Du behöver inte ligga och fråga motorn hela tiden "Vad har du för varvtal?".


Tillägg: Sen skickar såklart inte alla allt hela tiden. Vissa saker måste man såklart fråga efter, såsom DM1-meddelanden.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Ja, det stämmer. Men det finns även möjlighet att fråga ECU enheterna om varvtal. Det är jobbigt att belasta nätverket i onödan.
FormerMazda
Inlägg: 6066
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Läsa Modbus med arduino

Inlägg av FormerMazda »

De flesta protokoll är pollande, men inte alla som sagt. I min värld så är en bråkdel händelsestyrt, i övrigt pollande. Modbus är pollande.
Inom ställverk är det ofta händelsebaserat, kanske uteslutande. Kolla IEC61850 mfl., och att kommunicera med ställverk i ett system byggt främst för pollande kommunikation är lite .. tråkigt. :)

Jag har skummat i tråden emellanåt, men aldrig fattat, vad vill du uppnå? Ingen ifrågasättning, en fråga helt enkelt.
Jag läser om stor vikt vid att skicka data, vad är det för data? Temperaturer, indikeringar, ljudböcker, recept eller vad?
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Läsa Modbus med arduino

Inlägg av Klas-Kenny »

DanielM skrev: 6 oktober 2021, 13:30:11 Ja, det stämmer. Men det finns även möjlighet att fråga ECU enheterna om varvtal. Det är jobbigt att belasta nätverket i onödan.
Men behöver du ett visst värde var tionde millisekund, så är det mindre belastning för samtliga (slav, master, nätverk) om det helt enkelt skickas var tionde millisekund, än att mastern ska ligga och fråga var tionde millisekund.
Således är det en stor fördel att kunna skicka saker "automatiskt" från slav till master vilket då Modbus tydligen inte har stöd för (har inte jobbat med Modbus själv).

Det bästa är kombinationen. Det som behöver skickas cykliskt skickas cykliskt (eller händelsestyrt). Det som inte behöver det, pollas. Det kan CAN med J1939 mfl.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

FormerMazda skrev: 6 oktober 2021, 13:30:54 De flesta protokoll är pollande, men inte alla som sagt. I min värld så är en bråkdel händelsestyrt, i övrigt pollande. Modbus är pollande.
Inom ställverk är det ofta händelsebaserat, kanske uteslutande. Kolla IEC61850 mfl., och att kommunicera med ställverk i ett system byggt främst för pollande kommunikation är lite .. tråkigt. :)

Jag har skummat i tråden emellanåt, men aldrig fattat, vad vill du uppnå? Ingen ifrågasättning, en fråga helt enkelt.
Jag läser om stor vikt vid att skicka data, vad är det för data? Temperaturer, indikeringar, ljudböcker, recept eller vad?
Jag började med att vilja få lite kommunikation över USB mellan en STM32 och PC. Då skrev jag ihop något halvtaskigt protokoll. Men behovet växte och protokollet blev bara större och större och större. Då tänkte jag att istället för att skapa ett halvtaskigt protokoll som jag bara ska använda en gång, då är det bättre att jag använder ett färdigt protokoll som jag kan använda till andra projekt också. Det ska jag nämligen göra. Bland annat kommunikation med TCP/IP.

Jag har redan ett protokoll för J1939 som jag har skrivit. Fungerar mycket bra, men det är inte gjort för allmän kommunikation.
Då har jag två val:
- Modbus
- CANopen

Båda fungerar, båda är bra, båda löser problemet. Men Modbus är enklare och CANopen är svårare. Dessutom så är inte CANopen riktigt "open". Många av deras dokument är stängda och endast tillgängliga för CAN-CiA medlemmar som utvecklar CANopen. Dessutom, trots att CANopen har stöd för TCP/IP, så finns det inga produkter ute på marknaden som har CANopen med nätverkskort.

Trots att CANopen är helt enkelt ett mer modernare och bättre än Modbus, så passar det helt enkelt inte med det jag vill göra på grund utav sina begräsningar i information. Modbus är 100% fritt och öppet, vilket inte CANopen är. Jag trodde CANopen var det. Jag har dessutom svårt att tolka vad ett CANopen protokoll säger då det är mycket runt om kring data-ramen som jag ej kan tolka om det är nödvändig information eller mest bara tyska byråkratiska paragrafriddare som har varit i farten.

Så det blev helt enkelt Modbus. Det som verkligen vägde mest var Modbus TCP/IP. Jag har som mål att använda Modbus över USB. Då ska min dator vara master och min STM32 ska vara slaven.

Något som jag tycker är häftigt är att denna frekvensriktare som jag har kört har även Modbus RTU. Jag vet dock inte varför denna har CAN-bus, när den bara pratar om Modbus.
https://manualzz.com/doc/28239401/user- ... 2P26xqduU0
Klas-Kenny skrev: 6 oktober 2021, 13:35:01
DanielM skrev: 6 oktober 2021, 13:30:11 Ja, det stämmer. Men det finns även möjlighet att fråga ECU enheterna om varvtal. Det är jobbigt att belasta nätverket i onödan.
Men behöver du ett visst värde var tionde millisekund, så är det mindre belastning för samtliga (slav, master, nätverk) om det helt enkelt skickas var tionde millisekund, än att mastern ska ligga och fråga var tionde millisekund.
Således är det en stor fördel att kunna skicka saker "automatiskt" från slav till master vilket då Modbus tydligen inte har stöd för (har inte jobbat med Modbus själv).

Det bästa är kombinationen. Det som behöver skickas cykliskt skickas cykliskt (eller händelsestyrt). Det som inte behöver det, pollas. Det kan CAN med J1939 mfl.
Jag förstår vad du menar. Men mastern kan skicka meddelanden till slavarna för så slavarna utför det mastern vill att dom ska göra, i Modbus?
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Läsa Modbus med arduino

Inlägg av Klas-Kenny »

DanielM skrev: 6 oktober 2021, 13:46:04 Något som jag tycker är häftigt är att denna frekvensriktare som jag har kört har även Modbus RTU. Jag vet dock inte varför denna har CAN-bus, när den bara pratar om Modbus.
https://manualzz.com/doc/28239401/user- ... 2P26xqduU0
Det är en fördel om man hämtar manualer direkt ifrån tillverkaren istället för från någon random-sida. :)
Här finns CAN-bussen beskriven:
https://www05.beijerelectronics.com/API ... E6B7D960/0

DanielM skrev: 6 oktober 2021, 13:46:04 Jag förstår vad du menar. Men mastern kan skicka meddelanden till slavarna för så slavarna utför det mastern vill att dom ska göra, i Modbus?
Jag har aldrig jobbat med Modbus, så har ingen koll på det.
Men så förutsätter jag att det fungerar, annars vet jag inte vad man skulle med kommunikationen till. :lol:
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

DanielM skrev: 6 oktober 2021, 11:29:49
Så i Modbus kan man inte skicka paket?
Frågan är vad du menar med "paket"
Benämningen "Paket" kommer från IP-protokollet

Där ett meddelande inte kan vara större än en Ethernet-frame, dvs totalt runt 1522 byte
Vilket då kallas för ett ethernet-paket.
Är meddelandet längre styckas det upp och det skickas flera numrerade paket, vilka då, av mottagaren sätts samman till ett komplett meddelande.

Modbus på en seriell lina är historiskt begränsat till en meddelandelängd om 256 bytes.
Det handlar då om hur stora buffertar och vilken kapacitet en PLC har.
Så, för Modbus är meddelandelängd och paketlängd samma sak
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Klas-Kenny skrev: 6 oktober 2021, 13:58:04
DanielM skrev: 6 oktober 2021, 13:46:04 Något som jag tycker är häftigt är att denna frekvensriktare som jag har kört har även Modbus RTU. Jag vet dock inte varför denna har CAN-bus, när den bara pratar om Modbus.
https://manualzz.com/doc/28239401/user- ... 2P26xqduU0
Det är en fördel om man hämtar manualer direkt ifrån tillverkaren istället för från någon random-sida. :)
Här finns CAN-bussen beskriven:
https://www05.beijerelectronics.com/API ... E6B7D960/0

DanielM skrev: 6 oktober 2021, 13:46:04 Jag förstår vad du menar. Men mastern kan skicka meddelanden till slavarna för så slavarna utför det mastern vill att dom ska göra, i Modbus?
Jag har aldrig jobbat med Modbus, så har ingen koll på det.
Men så förutsätter jag att det fungerar, annars vet jag inte vad man skulle med kommunikationen till. :lol:
Har du jobbat med CANopen? Nu när jag ser att denna frekvensriktare har CANopen så verkar protokollet inte alls så farligt.

Om vi börjar med tabell 1 så finns det olika typer av meddelanden vi kan skicka.
Skärmklipp1.PNG
Tittar vi på CANopen dataramen så ser vi att om vi ska anropa enhet 10 med PDO2 TX så måste funktionskoden vara 0x280 och adressen ska vara 0xA. Så 0x280 + 0xA = 0x28A.
Skärmklipp1.PNG
Du vet inte nämligen hur jag ska tolka detta? Vore intressant.
Skärmklipp1.PNG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

TomasL skrev: 6 oktober 2021, 14:09:13
DanielM skrev: 6 oktober 2021, 11:29:49
Så i Modbus kan man inte skicka paket?
Frågan är vad du menar med "paket"
Benämningen "Paket" kommer från IP-protokollet

Där ett meddelande inte kan vara större än en Ethernet-frame, dvs totalt runt 1522 byte
Vilket då kallas för ett ethernet-paket.
Är meddelandet längre styckas det upp och det skickas flera numrerade paket, vilka då, av mottagaren sätts samman till ett komplett meddelande.

Modbus på en seriell lina är historiskt begränsat till en meddelandelängd om 256 bytes.
Det handlar då om hur stora buffertar och vilken kapacitet en PLC har.
Så, för Modbus är meddelandelängd och paketlängd samma sak
När man skickar data så brukar man oftast skriva hur mycket bytes man skickar och i hur många paket. Sådant gör man i J1939 och jag förmodar att man gör så i alla protokoll. Annars vore det konstigt. Hur annars ska man beskriva hur mycket data man skickar?
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Läsa Modbus med arduino

Inlägg av Icecap »

Måste ett protokoll innbära att man skickar med hur många bytes det är?

Och tillåt mig att svara för dig så det blir rätt: Nej.

Ett protokoll kan vara av en fast storlek - eller variabel storlek.
Det kan skicka med antal data - och det kan låta bli.
Det kan finnas checksum för att kunde sortera störda data - och det går fint utan.

Ett protokoll är helt enkelt en beskrivelse av hur data ska formatteras för att två eller fler enheter kan förstå varandra.

Att det finns många olika standardprotokoller är för att varje applikation kan ha specifika krav med hastighet, datamängd, feltolerans osv.

Många har frågat dig om EXAKT VAD uu vill uppnå - men i vanlig ordning möljar du på med protokoller och vilka som är bäst till de <OSPECIFIKA> ändamål du har.

Jag har lyckats mycket väl med ren textbaserat protokoller i många enheter - men fan om jag ville överföra en del MB på kort tid på det vis.

Så exakt VAD vill du uppnå?
Skriv svar