Läsa Modbus med arduino

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Pratade med någon idag angående om CANopen och han rekommenderade det hellre än Modbus. Än fast Modbus fungerar riktigt bra. Orsaken har med att vid nya projekt så bör man välja nyare teknik. Men finns Modbus redan, så kör på det.

Det enda TCP/IP modul jag har kommit i kontakt med är faktiskt EtherCAT. Jag har en Modbus modul på hyllan, men den talar bara över HSI som fysiskt lager, vilket är en OneWire datasignal. Dyr som stryk är den också samt HSI protokollet är stängt.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

Du kanske skulle gå till baka och faktist´kt lära dig vad de olika protokollen gör och hur de fungerarar, eftersom du uppenbarligen inte har en aning
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Som jag sade innan. Jag gör en förstudie innan jag bestämmer mig.
Det där det du sa om register, att det det kan vara olika register beroende på tillverkare. Vissa kör floats, vissa kör uint32_t men standard är uint16_t. Detta tyder på att vissa modifierar Modbus efter eget behov och då tolkar jag det som att det finns stor chans att olika produktleverantörer med Modbus kan inte tala med varandra?
Användarvisningsbild
Icecap
Inlägg: 26151
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Läsa Modbus med arduino

Inlägg av Icecap »

Om data är 32 bit ska man begära 2 st 16 bit register och sedan stycka ihop det slutgiltiga värdet själv.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Ja. Det vet jag. Men hur vet jag det? Om jag har en enhet som talar modbus och jag vill läsa utav vissa givare. Då måste jag veta hur många register jag måste använda?
Det måste väll finnas några färdiga definitioner t.ex. anropa I/O 1,2,3,4?
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av JimmyAndersson »

Jag skulle vilja vidga perspektivet för en stund. :)

Daniel:
Jag vet ju vad du håller på att konstruera, men nu när det pratas om att välja *ett* protokoll/kommunikationssätt så började jag fundera:

Man har ju alltid mål.
Vilka tänker du dig är dina tänkta kunder för den här produkten? Dvs vilka typer av företag/privatpersoner är det du ser framför dig?
Mitt förslag är att du väljer det som *de* helst använder.
Eller åtminstone börjar med det.
Eller: Börja implementera det du personligen föredrar. Och fundera sen på hur/om du kan lägga till fler. :)



Jag kan dessvärre inga av de protokoll som nämns.
(Kan förstås tcp/ip, udp och sånt, men inte modbus etc.)
Däremot har jag gjort flera egna protokoll och tycker det är kul att klura på sånt.
Apropå det… jag har en tråd där jag löste det här med trådning på ett annat sätt. Ska se om jag hittar den.

Edit: Hittade tråden, men jag hade inte bifogat koden…
Jag hade iallafall gjort koden i Python och lösningen var att jag använde ”select” i stället för trådar.
(Det är “samma” select som finns i Unix, så det lär finnas något sånt i C.)

Länk till info om pythons select om du är nyfiken:
(Scrolla ner till ”select.select”)
https://docs.python.org/3/library/select.html
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Jag har kommit i kontakt med EtherCAT mycket. Men EtherCAT kräver faktiskt en speciell hårdvara dvs två nätverksanslutningar.
Modbus har jag inte kommit i kontakt med så mycket som är nya saker. Mest bara äldre apparater som har producerats sedan 90-talet har Modbus.

Jag står mellan valet av CANopen och Modbus. Jag har fått höra att CANopen börjar allt mer bli mer och mer bli populär för det är just CAN. Orsakerna är att CAN är eget "nätverk" och dagens företag vill inte att man kopplar upp sina tekniska lösningar på deras nätverk. Har varit med om att företagen har till och med nekat Siemens att koppla upp sina PLC:er hos detta företag. Orsaken har inte med att företaget inte litar på dom, men dokument skrivna för många år sedan har tagit ett fast beslut att allt som ska kopplas upp på nätet hos dom, måste djupt granskas först.

Målet som jag har är att överföra data och styra. Jag har inte behov utav att att överföra supersnabbt. Men någon bild är aldrig fel.
För J1939 så kan man max överföra 1785 bytes i 224 paket, där varje paket har 7 bytes data där första byte är indexeringen för dessa paket. Men J1939 är endast gjort för styrning och inget annat.

