Läsa Modbus med arduino

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

Re: Läsa Modbus med arduino

Inlägg av TomasL »

Det har iofs inte så mycket med data-protokollet att göra, utan snarare den elektiska specifikationen för mediet att göra.
hummel
Inlägg: 2268
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Läsa Modbus med arduino

Inlägg av hummel »

Visst är det så men i den här tråden blandas det hej vilt mellan himmel och jord. :-)
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

TomasL skrev: 2 oktober 2021, 22:22:28 Tja, det heter kompabilitet, dvs du kan problemfritt kompilera biblioteket oavsett vilken kompilator du använder, därav ANSI.

Tja, visst kan du skriva ett eget, det är ju inte så svårt, men varför gå över ån efter vatten.
Dock skall du tänka på timing-kraven, vilket kan stöka till det om du skall ha det portabelt.

Känner inte till någon kompilator som endast kan använda sig av C från 80-talet.

Jag har ett svagt minne att du sa en gång i tiden "Jag skriver alltid mina bibliotek själv för det man hittar på internet är oftast dåligt skrivet".
hummel skrev: 2 oktober 2021, 22:40:42
Icecap skrev: 2 oktober 2021, 14:20:54 RS485 kan köra 9600 baud över 1500 m, jag vet inte on CAN klarar detta. Eller om du behöver det heller.
CAN klarar följande:
Speed in bit/s - Maximum Cable Length
- 1 Mbit/s - 20 m (65 ft)
- 800 kbit/s - 40 m (131 ft)
- 500 kbit/s - 100 m (328 ft)
- 250 kbit/s - 250 m (820 ft)
- 125 kbit/s - 500 m (1640 ft)
- 50 kbit/s - 1000 m (3280 ft)
- 20 kbit/s - 2500 m (8202 ft)
- 10 kbit/s - 5000 m (16404 ft)

Men vanligast är i fordon och då lär det oftast vara kortare än 40 m.
Hur är RS485 i jämförelse?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45298
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

Jag har ett svagt minne att du sa en gång i tiden "Jag skriver alltid mina bibliotek själv för det man hittar på internet är oftast dåligt skrivet".
Normalt sett ja, men ibland hittar man bra libbar, och då tenderar jag att använda dem.
Min kommentar var troligen mer riktad mot standard-libben som inkluderas, då de av olika naturliga orsaker tenderar att bli rätt stora och klumpiga, dessutom, eftersom jag normalt alltid använder ett RTOS, så måste ju biblioteken vara tråd-säkra, vilket alltid inte är fallet.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45298
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

Hur är RS485 i jämförelse?
Listan ä nog RS485, och inget annat.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

RS485 må vara snabbare än CAN. Men vi får inte glömma att det finns CAN-FD, vilket är senaste versionen av CAN som kan skicka upp till 5 Mb/s.

Själv kör jag CAN 2.0B där B står för en version som kunde ha utökat ID hos CAN meddelandet. CAN 2.0B är viktigt om man vill köra J1939 för J1939 kräver utökat ID.

Men en nackdel som jag har hört med RS485 är att det finns risk för kollision hos meddelanden. Det finns det inte för CAN då CAN modulen kollar först om nätverket är upptaget eller inte.
H.O
Inlägg: 5715
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Läsa Modbus med arduino

Inlägg av H.O »

Nej det gör den inte.
Men om två (eller flera) enheter "tävlar" om bussen genom att försöka skicka meddelande samtidigt så kommer den enhet vars skickade meddelande har lägst ID att "vinna".
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Är det inte så att CAN kollar först om nätverket är ledigt. Sedan skickar den?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45298
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

DanielM skrev: 3 oktober 2021, 11:25:56 RS485 må vara snabbare än CAN. Men vi får inte glömma att det finns CAN-FD, vilket är senaste versionen av CAN som kan skicka upp till 5 Mb/s.

Själv kör jag CAN 2.0B där B står för en version som kunde ha utökat ID hos CAN meddelandet. CAN 2.0B är viktigt om man vill köra J1939 för J1939 kräver utökat ID.

