Hallo zusammen, Wir suchen aktuell eine Möglichkeit, 32 digitale Steuersignale zu übertragen. Hierbei soll letztendlich ein herkömmliches Steuerkabel durch einen Bus oder eine IP Verbindung via 2-Wire oder Ethernet ersetzt werden. Also im grunde genommen zwei Boards die untereinander verbunden werden. Das eine mit 32 Digital Inputs und das andere mit 32 Digital Outputs. Wird nun an Board A Input 1 geschaltet, soll an Board B Output 1 geschaltet werden. Letztendlich natürlich umsetzbar mit Arduino Boards, aber gibt es hierfür nicht bereits fertige Lösungen auf dem Markt? Bei meiner Suche bin ich bisher nicht wirklich fündig geworden, weiss aber auch nicht wonach ich suchen soll. Letztendlich würde ich es als eine Art 32 GPIO over Ethernet/Bus Extender bezeichnen. Kennt jemand etwas in dieser Richtung? Danke und viele Grüße Joshua
Joshua R. schrieb: > Hierbei soll letztendlich ein herkömmliches Steuerkabel > durch einen Bus oder eine IP Verbindung via 2-Wire oder Ethernet ersetzt > werden. Längen- und Geschwindigkeitsanforderungen angeben.
Nichts besonderes, Länge des Kabels wird bei maximal 30m liegen, alles unter 100ms ist in diesem Fall ausreichend.
Jetzt kommt es drauf an wie die Ein/Ausgänge aussehen sollen. Wenn es Relais sein sollen könnte was aus dem bereich DMX passen. https://www.zerodna.de/DMX-8-Kanal-Relais-Dimmer-Output-Modul-USB-kompatibel-mit-USITT-DMX512-A-Standard-Basisadresse-von-1-505 https://www.amazon.de/Channel-Decoder-Controller-Digital-Display/dp/B0111QLHZS/ref=sr_1_50?dchild=1&keywords=dmx+switch&qid=1615662022&sr=8-50 Ausgabemodule kriegst du in allen denkbaren Varianten. Das Eingangsmodul musst du sicher selber bauen(lassen). Das ist aber fast kein Aufwand. Je nachdem wie die Eingänge aussehen sollen. Durch die zyklische Übertragung der Daten ist eine relativ hohe störfestigkeit gegeben.
Joshua R. schrieb: > Wir suchen aktuell eine Möglichkeit, 32 digitale Steuersignale zu > übertragen. Hierbei soll letztendlich ein herkömmliches Steuerkabel > durch einen Bus oder eine IP Verbindung via 2-Wire oder Ethernet ersetzt > werden. Das Problem haben schon Leute vor Euch gehabt. Dafür gibt es Serializer und Deserializer. Damit kann man z.B. einen parallelen 24 Bit LCD Video Anschluss über 100m Zweidraht-Leitung übertragen. Glaubst Du nicht? https://www.ti.com/lit/an/snla103a/snla103a.pdf fchk
temp schrieb: > Durch die zyklische Übertragung der Daten ist eine relativ hohe > störfestigkeit gegeben. Übersetzt heisst das: die miserable Störfestigkeit wird durch zyklisch häufig wiederholtes Protokoll übertüncht.
Ich hatte gehofft dass schon Leute vor uns das gleiche Problem hatten und es demnach einfache und günstige Lösungen ohne selber Basteln gibt. :-) Gibt es in Richtung Serializer / Deserializer irgendwelche Bezugsquellen? Relativ viel finde ich zu der Thematik nicht.
:
Bearbeitet durch User
Joshua R. schrieb: > einfache und günstige Lösungen ohne selber Basteln gibt. Gibt es aber nicht mit so vielen Kanälen. https://www.luedeke-elektronic.de/2-Draht-Fernbedienung-10-Kanal-12V-DC-K8023.html
Joshua R. schrieb: > Gibt es in Richtung Serializer / Deserializer irgendwelche > Bezugsquellen? Relativ viel finde ich zu der Thematik nicht. Nennt sich UART. Ich hab sowas mal für 8 Bit entworfen. Beitrag "Re: Mehrere Signale über eine Leitung" (Ohje, Ewigkeiten her) Ist natürlich kein Fertigprodukt und müßte hier noch auf 32 Bit in der Software erweitert werden.
Beitrag #6619767 wurde von einem Moderator gelöscht.
Guten Tag Joshua R. Am einfachsten ist es, wie schon von dir selbst vorgeschlagen TCPIP nimmst. aber entgültig als IO würde ich es so machen. Ausgabe: https://www.makerblog.at/2015/01/das-schieberegister-74hc595-am-arduino/ Eingabe: https://elektro.turanis.de/html/prj173/index.html Gruß Thomas
Thomas K. schrieb: > Am einfachsten ist es, wie schon von dir selbst vorgeschlagen TCPIP > nimmst ... Schieberegister Ich habe da zufällig ein passendes Projekt auf http://stefanfrings.de/net_io/index.html (siehe Foto). Das Board kann Ethernet, USB und optional auch Bluetooth. Das Ethernet Modul kann man fertig kaufen. Die Lochraster Platine hat 2x24 Anschlüsse, das Programm ist aber schon für 2x32 ausgelegt. Das Programm des "Senders" müsstest du selbst entsprechend anpassen, denn fertig ist nur den Empfänger. Ich würde für deine Anwendung allerdings RS-485 bevorzugen, da einfacher. Mit der Arduino IDE dürfte die Programmierung an einem Tag erledigt sein. Als Board kann ich https://www.chip45.com/atmega644-usb-rs485-modul.html?language=de empfehlen, da ist der RS-485 Transceiver sogar mit drauf. Dieses auf eine Lochrasterplatine packen, die gewünschten I/O Anschlüsse und Überspannungsschutz (für die lange Leitung) drumherum bauen - fertig.
Rs422 Protokoll vielleicht DMX512, Can Bus ginge auch noch...
:
Bearbeitet durch User
Sowas hatten wir dafür Mal eingesetzt: https://www.wachendorff-prozesstechnik.de/produktgruppen/industrial-ethernet-und-wlan/produkte/ethernet-basierendes-io-system/Industrial-Ethernet-IO-System-digital-IO-Modul-ETHIO/ Alternativ zwei kleine SPS, Logo oder Siemens 1200!?
> Wir suchen Es ist schon armselig wegen lächerlicher 32 zu übertragender Bits die Umwelt zu belästigen. Dem Plural folgend, gibt es dort nur Deppen. > natürlich ... mit Arduino Für geistige Tiefflieger genau richtig!
Soziopathologe schrieb: > Für geistige Tiefflieger genau richtig! Troll dich, geh mal weiter Bitcoins mit deiner Spitzhacke schürfen.
Stefan ⛄ F. schrieb: > Ich würde für deine Anwendung allerdings RS-485 bevorzugen, da > einfacher.... Ich habe nicht daran gedacht, dass von den 32 Pins mindestens 2 durch die serielle Kommunikation belegt werden. Bei diesem Board hättest du hne externe Erweiterung "nur" bis zu 30 Kanäle.
wenn es Ethernet werden soll, dann sind ST Nucleo-144 Boards fertige Hardware, NUCLEO STM32F746, F767, F207 gibt es für ca. 20€ netto bei DigiKey oder anderen. Die haben Ethernet und reichlich IO drauf, dazu noch alle anderen Schnittstellen und auch gute A/D Wandler. Als SW das mbed-os drauf, das Programm für einen Sender sähe wie unten aus (Fehlerbehandlung weggelassen, aber man kann debuggen und die err Variable im Fehlerfall ansehen). Mbed Studio installieren, Projekt für das Board erstellen, kompilieren und download starten, fertig. Für den Empfänger entsprechend den receive zuerst und PortOut für die Ausgaben verwenden. Für Portextender wie MCP23017, die es auch mit Relais auf einem Board gibt, sind auch fertige Komponenten zu finden und es ist kein großer Aufwand die anstelle oder zusätzlich zu den eingebauten Ports zu verwenden. Ein Projekt das Sonntags noch vor dem Frühstück fertig ist.
1 | #include "mbed.h" |
2 | #include "EthernetInterface.h" |
3 | |
4 | typedef struct { |
5 | int port0_15; |
6 | int port16_31; |
7 | float analog0; |
8 | } udp_data_t; |
9 | |
10 | AnalogIn aIn(A0); |
11 | PortIn portE(PortE, 0xffff); |
12 | PortIn portF(PortF, 0xffff); |
13 | |
14 | int main() { |
15 | SocketAddress localAddress("192.168.100.1"); |
16 | SocketAddress subnetmask("255.255.255.0"); |
17 | SocketAddress gateway("0.0.0.0"); |
18 | |
19 | SocketAddress remoteAddr("192.168.100.2", NSAPI_IPv4, 8000); |
20 | |
21 | // Bring up the ethernet interface
|
22 | volatile nsapi_error_t err; |
23 | |
24 | net.set_network(localAddress, subnetmask, gateway); |
25 | err = net.connect(); |
26 | |
27 | // create UDP socket
|
28 | UDPSocket sock; |
29 | sock.open(&net); |
30 | |
31 | udp_data_t buffer; |
32 | while(1) { |
33 | buffer.port0_15 = portE; |
34 | buffer.port16_31 = portF; |
35 | buffer.aIn; |
36 | |
37 | // send data
|
38 | err = sock.sendto(remoteAddr, &buffer, sizeof(buffer)); |
39 | |
40 | // receive data (receiver should echo data
|
41 | err = recvfrom(nullptr, &buffer, sizeof(buffer)); |
42 | |
43 | // wait before sending again
|
44 | ThisThread::sleep_for(1ms); |
45 | }
|
46 | |
47 | return 0; |
48 | }
|
Johannes S. schrieb: > Ein Projekt das Sonntags noch vor dem Frühstück fertig ist. So ist es auf jeden Fall um Welten einfacher, als mit meinem alten AVR Projekt, das ich oben nannte.
ja, man muss aber fairerweise dazu sagen das die Entwicklung so eines OS (oder der Arduino Libs) auch viele Mannjahre dauert. Ich habe auch mit Net-IO von Pollin angefangen, das würde auch für so eine Aufgabe reichen, aber da muss man viel basteln und zusammensuchen. Dann habe ich mich früh auf die Cortex-M gestürzt (die Vorgänger waren eher gruselig) mit dem LPCXpresso LPC1769. In den Beispielen war auch schon Code fürs Networking drin, an das Board muss nur ein Magjack angeschlossen werden. Nur Projekte from Scratch zu starten und dann den Netzwerk Code hinzuzufügen war mir zu kompliziert. Den gezeigten Mbed Code kann ich mir gerade noch merken, da brauche ich keinen Codegenerator für und kann die paar Zeilen auch einfach in ein anderes Projekt reinkopieren. Edit: in dem Code oben fehlt noch:
1 | // Network interface
|
2 | EthernetInterface net; |
3 | |
4 | // und das sollte so sein:
|
5 | buffer.analog0 = aIn; |
und der socket sollte ein timeout bekommen um zu detektieren das der Empfänger nichts zurücksendet. Bei solchen Feinheiten helfe ich gerne wenn das so nachgebaut werden sollte.
Johannes S. schrieb: > dann sind ST Nucleo-144 Boards fertige Hardware, NUCLEO STM32F746, F767, > F207 Zu bedenken ist das die Nucleo Boards nicht kommerziell eingesetzt werden dürfen, oder hat sich das geändert? Das könnte hier ein Problem sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.