Så detta är grunden varför jag behöver något annat.
Jag tolkar Modbus som väldigt enkelt protokoll, men det blir ju lite problem om alla tillverkarna har egna versioner av Modbus.
CANopen tolkar jag mer som ett modernare sätt för styrning. Notera att CANopen är betydligt mycket svårare protokoll.

Jag använder mycket produkter av Hydac och alla produkter Hydac producerar som har Modbus är riktigt gamla. Men alla produkter som Hydac producerar som har CANopen är helt nya.
Användarvisningsbild
Icecap
Inlägg: 26151
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Läsa Modbus med arduino

Inlägg av Icecap »

RS485 kan köra 9600 baud över 1500 m, jag vet inte on CAN klarar detta. Eller om du behöver det heller.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

Icecap skrev: 1 oktober 2021, 22:59:45 Om data är 32 bit ska man begära 2 st 16 bit register och sedan stycka ihop det slutgiltiga värdet själv.
Eller också så begär man ett 32-bitars register, helt beroende på hur tillverkaren har implementerat det.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

DanielM skrev: 1 oktober 2021, 23:25:34 Ja. Det vet jag. Men hur vet jag det? Om jag har en enhet som talar modbus och jag vill läsa utav vissa givare. Då måste jag veta hur många register jag måste använda?
Det måste väll finnas några färdiga definitioner t.ex. anropa I/O 1,2,3,4?
Nä, du läser Register och Coils och Inputs, register delas in i två typer Holding och Input, där Holding är skrivbara. Coils är också skrivbara.
Inputs och Coils är 1 bit stora och register 16 bitar.

Så du applicerar helt enkelt korrekt kommando och vilket Register/Coil du vill läsa, samt eventuellt antal av dessa du vill läsa.
Det finns ett 20-tal kommandon tillgängliga, varav hälften är för diagnos och liknande.
Dock är inte alla kommandon nödvändigtvis implementerade i en slav.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

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.
Varför skulle man inte kunna det? Båda är ju differentiella signaler.
Det enda jag vet som skiljer mellan RS485 är CAN är att med CAN så behöver man inte tänka på vem som pratar i nätverket. CAN håller håll på att det inte blir krock.
TomasL skrev: 2 oktober 2021, 16:27:11
Icecap skrev: 1 oktober 2021, 22:59:45 Om data är 32 bit ska man begära 2 st 16 bit register och sedan stycka ihop det slutgiltiga värdet själv.
Eller också så begär man ett 32-bitars register, helt beroende på hur tillverkaren har implementerat det.
Detta finner jag som ett problem.
TomasL skrev: 2 oktober 2021, 17:42:44
DanielM skrev: 1 oktober 2021, 23:25:34 Ja. Det vet jag. Men hur vet jag det? Om jag har en enhet som talar modbus och jag vill läsa utav vissa givare. Då måste jag veta hur många register jag måste använda?
Det måste väll finnas några färdiga definitioner t.ex. anropa I/O 1,2,3,4?
Nä, du läser Register och Coils och Inputs, register delas in i två typer Holding och Input, där Holding är skrivbara. Coils är också skrivbara.
Inputs och Coils är 1 bit stora och register 16 bitar.

Så du applicerar helt enkelt korrekt kommando och vilket Register/Coil du vill läsa, samt eventuellt antal av dessa du vill läsa.
Det finns ett 20-tal kommandon tillgängliga, varav hälften är för diagnos och liknande.
Dock är inte alla kommandon nödvändigtvis implementerade i en slav.
Detta känner jag till. Jag har kört EasyModbus via Socket och det har fungerat bra. Men det var i Java och för inbyggda system är det C som gäller.

Problemet med alla modbusbibliotek på Github är att dom har dynamisk allokering.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

Skaffa ett riktigt modbus-bibliotek, dock kostar det pengar.
Själv använder jag https://www.embedded-experts.at/en/feld ... me/modbus/
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Läsa Modbus med arduino

Inlägg av DanielM »

Inte lika kul att använda något färdigt. Har tankar på att skriva eget mest bara för lärdomens skull.

Sedan är detta bibliotek skrivet efter ANSI C. Är inte det lite...omodernt i dagens läge? C99 gjordes betydliga förbättringar och sedan C11 infördes generics vilket är väldigt användbart.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa Modbus med arduino

Inlägg av TomasL »

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.
hummel
Inlägg: 2269
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Läsa Modbus med arduino

Inlägg av hummel »

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