Ett bra sätt att få kommunikation mellan PI & Arduino?
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Jag skrev nog mitt samtidigt som du, alternativt så såg jag inte ditt inlägg.
Ja, det är en bra standard och rätt enkel att implementera om man är medveten om just detta med 32 och 64-bitars register samt endinessen på dessa register.
En annan grej som kan ge ytterligare en massa smolk i bägaren, Modbus över serielina, dvs RS232/RS422/RS485 osv, skall använda 8 bitar + paritet + en stoppbit, eller 8 bitar + 2 stoppbitar. Alla tillverkare stöder inte alltid detta, vilket kan skapa problem.
Ja, det är en bra standard och rätt enkel att implementera om man är medveten om just detta med 32 och 64-bitars register samt endinessen på dessa register.
En annan grej som kan ge ytterligare en massa smolk i bägaren, Modbus över serielina, dvs RS232/RS422/RS485 osv, skall använda 8 bitar + paritet + en stoppbit, eller 8 bitar + 2 stoppbitar. Alla tillverkare stöder inte alltid detta, vilket kan skapa problem.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Hej Al, du är en underhållande personlighet och varje gång jag ser en ny tråd du startat så förväntar jag mig en stunds underhållande läsning
Ur mitt perspektiv läser jag din nu aktuella frågeställning lite så här:
En lärd man jag studerat för hade på sin dörr citatet: An expert is a man who has made all the mistakes which can be made, in a narrow field. (Niels Bohr)
Men jag tycker att du ska titta på enklare lösningar och sätta dig in i hur enkla de är.
Det finns massor av IO-expanders för både i2c och spi som du kan sätta direkt på din paj och helt slippa all programmering av en arduino.
Både som moduler att bara koppla kablar till och som rena IC som du kan bygga på labbplatta med.
Allt du behöver göra är att lära dig hur du aktiverar de portarna på pajen samt hur du i linux ger en användare rätt att läsa och skriva på de portarna.
Det går mycket fortare än att skapa ett projekt för arduino och uppfinna ett protokoll för kommunikationen.
Men för att besvara din fråga i rubriken: Använd UART på båda sidor, men det finns ingen anledning att göra det alls.
Lycka till!
Ur mitt perspektiv läser jag din nu aktuella frågeställning lite så här:
Svaren kommer ofta med lösningar som är på en låg komplexitetsnivå:HEJ!!
Jag har hört att man kan köra minräknare i datorn om man har windows, därför har jag beställt en cludserver med windows super server ultamate edition på den coolaste serverfamen, och ett ethernet till RS232 interface.
Det interfacet ska jag sätta hos min måg som har fiber via ComHem, och koppla ihop det med en Casio fx-82 http://www.voidware.com/calcs/fx82.htm
Har ni några enklare idéer?
Du gillar naturligtvis den lite mer komplicerade lösningen, och inget fel med det egentligen, det kan vara mycket lärorikt.Har du provat trycka win-tangenten och skriva calc.exe?
En lärd man jag studerat för hade på sin dörr citatet: An expert is a man who has made all the mistakes which can be made, in a narrow field. (Niels Bohr)
Men jag tycker att du ska titta på enklare lösningar och sätta dig in i hur enkla de är.
Det finns massor av IO-expanders för både i2c och spi som du kan sätta direkt på din paj och helt slippa all programmering av en arduino.
Både som moduler att bara koppla kablar till och som rena IC som du kan bygga på labbplatta med.
Allt du behöver göra är att lära dig hur du aktiverar de portarna på pajen samt hur du i linux ger en användare rätt att läsa och skriva på de portarna.
Det går mycket fortare än att skapa ett projekt för arduino och uppfinna ett protokoll för kommunikationen.
Men för att besvara din fråga i rubriken: Använd UART på båda sidor, men det finns ingen anledning att göra det alls.
Lycka till!
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Re. modbus.. Som jag ser det är modbus ett transportprotokoll, inte ett dataprotokoll. Så då är det inte så konstigt om olika tillverkare med olika dataprotokoll inte kan prata med varandra.
Jämför med t.ex. nätverkskommunikation. En klient som förväntar sig http kan inte prata med en ssh-server trots att bägge kör över fullt standardiserad tcp/ip.
Jämför med t.ex. nätverkskommunikation. En klient som förväntar sig http kan inte prata med en ssh-server trots att bägge kör över fullt standardiserad tcp/ip.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Modbus är både Data, Transport och hårdvaruprotokoll, eftersom alla dessa bitar är specificerade i standarden, men, iom begränsningarna så har alla tillverkare implementerat sina egna mer eller mindre konstiga lösningar för att kringgå dessa begränsningar, tyvärr.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Alltså bara tiden läsa era diskussioner är ju längre än att implementera ett eget protokol. Som det visserligen brukar vara med standarder...kolla ex CANopen implementationen....
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Min uppfattning är att i de flesta fall så kan en godtycklig Modbus-klient (som t.ex. HMI Droid) prata med en godtycklig Modbus-server. Det finns givetvis några undantag:Mr Andersson skrev:Re. modbus.. Som jag ser det är modbus ett transportprotokoll, inte ett dataprotokoll. Så då är det inte så konstigt om olika tillverkare med olika dataprotokoll inte kan prata med varandra.
Jämför med t.ex. nätverkskommunikation. En klient som förväntar sig http kan inte prata med en ssh-server trots att bägge kör över fullt standardiserad tcp/ip.
- Det finns en färdig Modbus-modul som är ganska vanlig och som bara klarar max 16 Modbus Holding register per telegram och inte 250 som specifikationen anger.
- Ett open source bibliotek för Arduino jag testat stänger ner tcp/ip anslutningen efter varje Request/Response-cykel.
- Ett annat open source bibliotek för Arduino jag provat stödjer inte FC16 som ingår i Class 0 utan förlitar sej på att klienten använder FC06 som ingår i Class 1.
- En viss PLC avviker ordentligt från standarden och använder 32-bitars register för alla adresser under 512.
- En viss frekvensomformare stöder inte FC01 (Read Coil Status) men däremot FC05 (Force Single Coil).
Eftersom det inte råder ett ett-till-ett förhållande mellan datatyperna i Modbus och datatyperna i PLC:er så får man läsa manualen för Modbus-klienten noga, välja rätt datatyp (Holding Register, Discrete Input, Coil eller Input Register) och använda rätt adress. Vissa IO-moduler erbjuder flera alternativ att hantera variabler. Digitala ingångar kan vara mappade både enskilt på Discrete Input och som 16-bitars ord på Input Register.
Man ska naturligtvis inte förvänta sej att Modbus ska fungera problemfritt för datatyper som inte ingår i specifikationen t.ex. heltal med fler än 16 bitar eller flyttal. Trots att Modbus använder big-endian så är det inte ovanligt att PLC tillverkare placerar hög- och lågorden i ett flyttal "fel".
Senast redigerad av Jan Almqvist 26 september 2018, 09:32:08, redigerad totalt 2 gånger.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Rick81 skrev:Alltså bara tiden läsa era diskussioner är ju längre än att implementera ett eget protokol
många trådar här är huvudsyftet, inte själva projektet.
ingen nämnd ingen glömd.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Håller på att lösa exakt det här problemet hemma, fast det är en ATmega som skickar over UART till min Pi. Det är inte något man gör snyggt på nolltid men håller man det simpelt kan det göras snabbt.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Vad jag vet har en Rasp-Pi UART på pinnarna. Jag hade kopplat en MAX3232 (liknande) på Rasp-Pi'en och en MAX232 (liknande) på ATmegan och sedan gjort ett enkelt protokoll som även innehöll checksum osv.
Jag har gjort sådana protokoll många år även om att jag på sista tiden har gjort ord-baserade versioner också, då främst för att kunde koppla på en PC med terminalprogram för att justera inställningar.
Det kan vara enklare att fatta "Set Intensity Low xxx" än "<STX>07xxxx??<ETX>" för en användare. Såklart är det en del overhead för att tolka texten men jag har tid, minne och kraft nog för det.
Jag har gjort sådana protokoll många år även om att jag på sista tiden har gjort ord-baserade versioner också, då främst för att kunde koppla på en PC med terminalprogram för att justera inställningar.
Det kan vara enklare att fatta "Set Intensity Low xxx" än "<STX>07xxxx??<ETX>" för en användare. Såklart är det en del overhead för att tolka texten men jag har tid, minne och kraft nog för det.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Varför ska du köra UART till RS232 och sedan RS232 till UART? låter väl ganska onödigt
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Tja, om sakerna ska vara byggt ihop kan det gå med en vanlig nivå-skiftare från Pajen till ATmegan och en spänningsdelare från ATmegan till Pajen.
Men är enheterna inte monterat tät ihop ska man ha IF-kretsar mellan! Speciellt i TS' fall.
Men är enheterna inte monterat tät ihop ska man ha IF-kretsar mellan! Speciellt i TS' fall.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Dessutom är det ju oerhört smidigt att kunne stoppa in en PC med terminalprog. i ena änden för
att kunna debugga.
att kunna debugga.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Har man inte långa avstånd är det ju mycket smidigare med UART. PC kan du ju debugga via USB UART (det är ju faktiskt 2018)