luxor Geschrieben July 2, 2014 at 09:07 Geschrieben July 2, 2014 at 09:07 Moin Zusammen, ich hab grade viele Gedanken spiele zu einen neune Projekt und Frag mich ob ich das mit Tinkerforge umsetzten kann. Ich möchte 96(vielleicht auch 128) Elektromagnet Steuern. Damit das Preislich machbar bleibt kommt nur das IO-16 dazu in Frage. Die Frage ist wie gut lassen sich 6 IO-16 Steuern? Es kann sein das in einer einen Millisekunde 40 Ports eine Zustand haben und der nächste Millisekunde 55 Ports wieder einen anderen Zustand haben. Ich hab mir dazu dann mal die Python beispiele angeguckt und dort das gefunden: # Set pin 0 and 7 on port b to output high io.set_port_configuration('b', (1 << 0) | (1 << 7), 'o', True) Das schaut ja schon mal ganz gut aus. Die Frage ist wie groß io.set_port_configuration werden darf? Zusammengefast: Ich möchte 96 IO Ports in Millisekunden Takt steuern. Das ganze über: Ethernet Master Extension -> 2 Master Brick -> 6 IO-16 Module. Ist das machbar?? Bei den ganzen Gedankenspielen ist mir die Idee der Virtualisierung gekommen. Ich würde gerne aus den 6 IO-16 Modulen 1 Virtuelles machen. Dann hätte ich ein IO-96. Ich müsste nur ein UID verwenden und mir keine Gedanken machen an welchen Master Port welches IO-16 Hängt. Diese Virtualisierung könnte glaub ich bei vielen bricks nett sein. Grade bei den Industrial Bricks könnte das ein nettes Kunden Features sein. Macht die Programmierung sicher einfacher. gruß Philipp Zitieren
Masder Geschrieben July 2, 2014 at 13:40 Geschrieben July 2, 2014 at 13:40 Hallo Luxor, wen ich das richtig verstanden habe geht das nicht. Grund ist das max. 1000 Nachrichten pro Sekunde geschickt werden können. genau ist alles noch mal Hier erklärt ===>http://www.tinkerunity.org/forum/index.php/topic,306.msg1750.html#msg1750 Gruß masder Zitieren
luxor Geschrieben July 2, 2014 at 13:45 Autor Geschrieben July 2, 2014 at 13:45 Grund ist das max. 1000 Nachrichten pro Sekunde geschickt werden können. genau ist alles noch mal Hier erklärt ===>http://www.tinkerunity.org/forum/index.php/topic,306.msg1750.html#msg1750 1000 Nachrichten wären ja 1000 Millisekunden und somit 1 Sekunde. Müsste Klappen. Die Frage ist ob ich mit 1 Nachricht alle Ports steuern kann Vielleicht reicht es auch wenn ich alle 5 bis 10 Millisekunden die Ports steuern kann. Das weiß ich allerdings noch nicht. Das muss ich gucken wenn ich den Prototypen gebaut hab. Zitieren
Unexpected Geschrieben July 2, 2014 at 19:43 Geschrieben July 2, 2014 at 19:43 Soweit ich das noch im Kopf habe, kommt das Limit der 1000 Nachrichten pro Sekunde nur auf Grund der USB Schnittstelle zustande, richtig? Es wurde im Forum daher auch schon angesprochen, dass man ja jeden Master an einen eigenen USB Port anschließen kann und somit pro Master 1000 Nachrichten pro Sekunde hat. Oder irre ich mich da? Zitieren
luxor Geschrieben July 2, 2014 at 21:16 Autor Geschrieben July 2, 2014 at 21:16 Soweit ich das noch im Kopf habe, kommt das Limit der 1000 Nachrichten pro Sekunde nur auf Grund der USB Schnittstelle zustande, richtig? Es wurde im Forum daher auch schon angesprochen, dass man ja jeden Master an einen eigenen USB Port anschließen kann und somit pro Master 1000 Nachrichten pro Sekunde hat. Oder irre ich mich da? Das wäre in der tat eine Notlösung. Allerdings würde ich es gerne direkt über LAN steuern. Zitieren
Masder Geschrieben July 2, 2014 at 21:59 Geschrieben July 2, 2014 at 21:59 naja also ich würde nicht sagen das es nicht geht. es sind 6 beziungs weise 9 IO-16 gesteuert werden. also werden pro umschalten 6(9) nachrichten gesendet. das ganze jetzt auf geht also nur in 6-9 milisec realisirt. so weit ist es also möglich. aber da er es ja im milisec bereich schalten will geht das nicht das würde nur gehen wen wir 9000 nachrichten pro sec schicken könnten und die lösung mit den masterbrick wäre sehr teuer da man dan 9 stück braucht an 9 usb schnittstellen Die einzige möglichkeit wäre mit einem redbrick da hierbei keine usb begränzung vorliegt. frage ist nur ob die redbrick die möglichen 9000 nachrichten pro sec schaft. gruß masder Zitieren
luxor Geschrieben July 3, 2014 at 07:02 Autor Geschrieben July 3, 2014 at 07:02 Die einzige möglichkeit wäre mit einem redbrick da hierbei keine usb begränzung vorliegt. frage ist nur ob die redbrick die möglichen 9000 nachrichten pro sec schaft. Das würde erst mal auch nichts bringen. Auch der Stack selber arbeitet mit 1000 Nachrichten in der Sekunde. Ich hab gestern noch mal einen Prototypen der Elektromagnete gebaut und konnte feststellen das Sie doch nicht ganz so Träge sind wie befürchtet. Von daher werde ich erst mal mit einer Takt von 10 Millisekunden arbeiten. Da reichen dann die 1000 Nachrichten in der Sekunde erstmal. Was einer der Admins aber noch Beantworten muss wie groß : io.set_port_configuration('b', (1 << 0) | (1 << 7), 'o', True) werden darf. Kann ich mit io.set_port_configuration alle 16 Ports setzten? Und wird das dann als eine Nachricht oder als 16 Nachrichten abgearbeitet? Zitieren
photron Geschrieben July 3, 2014 at 08:35 Geschrieben July 3, 2014 at 08:35 Jeder Setter-Aufruf in der API sendet exakt eine Nachricht. Bei jedem Getter kommt dann auch noch exakt eine Nachricht zurück. set_port_configuration() sendet also eine Nachricht. Die IO-16 ist in Port A und Port B unterteilt und an jedem Port sind 8 Pins. Mit set_port_configuration() kannst du die 8 Pins an einem Port setzen. Du brauchst also zwei set_port_configuration() Aufrufe um alle Pins einer IO-16 einmal zu setzen. Wenn du nur zwischen Output-High und Output-Low umschalten willst kannst du auch einmal mit set_port_configuration() alle Pins auf Output stellen und dann mit set_port() zwischen High und Low wechseln. Zitieren
luxor Geschrieben July 3, 2014 at 08:46 Autor Geschrieben July 3, 2014 at 08:46 Wenn du nur zwischen Output-High und Output-Low umschalten willst kannst du auch einmal mit set_port_configuration() alle Pins auf Output stellen und dann mit zwischen High und Low wechseln. Ahh mit set_port() kann ich also alle 8 setzten! Cool! Frage dazu: 0b00001111 steht das b für die Seite? Also A oder B? Zitieren
photron Geschrieben July 3, 2014 at 09:51 Geschrieben July 3, 2014 at 09:51 Du kannst auch mit set_port_configuration() alle 8 Pins eines Port setzen. io.set_port_configuration('b', (1 << 0) | (1 << 7), 'o', True) Hier wählt das erste Parameter den Port, in diesem Falle 'b'. io.set_port('b', 0b00001111) Hier wählt das erste Parameter wieder den Port, in diesem Falle 'b'. Das b in 0b00001111 steht für Binär. 0b00001111 ist also 15 in Binär. In Hex wäre das 0x0F. 0b00001111 (Binär) ist 15 (Dezimal) ist 0x0F (Hex). Einige Programmiersprachen, wie z.B. Python erlauben es Binärzahlen direkt hinzuschreiben. (1 << 0) | (1 << 7) z.B. erzeugt durch Shift- und Or-Operationen die Binärzahl 0b10000001. Die das IO-16 Bricklet dann als Bitmaske interpretiert und den ersten und achten Pin an Port B auf High und alle anderen auf Low setzt, weil das erste und das achte Bit 1 sind und der Rest 0. Zitieren
luxor Geschrieben July 3, 2014 at 11:38 Autor Geschrieben July 3, 2014 at 11:38 Hier wählt das erste Parameter wieder den Port, in diesem Falle 'b'. Das b in 0b00001111 steht für Binär. 0b00001111 ist also 15 in Binär. In Hex wäre das 0x0F. Einige Programmiersprachen, wie z.B. Python erlauben es Binärzahlen direkt hinzuschreiben. Eine Doofe Nachfrage noch dann müsste ich es verstanden habe (hoffe ich). Ich hab mir nun mal Fix diese http://www.elektronik-kompendium.de/sites/dig/0710081.htm Binär Tabelle zur Hand genommen. Wenn ich mir nun den Wert 100 in Binär angucke ist das dieser: 01100100. Würde das nun dieses heißen: Pin1=0 Pin2=1 Pin3=1 Pin4=0 Pin5=0 Pin6=1 Pin7=0 Pin8=0 ?? Danke! Gruß Philipp Zitieren
Loetkolben Geschrieben July 3, 2014 at 12:47 Geschrieben July 3, 2014 at 12:47 Hallo zusammen, Tippefehler von photron. Hier wählt das erste Parameter wieder den Port, in diesem Falle 'b'. Das b in 0b00001111 steht für Binär. 0b00001111 ist also 15 in Dezimal. In Hex wäre das 0x0F. Einige Programmiersprachen, wie z.B. Python erlauben es Binärzahlen direkt hinzuschreiben. @luxor: Das muesste umgekehrt sein: Wenn ich mir nun den Wert 100 (dezimal) in Binär angucke ist das dieser: 01100100. So sollte es richtig sein: Pin1=0 Pin2=0 Pin3=1 Pin4=0 Pin5=0 Pin6=1 Pin7=1 Pin8=0 Bitte zaehle aber von 0-7 und nicht von 1-8. Also: Pin 7 6 5 4 3 2 1 0 Wert 0 1 1 0 0 1 0 0 Der Loetkolben Zitieren
photron Geschrieben July 3, 2014 at 13:18 Geschrieben July 3, 2014 at 13:18 0b00001111 ist also 15 in Binär. Kein Tippfehler, sondern missverständlicher Satzbau. Besser wäre gewesen: 0b00001111 in Binär ist also 15. Zitieren
luxor Geschrieben July 3, 2014 at 13:20 Autor Geschrieben July 3, 2014 at 13:20 Ach Kinder vielen Dank für die Hilfe und das erklären Wenn der Prototyp das tut was er soll und das Projekt den Kopf verlässt werde ich mal genau berichten was ich vor hab. Vielleicht bis Samstag Gruß Philipp Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.