Hallo, ich möchte gerne drei Ultraschallsensoren (SRF02) mit dem Raspberry PI 3 auswerten. Der Sensor ist über den I2C-Bus mit dem Raspberry verbunden. In Codesys (V3.5 Patch SP11 Patch 4) verwende ich bereits das "Codesys Control for Raspberry PI - Package", auch die Bibliothek "Raspberry I2C SRF02" habe ich schon hinzugefügt. Nun würde ich die Sensoren gerne konfigurieren. Ich möchte den Entfernungswert umstellen (Auswahl zwischen Inches, Zentimeter und Sekunden sollte laut Datenblätter möglich sein). Da ich drei Sensoren verwende, muss ich auch die I2C Slave ID Adresse der einzelnen Sensoren ändern. Hat jemand Erfahrung damit? Welche Möglichkeiten gibt es hierzu bzw. kann ich irgendwie auf die einzelnen Register der Sensoren zugreifen? Ich freue mich über jede Antwort, bin schon etwas verzweifelt. Danke im Voraus Bianca
Vielleicht hilft dir dieses Dokument (srf02doku.pdf) www.mikrocontroller-elektronik.de/?projekt-download=489 Bianca P. schrieb: > kann ich irgendwie auf die einzelnen Register der Sensoren zugreifen Ja, über I2C oder über UART. > Nun würde ich die Sensoren gerne konfigurieren. Ich möchte den > Entfernungswert umstellen (Auswahl zwischen Inches, Zentimeter und > Sekunden sollte laut Datenblätter möglich sein). Siehe Kapitel "I2C Mode Ansteuerung" komplett mit Beispiel-Code für Messvorgang in Zentimeter. Umstellung auf Messen in Inches oder Mikrosekunden siehe Befehlscode-Tabelle direkt über dem Beispiel-Code. > die I2C Slave ID Adresse der einzelnen Sensoren ändern. Siehe Kapitel "Änderung der I2C Slave ID".
Vielen Dank für die Antwort! Aber wie kann ich über Strukturierten Text oder Kontaktplan in Codesys die jeweiligen Register eines Sensors ansprechen?
Bianca P. schrieb: > Aber wie kann ich über Strukturierten Text oder Kontaktplan in Codesys > die jeweiligen Register eines Sensors ansprechen? Ich dachte das wäre eine legitime Frage, aber nach einer 2min Internet-Suche "Codesys Raspberrypi I2C" fühle ich mir von dir veralbert. Generell geht das so: 1) Programmiersprache lernen: Strukturierten Text oder KOP 2) Anleitung für Codesys auf deiner Target Platform (RPi) lesen 3) I2C Treiber für Codesys auf RPi finden oder selber schreiben 4) Mit I2C den Ultraschallsensoren (SRF02) ansprechen Jetzt muss ich aber feststellen, dass der Hersteller Codesys auf seiner Webseite folgende Information hat: https://store.codesys.com/codesys-control-for-raspberry-pi-sl.html -> dort Button: <Download Erste Schritte (.pdf)> (Datei raspberrypi_codesysv3_firststeps_de.pdf | direkt link: https://store.codesys.com/attachments/files/download/id/4119/) Zitat Kapitel 3.8:
1 | "I2CExample.project |
2 | |
3 | In diesem Beispiel wurde |
4 | folgende Hardware angeschaltet: |
5 | • SRF02 (Ultraschall-Entfernungssensor) [...] |
6 | Die für die Anbindung verantwortlichen Bibliotheken I2C_* werden als Sourcecode zur Verfügung gestellt und können als Beispiel für andere Anschaltungen dienen. Basis für die Kommunikation über I2C ist die Bibliothek RaspberryPiPeripherals, deren Schnittstellen dokumentiert sind." |
Du verzweifelst also gerade daran das mitgelieferte Beispiel-Projekt auf exakt der vom Hersteller verwendeten Hardware zu benutzten? Welche Probleme hast du denn damit?
Die Datei "raspberrypi_codesysv3_firststeps_de.pdf" als auch das Beispielprojekt "I2CExample.project" ist mir bereits bekannt. Da ich jedoch 3 dieser Sensoren verwenden möchte, muss ich deren I2C Slave ID Adresse ändern. Momentan bekomme ich immer nur ein Signal eines einzelnen Sensors, da allen dieselbe Adresse zugeordnet ist. So muss ich laut dem Dokument "srf02doku.pdf" von www.mikrocontroller-elektronik.de/?projekt-download=489 das Register 0 jedes Sensors mit vier Befehlen in 50ms-Abständen beschreiben um diese zu ändern. Ich weiß aber nicht wie ich auf dieses Register zugreifen kann. In Codesys stehen mir aber nur: - SRF02.AfterReadInputs - SRF02.BeforeWriteOutputs - SRF02.lrDistance --> Distanz, wie im Beispielprojekt verwendet - SRF02.lrMaxDistance - SRF02.lrMinDistance - SRF02.Operational - SRF02.read - SRF02.read8 - SRF02.ReadRegister - SRF02.usiAdress --> Adresse, die im Gerätebaum für den Sensor eingetragen ist - SRF02.write - SRF02.write8 - SRF02.writeBits - SRF02.NewMeasurement - SRF02.xValid zur Verfügung. Kann ich mittels dieser Funktionen irgendwie die Adresse der Sensoren ändern?
Hier findest Du die i2c lib Doku: https://help.codesys.com/webapp/GEELYL4ecFL7fdIms34rwxJy3EI%2Ffld-i2c;product=RaspberryPiPeripherals;version=3.5.11.0 Mit i2c.write8 sollte man die Register wie in srf02doku.pdf dokumentiert beschreiben können um die ID zu ändern.
Tek hat schon ganz richtig gesagt wie es geht. Bianca P. schrieb: > Ich weiß aber nicht wie ich auf dieses Register zugreifen kann. Wegen dem Lerneffekt vielleicht einmal anders herum. Bianca, in dem dir bekannten Beispielprojekt wird u.a. erfolgreich ein Messvorgang gestartet. Fragen die du dir beantworten solltest: Wie lautet der Code aus dem Beispielprojekt um eine Messung zu starten? Um eine Messung zu starten wird welcher Wert(Befehlscode) in welches Register geschrieben? Was musst du daran ändern, einen anderen Wert in das Register 0 zu schreiben? Was musst du ändern um eine Sequenz von Werten (0xA0, 0xAA, 0xA5, "ID") nacheinander in das Register 0 zu schreiben?
Ok danke, das hilft mir schon etwas weiter. Jedoch, dem Beispielprojekt kann ich nicht viel Information entnehmen, es werden nicht einzelne Register beschrieben oder ausgelesen, sondern nur die Variable "lrDistance" des Funktionsbausteines "SRF02" auf die lokale Variable übertragen: lrDistance := SRF02.lrDistance; ... das ist die einzige Zeile im ganzen Beispielprojekt, die den Ultraschallsensor betrifft. Ich kann damit zwar die Distanz eines Sensors auslesen, jedoch hilft mir das Projekt nicht zum ändern einer I2C-ID weiter.
Hallo Bianca, Ich verstehe genau was du meinst. Codesys für RaspberryPi ist eine viel zu komplizierte Entwicklungsumgebung. Ich habe die Version V3.5 SP12. Vorneweg - ich programmiere seit 30 Jahren in LabWindows CVI. Ebenfalls eine hochkomplexe Umgebung. Ich hänge genau an der selben Stelle fest. Du kannst den Quellcode von SRF02 ansehen. Ein Doppelklick auf den Eintrag im Gerätebaum I2CMaster öffnet das E/A Abbild. Hier kannst du in Zeile "I2C-Bus Parameter" in Feld "Wert" die Adresse des Bausteines eintragen. Ein Rechtskick in PLC_PRG auf den Aufruf "SRF02.lrDistance" Öffnet den Main Quellcode. In der Library selektiere Raspberry I2C SRF02. Unten erscheint SRF02_Supersonic. Im Zweig connector sind die Funktionen AfterReadInputs und BeforeWriteOutputs. Ein Doppelklick darauf öffnet auch diesen Quellcode. Das ist ja alles Toll, aber editieren kann man diesen Quellcode nicht. Was man machen kann, ist im Gerätebaum eine weitere Instanz von SRF02 anhängen. Diese heißt dann "SRF02_1". In PLC_PRG lautet es dann lrDistance := SRF_02_1.lrDistance; So, wenn jetzt Jemand VERSTÄNDLICH erklären kann, wie man weiter vorgeht, wird die Gemeinde jubeln...
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.