Posts by Bergmensch

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!

    Hallo allerseits!


    Ich möchte mit einem Raspberry Pi 4, 4GB und Debian Bullseye ein Energiemessgerät (EASTRON SDM72D-M) über Modbus auslesen. Habe im Netz gesucht und für Modbus-Anwendungen wird immer wieder das Pascalscada empfohlen. Ich benutze seit einiger Zeit Lazarus. Nach der Beschreibung und Screenshots von Beispielen nach zu urteilen gefällt mir das Pascalscada sehr gut, nur leider funktioniert das Installieren des Paketes auf meinem RasPi nicht!

    Die Installation stoppt mit einem Error, dass etwas bei einem "ZPlainFirebirdDriver" nicht passen soll. Im Netz und hier im Forum findet man dazu leider nichts.


    Kennt jemand dieses Problem?

    Wenn ja, wie kann man das beheben?


    Umgebung:

    RasPi 4 B, 4GB, 32 GB microSD

    Linux Debian 11 (bullseye)

    Lazarus 2.0.10

    FPC 3.2.0

    Pascalscada 0.7.5

    Nachtrag:

    Habe jetzt erst den Link von Tell gelesen. Du hast auch richtigerweise auf ein METEX getippt! Scheint ja im Prä-USB-Zeitalter recht verbreitet gewesen zu sein...

    Jedenfalls funktioniert der Code unter deinem Link!

    VIELEN DANK!

    Ich war anscheinend doch auf der richtigen Spur: Problem mit dem Anwenden von Pyserial.

    Hallo allerseits,

    danke für eure Kommentare und Hinweise!

    Möchte noch kurz darauf eingehen:

    * Handshake-Leitungen RS,CS,DS,CD (die im QBASIC-Code angegeben sind):

    Im Kabel sind die gar nicht angeschlossen - lediglich RX, TX und GND. Habe auch in Python mit dem Software Handshake gespielt - bringt nichts.

    * ser.open ist nicht notwendig - wurde eh schon beantwortet.

    * Das Multimeter ist ein METEX M-4640A

    * Baudrate: Habe jetzt nochmal im Originalhandbuch des DMM nachgesehen - 9600 Baud passen.

    Allerdings habe ich auch gesehen, dass das 14. Byte eines jeden Blocks doch ein Carriage Return ist - entgegen der Info in meiner Nachricht ganz oben.

    * @Leroy Cemoi: Du hast den Link zu einem sehr interessanten Artikel über ein METEX DMM gepostet, wie hast du das erraten? Hatte ich gar nicht erwähnt, dass es ein METEX Gerät ist!


    Am Oszi-Bild sieht man schön den Request ('D\r') in Gelb und auch die Antwort des Metex (4 x 14 Byte) in Hellblau.



    Ich vermute deshalb stark, dass ich einfach das Pyserial nicht richtig anwende. Wie erwähnt: Mit QBASIC funktioniert das bestens.

    In der Doku vom Pyserial steht, dass beim Setzen eines Read-timeout nach dessen Ablauf alles im Eingangspuffer gelesen wird.

    Habe damit auch ein wenig herumgespielt, es wird aber trotzdem immer nur b'\x00' ausgegeben.


    ???

    Hallo Leute!

    Nach tagelangem Probieren und stundenlangem Recherchieren im Netz weiß ich jetzt nicht mehr weiter und hoffe auf eure Hilfe!


    Habe ein altes Digitalmultimeter, mit dem man über eine RS232 Schnittstelle kommunizieren kann (9600 7N2).

    Das funktioniert so, dass man einen Request in Form eines "D" samt carriage return an das Messgerät sendet und es antwortet darauf

    nach unbestimmter Zeit (ca. 2 ms bis 30 ms) mit 4 mal 14 Byte, leider immer ohne CR oder LF.

    Habe die Kommunikation mit einem alten PC, der noch eine RS232 Schnittstelle hat, probiert - funktioniert einwandfrei mit QBASIC.

    Habe das deshalb verwendet, weil's in der Anleitung des Multimeters so angegeben war.

    Der QBASIC-Code lautet:


    Code
    10 OPEN "COM1:9600,N,7,2,RS,CS,DS,CD" FOR RANDOM AS #1
    20 PRINT #1, "D"
    30 IN$ = INPUT$(4 * 14, #1)
    40 PRINT IN$
    50 CLOSE #2


    Da ich sehr hardwareorientiert bin, habe ich auch mit einem Oszilloskop RX und TX angeschaut - Signale sind, wie sie sein sollen.


    Allerdings möchte ich das Auslesen des Messgerätes etwas modernisieren und mit einem Raspberry Pi samt Python machen.


    Das Senden des "D" samt CR funktioniert mit Python und Pyserial, sagt jedenfalls mein Oszi.

    Das Messgerät antwortet auch, aber ich bekomme nur bx00 zurück.

    Habe alles Mögliche mit Pyserial probiert: mit/ohne timeout, read, readline,...

    Aber leider ohne Erfolg!

    Hier mein Python Code:

    Bekomme aber leider keine Werte zurück bzw. nur '0'. Wie gesagt: Mein Oszi zeigt, dass das Messgerät zurücksendet.


    Ich verwende einen Rapspberry Pi4 mit 4GB samt LogiLink RS232 zu USB Adapter.

    Debian Bullseye und Python 3

    Hallo VeryPrivat!

    Danke für den Tipp!

    Habe über das Lesebit auch schon gegrübelt....

    Leider verlangt i2cget nach dem Parameter für die Slave-Adresse (0x48) noch einen Wert und wenn man den weglässt, gibt es eine Fehlermeldung!

    Kennst du zufällig eine weitere Möglichkeit, um über die Shell mit dem i²C-Bus zu kommunizieren?

    Gruß,

    Bergmensch

    Ich habe etwas recherchiert und denke es müsste passen (Code und Schaltung). Ich kenne Deine KTY Beschaltung nicht und würde daher vorerst gerne diese als "Fehlerquelle" ausschließen.

    Kannst Du ein paar Werte einlesen mit GND und mit 3,3V an A0 und die Werte hier posten?

    Kannst Du mal A1-A3 auf GND legen, damit deren Pegel definiert ist?

    Hallo VeryPrivat!

    Habe nun alles so gemacht, wie von dir vorgeschlagen: A1-A3 auf GND und A0 nacheinander auf GND und +3,3V.

    Config-Register des ADS1115 beschrieben mit:

    Code
    i2cset -y 1 0x48 0x01 0x8342 w

    Dann jeweils 10 Werte vom Conversion-Register in eine Datei schreiben lassen (Anhänge).

    Immer noch Zufallswerte!

    Zumindest den Continuous-Modus scheint der ADS1115 übernommen zu haben.


    Gruß,

    Bergmensch

    Falls es hilft, hier hat jemand einen Treiber für Python geschrieben. Den von Adafruit würde ich nicht unbedingt verwenden, da man dann weitere Abhängigkeiten hat (Blinka und noch was).


    Wenn du den A1 - A3 auf GND ziehst, sollte der gelesene Wert == 0 oder ein wenig drüber sein.

    Hallo DeaD_EyE!

    Danke für den Hinweis!

    Ich möchte allerdings keine fertigen Treiber verwenden, sondern alles von Null weg "zu Fuß" machen, damit ich das Thema auch richtig verstehe.

    Allerdings bin ich momentan mit meinem Latein am Ende!

    Habe nun A1-A3 auf GND gehängt aber wenn ich das Config-Register beschreibe mit

    Code
    i2cset -y 1 0x48 0x01 0x8342 w

    bekomme ich trotzdem Zufallswerte am A0 (siehe angehängte Dateien).

    Zumindest der Continuous-Modus scheint vom ADS1115 übernommen worden zu sein.

    Die Werte vom A0 gelesen (Conversion-Register 0x00) sehen so aus, als würde das Potential floaten...

    Gruß,

    Bergmensch

    Hallo Bernd666,


    danke für deinen Hinweis!


    Habe in der Shell des Raspberry Pi folgendes eingegeben:

    Code
    i2cset -y 1 0x48 0x01 0x8342 w

    Wobei man darauf achten muss, dass bei i2cset das Datenwort so angegeben werden muss (hab ich aus dem Netz): 0xLSBMSB

    Das bedeutet, dass ich das Config-Register (0x01) des ADS1115 so setzen will: (continuous mode, 4.096V, AINP = AIN0 and AINN = GND)


    01000010 10000011

    42h 83h


    Anschließend lese ich das Conversion-Register aus mit:

    Code
    i2cget -y 1 0x48 0x00 w

    Wobei auch für den Rückgabewert gilt: LSBMSB


    Gruß,


    Bergmensch

    Hallo allerseits!

    Das ist mein erster Beitrag in diesem Forum - bin verzweifelt!

    Ich bin mir sicher, dass ihr mir weiterhelfen könnt.

    Mein Anliegen: Analoge Spannungswerte (0 bis ca. 2Vdc, Änderungsrate im Sekundenbereich) mit dem Raspberry messen und verarbeiten.

    Nach ein wenig Recherche im Netz habe ich das Joy-it Modul KY-053 mit dem ADS1115 entdeckt; hat mir recht gut gefallen...

    Meine Software am Raspberry schreibe ich mit Lazarus und dem Free Pascal Compiler (aus historischen Gründen - habe früher mit Turbo Pascal gearbeitet)

    Zum Testen des ADS1115 wollte ich diesen zunächst über die Shell des Raspberry mittels i2c-Tools (i2cset, i2cget) ansprechen.

    Den ADS1115 über i2C ansprechen funktioniert tadellos (Adresse 0x48) aber das Config-Register nach meinen Vorstellungen setzen, um dann aus dem Conversion-Register

    die Messwerte auszulesen.

    Und da fängt mein Problemchen an: Das Config-Register setzen scheint noch zu funktionieren, aber die anschließend aus dem Convesion-Register ausgelesenen Werte

    erscheinen eher wie Zufallszahlen.

    Die Eingangsspannung am A0 des KY-053 ist konstant 2Vdc.

    Konfiguration:

    * Raspberry Pi 4

    * Raspbian Buster

    * ADU: Joy-it KY-53 (ADS1115)

    Alle weiteren Infos entnehmt bite den beigefügten Dateien.

    Was mache ich falsch?

    Bitte um eure Hilfe!


    Schöne Grüße,

    Bergmensch