verzweifle an RS232

Dieses Thema im Forum "C/C++" wurde erstellt von JoeA, 01.11.2003.

  1. #1 JoeA, 01.11.2003
    Zuletzt bearbeitet: 01.11.2003
    JoeA

    JoeA Jungspund

    Dabei seit:
    13.09.2003
    Beiträge:
    14
    Zustimmungen:
    0
    Hi,

    seit einiger Zeit verzweifle ich bei dem Versuch das RS232 Messmodul (M232) von ELV unter Linux anzusprechen. Unter C bin ich allerdings auch noch nicht der Erfahrenste.
    Bisher habe ich solche Sachen immer mit PowerBasic unter DOS gemacht.

    Vielleicht kennt ja jemand das Messmodul und kann mir ein Beispiel zukommen lassen.

    Folgendes steht in der Anleitung zum M232:
    Mein Testprogramm sieht wie folgt aus:
    Teile des Codes habe ich einem Beispiel für ein Terminalprogramm entnommen.
    Das Modul braucht lt. Anleitung 100ms um die Werte zu lesen. Deshalb das sleep.
    Irgendwie blockiert das Programm nachdem Senden der Daten und macht erst weiter wenn ich eine Taste drücke.
    Seltsamerweise steht im ersten Byte der Antwort der ASCII Wert der Taste die ich drücke.

    Irgendwie scheien ich auf das Keyboard anzusprechen.

    Andererseits kann ich auf ttyS0 mein Multimeter mit fast den gleichen Einstellugnen abfragen.

    Code:
    
    # include <stdio.h>
    # include <unistd.h>
    # include <fcntl.h>
    # include <termios.h>
    
    # define TERM_DEVICE "/dev/ttyS0"       /* = COM1 */
    # define TERM_SPEED B2400               /* Bit/Sek */
    
    int main()
     {
      printf("start...\n");
      int fd, old_flags;
      ssize_t length;
      char buffer[16];
      struct termios term_attr;
      fd_set input_fdset;
      printf("versuche zu oeffen...\n");
    
    // pruefen existenz schnittstelle
      if (fd = open(TERM_DEVICE, O_RDWR) == -1)
       {
        perror("terminal: Can't open device " TERM_DEVICE);
        return(1);
       }
      printf("geoeffnet...\n");
    //-----------------------------------------------------
      printf("portpruefung ueberstanden...\n");
                            /* RS232 konfigurieren */
      if (tcgetattr(fd, &term_attr) != 0)
       {
        perror("terminal: tcgetattr() failed");
        return(1);
       }
    
    
      printf("attribute gelesen...\n");
    
      term_attr.c_cflag = TERM_SPEED | CS8 | CREAD;
      term_attr.c_iflag = 0;
      term_attr.c_oflag = 0;
      term_attr.c_lflag = 0;
      if (tcsetattr(fd, TCSAFLUSH, &term_attr) != 0)
      {
          perror("terminal: tcsetattr() failed");
      }
      printf("attribute gesetzt...\n");
      buffer[0]=0x01;
      buffer[1]=0x62; //61
      buffer[2]=0x31;
      buffer[3]=0x0D;
      printf("%d",write(fd,buffer,4));
      printf("-geschrieben...\n");
      sleep(1L);
      printf("%d",read(fd,buffer,3));
      printf("-gelesen...\n");
      printf("<%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d>\n",buffer[0],buffer[1],
               buffer[2],buffer[3],buffer[4],buffer[5],buffer[6],buffer[7],buffer[8],buffer[9],buffer[10],
               buffer[11],buffer[12],buffer[13],buffer[14],buffer[15]);
      printf("<%c|%c|%c|%c|%c|%c|%c|%c|%c|%c|%c|%c|%c|%c|%c|%c>\n",buffer[0],buffer[1],
               buffer[2],buffer[3],buffer[4],buffer[5],buffer[6],buffer[7],buffer[8],buffer[9],buffer[10],
               buffer[11],buffer[12],buffer[13],buffer[14],buffer[15]);
    
      close(fd);
      return(0);
     }
    
    

    Erbitte dringend Hlfe !

    Vielen Dank & Grüße
    Joe
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. JoeA

    JoeA Jungspund

    Dabei seit:
    13.09.2003
    Beiträge:
    14
    Zustimmungen:
    0
    ... immer noch keine Antwort ?

    Wenn meine Frage zu bescheuert ist seit schonungslos !
    Sagt's mir ins Gesicht. Nur so kann ich's lernen.

    Oder sagt mir wenigstens das ihrs auch nicht wißt - aber BITTE sagt irgendwas.

    Viele Grüße

    Joe
     
  4. chb

    chb Steirer

    Dabei seit:
    01.06.2003
    Beiträge:
    2.359
    Zustimmungen:
    0
    Ort:
    ÖSTERREICH
    Ne die Frage iss net bescheuert - mir iss sie nur zu hoch :)
     
  5. Andre

    Andre Foren Gott
    Moderator

    Dabei seit:
    01.04.2002
    Beiträge:
    3.876
    Zustimmungen:
    0
    Ich denke mal, das wenn keiner Antwortet, es keiner weis...

    Ich kann dir leider auch nicht helfen :-(
    sorry...
     
  6. saiki

    saiki Bratwurstgriller

    Dabei seit:
    18.03.2003
    Beiträge:
    934
    Zustimmungen:
    0
    Ort:
    Sachsen/ Meerane
    Es könnte mit dem sleep zusammenhängen.
    Es scheint mir zu kurz. Hast Du es mal länger eingestellt?
    (Habe den Quellcode blos mal kurz überflogen, aber wenn Dein Multimeter geht, scheint es nur an Parametern zu liegen, nicht am Programm selbst)
     
  7. pummel

    pummel Grünschnabel

    Dabei seit:
    17.01.2004
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,

    hats du zwischendurch schon eine Lösung gefunden?
    Ich habe mir das Messmodul auch kürzlich zugelegt zwecks Langzeitmessungen.
    Meine c-Kenntnisse sind nicht so überragen, eher würde ich es in Perl probieren.
    Damit wird der oll 386er , der als Datensammler abgestellt werden soll, aber überlastet sein. Also brauche ich auch eine C-Lösung.
    Allzuviel Infos scheint es allerdings nicht zu geben, zumindest Google ist recht einsilbig.
    Dein Proggie bringt bei mir den selben Effekt, wie von dir beschrieben.
    Wäre Klasse, wenn du schon was rausgefunden hast.
     
  8. JoeA

    JoeA Jungspund

    Dabei seit:
    13.09.2003
    Beiträge:
    14
    Zustimmungen:
    0
    Hi,

    ne, bin leider noch nicht weiter.
    Hab das ganze mal auf Eis gelegt, da ich im Moment dafür eh keine Zeit habe.

    Ich will mir aber demnächst eh mal eine IO-Karte kaufen, da die irgendwe immer teurer werden und ich im nächsten Rechner wohl gar keine mehr haben werde.

    Dann werde ich es mal an COM2 versuchen.

    Ich denke es hängt wohl auch von der Art des angeschlossenen Gerätes ab.

    Bei mir soll später ein alter P160 die Blumen gießen, wenn der Feuchtesensor am AD-Wandler sagt es wäre soweit. Blumenzustandsbericht hab ich dann per Internet :)
    Um ehrlich zu sein, die Sensoren habe ich seit 4 Jahren und fange jedes Jahr 3 Monate vor dem Urlaub an zu Probieren.

    Grüße
    Joe
     
  9. pummel

    pummel Grünschnabel

    Dabei seit:
    17.01.2004
    Beiträge:
    5
    Zustimmungen:
    0
    Hast du viellciht noch irgendwelche Quellen im Netz gefunden, wo man ein paar Infos herbekommt? Google schweigt sich aus und dein Eintrag hier war das einzig verwertbare, was ich gefunden habe.
    Die mitgelieferte DOS-Software funzt bei mir auch nicht, das mag aber auch am win200 in VMware liegen.
    Ich mache mich mal auf die Suche nach 'er DOS-Bootdiskette und versuchs noch mal..
     
  10. JoeA

    JoeA Jungspund

    Dabei seit:
    13.09.2003
    Beiträge:
    14
    Zustimmungen:
    0
    Hi,

    also das Demoprogramm unter DOS funzt bei mir.

    Ich finde leider auch nichts in Google, ich weis nur das ich irgendwann mal irgendwo den Tip gelesen habe COM1/ttys0 nicht zu verwenden weil es zu Problemen mit dem Keyboard kommen kann.

    Und genau das ist ja auch das Problem bei mir. Nur leider weis ich nicht mehr wo ich das gelesen habe.

    Ich denke ich habe irgend einen Falschen Parameter. Das seltsame ist halt, dass ich wenn ich das M232 nicht angeschlossen habe, auch einen entsprechenden Fehler bekomme.

    Grüße
    Joe
     
  11. #10 h2owasser, 18.01.2004
    h2owasser

    h2owasser Sxe Power User

    Dabei seit:
    07.12.2002
    Beiträge:
    491
    Zustimmungen:
    0
  12. JoeA

    JoeA Jungspund

    Dabei seit:
    13.09.2003
    Beiträge:
    14
    Zustimmungen:
    0
    Hi,

    hey das ist aber ein geiles Projekt !

    sobald ich mehr Zeit habe werde ich mal versuchen ob ich mir das was abgucken kann.
    Und wenn nicht, so könnte ich zumindest mal das Thermometer nachbauen...

    Danke dafür !

    @pummel:
    Frage: Hast Du das M232 an einem 25 Poligen Anschluss ?
    Ich habe leider nur noch einen 9er am Rechner, und daher das Gerät per Adapter angeschlossen.

    Grüße
    Joe
     
  13. pummel

    pummel Grünschnabel

    Dabei seit:
    17.01.2004
    Beiträge:
    5
    Zustimmungen:
    0
    Ist wohl im A...

    Ich werde das Teil wohl zurückschicken. Alle IO-Ports sind komplette auf 0Volt (sollt High im Ruhezustand sein), auch die +5 und -7 Ports führen keine Spannung. Das kann ich wohl versuchen das Ding anzusprechen, wie ich will.

    Die Belegung meines 9 - 25 Kabel ist aber Ok, das habe ich gecheckt.
     
  14. #13 nitpilot, 25.01.2004
    nitpilot

    nitpilot Grünschnabel

    Dabei seit:
    25.01.2004
    Beiträge:
    7
    Zustimmungen:
    0
    Hallo alle zusammen,

    ich habe das Teil mit Perl laufen.
    Das folgende Programm setzt Tastaureingaben in Befehle um und gibt die Ausgaben auf den BS. Einfach starten und dei Befehle links in der ersten Spalte der Bedienungsanleitung Seite 12/13 eingeben .
    Mist, Zeilenumbrueche sind hier leider schiefgegangen.

    Hast Du auch Betriebsspannung an die Buchse an der Seite gelegt? Ohne geht nichts. Im Zweifel kann ich auch mit Schaltplan helfen.

    Gruss Matth

    #!/usr/bin/perl -w
    use English;
    use IO::Handle; #needed for autoflush
    use strict;
    my ($answer,$command,$einnr,$lfd);

    use constant SOH => chr 1; #first character to send
    use constant ACK => chr 6; #last character to receive for OK
    use constant CR => chr 13;
    use constant NAK => chr 21; #answer for command unknown

    sub schreibe{
    my $command = $_[0];
    print BOX SOH,"$command",CR; #send to M232
    };

    system "stty 2400 -cstopb raw -echo < /dev/ttyS5\n"; #set port to 2400,8,N,1 no conversions
    open(BOX, "+</dev/ttyS5") or die "can't connect to >/dev/ttyS5 $!";

    BOX->autoflush(1); #write everything immediate out
    STDOUT->autoflush(1); # " " " "

    while(1){
    $command = <STDIN>; #read command from keyboard
    chop($command); #strip last character
    if ($command eq "q") {goto ende} #if q goto ende
    schreibe ("$command"); #send to M232

    for ($lfd = 1; $lfd < 12; $lfd++) { #read max 12 characters from M232
    $einnr=sysread BOX,$answer,1; #read 1 byte
    if ($answer eq NAK) {print "unknown command: $command\n"; goto endfor} #error
    if ($answer eq ACK) {goto endfor} #ACK is endchar of record from M232
    print STDOUT "$answer"; #print answer on the screen
    }
    endfor:
    print STDOUT "\n";
    }
    ende: #label for programend
    close BOX; #close channnel
    print "ende\n";
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. pummel

    pummel Grünschnabel

    Dabei seit:
    17.01.2004
    Beiträge:
    5
    Zustimmungen:
    0
    Hi nitpilot,

    schön wenn es bei dir klappt.
    Ich habe das teil erst mal zurückgeschuickt und warte auf Ersatz.
    Ja, die Stromversorgung habe ich angeschlossen und überprüft. Auch mein Adapterkabel habe ich überprüft. (9 -> 25). Das Teil nutzt ja echt nur 2/3/7, daran kann es also nicht liegen.
    Dein kleines Perl werde ich ausprobieren, wenn ich das Gerät wiederhabe. Danke!
     
  17. pummel

    pummel Grünschnabel

    Dabei seit:
    17.01.2004
    Beiträge:
    5
    Zustimmungen:
    0
    Fehler gefunden

    Hallo,

    die ELVler haben mir das Gerät zurückgeschickt und meinen, es geht doch prima. Hmm, bin ich zu doof?
    Also in die Firma damit, alles an 25-9poligen Adaptern und Kabeln rausgekramt, was es so gab und durchprobiert. Nix. Verzeiflung.

    Dann spiele ich so aus Langerweile mit der Schachtel des von ELV als Zubehör angebotetenen Universal-Netztteiles rum und werde stutzig. Polarität! Man kann durch drehen des Adapterstecker die Polarität vertauschen! Ja und - promt klappt es!!!


    Je, je, je. Soviel Aufregung wegen ein klein wenig Verwirrung. Künftig werde ich auch bei einem Steckernetzteil die Anleitung lesen ......
     