Men en nackdel som jag har hört med RS485 är att det finns risk för kollision hos meddelanden. Det finns det inte för CAN då CAN modulen kollar först om nätverket är upptaget eller inte.
Nu blandar du ihop saker igen.
RS485 är en fysisk standard som specificerar spänningsnivåer, typ av kabel osv.
Det har ingenting med att sända data.
CAN använder också RS485 i vissa applikationer. Huruvida det blir krockar på linan är upp till data-protokollet. Det har inget med RS485 att göra.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45298
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

DanielM skrev: 3 oktober 2021, 12:10:11 Är det inte så att CAN kollar först om nätverket är ledigt. Sedan skickar den?
Det gör i princip alla protokoll.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

TomasL skrev: 3 oktober 2021, 12:11:35
DanielM skrev: 3 oktober 2021, 11:25:56 RS485 må vara snabbare än CAN. Men vi får inte glömma att det finns CAN-FD, vilket är senaste versionen av CAN som kan skicka upp till 5 Mb/s.

Själv kör jag CAN 2.0B där B står för en version som kunde ha utökat ID hos CAN meddelandet. CAN 2.0B är viktigt om man vill köra J1939 för J1939 kräver utökat ID.

Men en nackdel som jag har hört med RS485 är att det finns risk för kollision hos meddelanden. Det finns det inte för CAN då CAN modulen kollar först om nätverket är upptaget eller inte.
Nu blandar du ihop saker igen.
RS485 är en fysisk standard som specificerar spänningsnivåer, typ av kabel osv.
Det har ingenting med att sända data.
CAN använder också RS485 i vissa applikationer. Huruvida det blir krockar på linan är upp till data-protokollet. Det har inget med RS485 att göra.
CAN är också en fysisk standard.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av sodjan »

> Är det inte så att CAN kollar först om nätverket är ledigt.

Det spelar ingen roll. Två kan kolla samtidigt och sen börja sända samtidigt.
Det intressanta är hur det hanteras då det händer. Det är specificerat i CAN.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Dom som utvecklade CAN utvecklade CAN för att det skulle vara säkert och stabilt. Så all fokus har lagts där. Snabbheten har CAN dock inte varit känd för. Det är först sedan 2012 som CAN FD kom till där man kunde skicka 64 bytes som data istället för 8 bytes. CAN FD sägs vara ännu mer säkrare. Jag vet inte hur. Men denna sida förklarar lite kort om CAN FD.
https://www.csselectronics.com/pages/ca ... rate-intro
H.O
Inlägg: 5715
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Läsa Modbus med arduino

Inlägg av H.O »

Är det inte så att CAN kollar först om nätverket är ledigt. Sedan skickar den?
Nej. Eller, den skickar så klart inte när som helst. En nod som vill skicka ett meddelande väntar tills föregående meddelande på bussen är "slut" - sen börjar den skicka sitt meddelande. Men, det kan ju fler än EN nod göra och därmed kan fler än en nod börja skicka i princip samtidigt. Läs på om bus arbitration
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

TomasL skrev: 3 oktober 2021, 12:18:14
DanielM skrev: 3 oktober 2021, 12:10:11 Är det inte så att CAN kollar först om nätverket är ledigt. Sedan skickar den?
Det gör i princip alla protokoll.
Jag har kollat upp lite jämförelser mellan Modbus och CANopen och det verkar som att Modbus är ett rent av förenklat protokoll och CANopen är en mer detaljerad standard.
Nackdelarna med Modbus som jag har sett är att Modbus är osäkert och det är mycket upp till skaparna att välja hur registerna ska utformas.

Medan CANopen är mer detaljerad, bestämmer hur signalerna ska se ut samt vilka signaler som får finnas.
Bland annat så har CANopen standarder för allt, för den verkar täcka allt från givare till batterier.

Modbus passar alltså små problem där man behöver skicka data från punkt A till punkt B.
https://www.rtautomation.com/rtas-blog/ ... se-modbus/

Rätta mig gärna om artikeln är fel. För jag söker verkligen ett enkelt protokoll, men som jag läser in denna artikel, så verkar Modbus inte alls vara ett säkert protokoll.
Skriv svar