Ett bra sätt att få kommunikation mellan PI & Arduino?
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Går det snabbare att implementera än att hitta nåt "som redan finns" så brukar detta vara att föredra.
I detta fall är implementation av mitt förslag mycket snabbare än att hitta och anpassa något redan befintligt, då det är sällsynt man hittar exakt det man vill ha.
Ska man exempelvis implementera en Ethernet stack då vil man gärna börja med nåt befintligt för att slippa uppfinna hjulet på nytt men detta är mycket mer komplicerat.
I detta fall är implementation av mitt förslag mycket snabbare än att hitta och anpassa något redan befintligt, då det är sällsynt man hittar exakt det man vill ha.
Ska man exempelvis implementera en Ethernet stack då vil man gärna börja med nåt befintligt för att slippa uppfinna hjulet på nytt men detta är mycket mer komplicerat.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Modbus-RTU är ett utmärkt och enkelt protokoll. Lätt att implementera och är man lat implementerar man bara det man behöver för stunden.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Jag uppfattar dig som att man ska skriva C-kod för hand och skicka ett bit i taget, och tills slut bygga eget "bibliotek"?
Jag ska alltså inte skicka text mellan Arduino och Pi. Snarare så ska jag skicka ASCII-kod mellan enheterna så dem får tala med varandra.
Jag ska alltså inte skicka text mellan Arduino och Pi. Snarare så ska jag skicka ASCII-kod mellan enheterna så dem får tala med varandra.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Det är inte bara. Jag måste ju ändå skriva C-kod som ändrar ingångarna till hög/låg osvlillahuset skrev:Modbus-RTU är ett utmärkt och enkelt protokoll. Lätt att implementera och är man lat implementerar man bara det man behöver för stunden.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Al, läs på lite grand så kanske det går lättare för dig. Och när det gäller din Arduino så blir du väl tvungen att använda C eller liknande.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Jo, men ni talar som att "det är bara!". Men det är inte bara.
Jag måste först hitta ett bibliotek för att kunna använda sig av ModBus-RTU protokollet som passar för Arduino.
Jag får väll använda Raspberry PI's inbyggda GPIO pinnar om jag inte får något annat att fungera - som vanligt.
Jag måste först hitta ett bibliotek för att kunna använda sig av ModBus-RTU protokollet som passar för Arduino.
Jag får väll använda Raspberry PI's inbyggda GPIO pinnar om jag inte får något annat att fungera - som vanligt.
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
WTF?Jag ska alltså inte skicka text [...] Snarare så ska jag skicka ASCII-kod
Och jo, det är faktiskt "det är bara" som gäller i de flesta fall om man vill ha det rätt på en gång.
Det är det här som är problemet med klipp & klistra-programmerare. Finns det inget att kopiera från blir ni handlingsförlamade.
Edit:
Du får garanterat hjälp här på forumet med koden så länge du visar på att du faktiskt gjort ett seriöst försök själv.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Ascii = textsträngar
Jag garanterat att det är mycket snabbare att skicka de bytes jag sagt än implementera Modbus-RTU på raspberry pi och arduino.
Ex:
UART_Send(1); // kommando, sätt GPIO
UART_Send(0); // 0 = port A
UART_Send(0x01); // mask för lägsta biten
UART_Send(0x01); // sätt lägsta biten hög
checksum = 1+0+0x01+0x01;
UART_Send(checksum);
Det var väl inte så svårt?
Och du kommer inte komma undan skriva egen C-kod i Arduino om du inte hittar ett färdigt projekt som är precis som du vill ha det.
Jag garanterat att det är mycket snabbare att skicka de bytes jag sagt än implementera Modbus-RTU på raspberry pi och arduino.
Ex:
UART_Send(1); // kommando, sätt GPIO
UART_Send(0); // 0 = port A
UART_Send(0x01); // mask för lägsta biten
UART_Send(0x01); // sätt lägsta biten hög
checksum = 1+0+0x01+0x01;
UART_Send(checksum);
Det var väl inte så svårt?
Och du kommer inte komma undan skriva egen C-kod i Arduino om du inte hittar ett färdigt projekt som är precis som du vill ha det.
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Jo det skulle fungera bra* men fördelen med t.ex. Modbus är att det är standardiserat, större chans att du kan återanvända samma kod i andra projekt, och att det är adresserbart så du kan ha flera enheter på samma serielina.
*) med reservation för checksumman.. Addition kan fortfarande ge rätt summa för enbitsfel i vissa fall. Använd hellre någon standardiserad CRC-algoritm, eller ännu hellre någon form av ECC.
*) med reservation för checksumman.. Addition kan fortfarande ge rätt summa för enbitsfel i vissa fall. Använd hellre någon standardiserad CRC-algoritm, eller ännu hellre någon form av ECC.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Instämmer med checksumma men tog bara enklast möjliga.
Jag tror Al har mer nytta av att lära sig implementra detta själv då det är ett bra programneringstest och liknande utnaningar återkommer ofta fast med vissa modifierangar.
Jag tror Al har mer nytta av att lära sig implementra detta själv då det är ett bra programneringstest och liknande utnaningar återkommer ofta fast med vissa modifierangar.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Nja skall man vara petig, så har varenda tillverkare av Modbussapparater sin egen standard, ofta olika standarder på olika produktserier.Modbus är att det är standardiserat
Kontentan är att Modbus kan vara väldigt stökigt, tro mig, jag vet
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Hmm okej det var ju mindre bra. Jag har bara använt modbus i PLC:er där protokollet redan finns färdigt så jag ingen direkt erfarenhet av det på bitnivå. Jag utgick bara från vad wikipedia sa.
Edit:
Nu fick jag lust att implementera det själv bara för att testa
Edit:
Nu fick jag lust att implementera det själv bara för att testa
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Om jag inte minns helt fel så är (eller var när jag höll på med det) Modbus väl standardiserat utom när det gäller representation av heltal med mer än 16 bitar och flyttal.
Sedan att saker och ting kan ligga på helt olika portar i olika system är ju inget brott mot någon standard eftersom det inte är standardiserat.
Sedan att saker och ting kan ligga på helt olika portar i olika system är ju inget brott mot någon standard eftersom det inte är standardiserat.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Problemet är att Modbus-standarden fortfarande befinner sig på 70-talsnivå, samma som när den engång skapades.
Utvecklingen har sprungit iväg från relälogik, kan man säga.
Problemet uppkommer när tillverkarna implementerar 32 och 64-bitars register, vilket är rätt vanligt i dag.
En del tillverkare låter mastern läsa/skriva 2 resp 4 16-bitarsregister, en hos en del är det rena 32 och 64-bitars register som läses/skrives som ett register.
Följaktligen, skall man skriva till ett 32/64 bitars register så använder man antingen "Write Single register" med funktionskod 0x06 eller "Write Multiple Register" med funktionskoden 0x16 helt beroende på hur tillverkaren valt att implementera det hela
För att krångla till det ytterligare så använder en del Little Endian en del Big Endian, dvs om ett 32-bitarsregister skickas, ordningen på de två 16-bitars orden som då skickas, en del tillverkare skickar data som heltal, en del som flyttal.
Dessutom är det inte säkert att två produktserier från samma tillverkare är likadana.
Utvecklingen har sprungit iväg från relälogik, kan man säga.
Problemet uppkommer när tillverkarna implementerar 32 och 64-bitars register, vilket är rätt vanligt i dag.
En del tillverkare låter mastern läsa/skriva 2 resp 4 16-bitarsregister, en hos en del är det rena 32 och 64-bitars register som läses/skrives som ett register.
Följaktligen, skall man skriva till ett 32/64 bitars register så använder man antingen "Write Single register" med funktionskod 0x06 eller "Write Multiple Register" med funktionskoden 0x16 helt beroende på hur tillverkaren valt att implementera det hela
För att krångla till det ytterligare så använder en del Little Endian en del Big Endian, dvs om ett 32-bitarsregister skickas, ordningen på de två 16-bitars orden som då skickas, en del tillverkare skickar data som heltal, en del som flyttal.
Dessutom är det inte säkert att två produktserier från samma tillverkare är likadana.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Varför så nedlåtande?
Det var väl ungefär vad jag skrev men inte fullt så utförligt.
Att det är en gammal standard gör det inte till en dålig standard. Den duger väldigt bra till väldigt många tillämpningar.
Det var väl ungefär vad jag skrev men inte fullt så utförligt.
Att det är en gammal standard gör det inte till en dålig standard. Den duger väldigt bra till väldigt många tillämpningar.