Thema:

verzweifle an RS232

Die Seite wird geladen...

verzweifle an RS232 - Ähnliche Themen

  1. pcsx Problem... verzweifle

    pcsx Problem... verzweifle: Hi Leute ich haber hier ein selstames Probem mit pcsx dem PS Emulator... vielleicht kennt sich einer von euch da damit aus... ich bin so...
  2. Notebook, ATI und zweiter Screen - ich verzweifle

    Notebook, ATI und zweiter Screen - ich verzweifle: Ich versuche es jetzt seit Tagen, einen zweiten an mein Notebook angeschlossenen Monitor zusätzlich zum Laufen zu bringen, und schaffe es einfach...
  3. Gentoo licq und KDE! Ich verzweifle

    Gentoo licq und KDE! Ich verzweifle: Hi, ich hab mal ne Frage. Ich hab mir jetzt mein Gentoo System aufegsetzt und es läuft prima!! Wollte jetzt licq installieren. Also hab ich einen...
  4. RS232 ansprechen c't

    RS232 ansprechen c't: Hallo zusammen, vielleicht habt ihr auch schon vom neuen c't artikel gehört, in dem ein router mit einer neuen firmware geflasht wird....
  5. RS232 Schnittstelle Weiterleiten

    RS232 Schnittstelle Weiterleiten: Hallo Leute, Ich habe einen Kommunikationsserver SuSE10.0. An diesem ist an ttyS0 ein Interface zur Telefonanlage, die ich per minicom...