RS232 DTR funktioniert nicht mehr

Fragen zu Raspberry, FritzBox, Microcontroller, UART, etc...
Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » Sa 13. Dez 2014, 17:36

Hi,

der Befehl SPort.DTR = False bzw. SPort.DTR = True funktioniert mit Gambas 3.1.1 nicht mehr korrekt, einschalten funktioniert aber ausschalten nicht.

Hier die Procedure von mir:

Code: Alles auswählen

Public Sub btnDTR_Click()                                                 ' der Knopf "DTR" wurde gedrückt
  If SPort.Status = Net.Active Then                                       ' wenn der Port offen ist
    If SPort.DTR Then                                                     ' wenn DTR ein ist
      SPort.DTR = False                                                   ' DTR (4) ausschalten (auf low)
      imgDTR.Picture = Picture["img/LED-aus.png"]                         ' LED ausschalten
    Else                                                                  ' wenn DTR aus ist
      SPort.DTR = False                                                    ' DTR (4) einschalten (auf high)
      imgDTR.Picture = Picture["img/LED-ein.png"]                         ' LED einschalten
    Endif
  Else                                                                    ' wenn der Port nicht offen ist
    txaERXD.Text = "DTR: " & lblOPF.Text & Chr(10) & txaERXD.Text & Chr(10)
  Endif
End


hat Jemand Informationen ob das so gewollt ist und warum?

2 Ausgänge und 4 Eingänge reichen so eben für meine Anwendung aus, 1 Ausgang ist definitiv zu wenig.

Grüßle
Gruß, Naubaddi

tux_
Moderator
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von tux_ » So 14. Dez 2014, 12:19

Ich habe nur Informationen darueber, dass Gambas 3.1.1 auch wieder zweieinhalb Jahre alt ist. Auszerdem deutet diese Versionsnummer (vage) darauf hin, dass du ein Ubuntu benutzt und Gambas aus dessen offiziellen Repositorien installiert hast. Im Wiki[0] wird gesagt, dass man dieser Quelle nicht trauen soll:

DO NOT USE the Gambas packages in the Ubuntu repository made for 12.04 (precise) up to 14.04 (trusty) They are wrong and an older version 3.1.1.


Aber mehr kann ich nicht sagen. (Es ist aber den Versuch wert, die o.g. Fehlerquelle erst einmal durch ein Gambas-Update auszuschlieszen.) Ansonsten kann natuerlich ein Bug vorliegen. Um das zu pruefen, brauchen wir aber ein komplettes Projekt-Archiv. Das Projekt sollte so klein wie moeglich sein, aber den Fehler reproduzieren.

[0] http://gambaswiki.org/wiki/install/ubuntu
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » So 14. Dez 2014, 14:18

Hi,

hm, dachte das ein Gambas 3.1.1 bei Ubuntu 14.04. die beste Wahl ist, werde mal sehen ob ich es hin bekomme ein anderes Gambas zu installieren.

tux_ hat geschrieben:...Das Projekt sollte so klein wie moeglich sein, aber den Fehler reproduzieren...


Der Fehler ist immer da also auch reproduzierbar :wink: , habe die von mir geänderte/angepasste Version von dem RS232 Beispiel, ca. 48,6kByte als Anhang beigelegt.

Das bei Gambas 3.1.1 beigelegte RS232 Beispiel hat den gleichen Fehler bei DTR, bei Gambas 2 funktionierte es ohne Probleme.

Grüßle

RS232-Test:
SerialPort.tar.gz
(47.47 KiB) 218-mal heruntergeladen


*edit, bei Gambas 3.6.2 ist der Fehler auch

*edit, Bild eingefügt
RS232.png
RS232.png (65.14 KiB) 7657 mal betrachtet
Gruß, Naubaddi

tux_
Moderator
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von tux_ » So 14. Dez 2014, 21:46

tux_ hat geschrieben:...Das Projekt sollte so klein wie moeglich sein, aber den Fehler reproduzieren...


Der Fehler ist immer da also auch reproduzierbar :wink:


Das ist nur die halbe Miete. Das Projekt soll auch so klein wie moeglich sein. Sind all diese ComboBoxen und dieses Affen-Bild wirklich *noetig*, um den Fehler zu reproduzieren? Ich vermute, dass man nicht einmal ein Fenster braucht. Am besten waere also ein Konsolen-Programm, das automatisch eine Reihe von Schritten durchfuehrt (so wenige wie moeglich), die den Fehler reprodzieren und, wenn der Fehler auftritt, eine entsprechende Meldung ausgibt bzw. wenn der Fehler nicht auftritt ebenfalls sagt, dass alles gut gelaufen ist.

der Befehl SPort.DTR = False bzw. SPort.DTR = True funktioniert mit Gambas 3.1.1 nicht mehr korrekt, einschalten funktioniert aber ausschalten nicht.


Bevor ich dann den Bug-Report losschicke, muss ich hier noch einmal nachfragen. Was passiert denn genau bzw. was passiert nicht? Was ist vorher passiert bzw. nicht passiert? "Nicht-Funktionieren" hat viele Gesichter: stuerzt der Interpreter ab, beim Versuch, die o.g. Eigenschaft zu setzen, faehrt dein PC herunter, steigt Rauch auf, laeuft der Prozessor auf Hochtouren, tut sich einfach nichts, etc. etc. pp.?

Man braucht sicher auch Hardware dafuer. Was verwendest du? Hast du es mit dieser Hardware an dem gleichen Computer mit Gambas 2 probiert? D.h. sind Fehler an deiner Hardware (Port am PC oder das Teil selbst) auszuschlieszen?
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » So 14. Dez 2014, 23:42

Hi,

DANKE für Deine Bemühungen, mir bricht immer die nicht vorhandenen englisch Kenntnis das Genick.

Ganz knapp erklärt: ein ausschalten von DTR ist nicht mehr möglich, es funktioniert nicht, DTR bleibt auf +12V und geht nicht auf -12V, bzw. DTR bleibt auf True und geht nicht auf False...

tux_ hat geschrieben:...Das Projekt soll auch so klein wie moeglich sein...
...Bevor ich dann den Bug-Report losschicke, muss ich hier noch einmal nachfragen...
...Man braucht sicher auch Hardware dafuer


* O.K. habe das Projekt so weit gekürzt wie es mir möglich ist.
* Fragen kostet nix ;-)
* nein es ist für den Test keine Hardware außer halt einer RS232 bzw. eines RS232-->USB-Adapters am/im PC nötig

Im Projekt ist /dev/ttyUSB0 vorgegeben, muss je nach Test auf /dev/ttyS0 oder... angepasst werden.

So klein wie mir möglich:
SerialPort-Test.tar.gz
(7.38 KiB) 190-mal heruntergeladen


Grüßle

*edit, das Programm besteht nur noch aus folgenden Zeilen und einem Fenster mit 2 Knöpfen und einem Textfeld (der Knopf RTS ist als Beispiel was DTR eigentlich auch machen sollte):

Code: Alles auswählen

' Gambas class file

' Testprogramm für die serielle Schnitstelle RS232

Public Sub Form_Open()                                                    ' Programm starten
 SPort.Open                                                               ' Port öffnen (/etc/ttyUSB0 bei Bedarf ändern)
End

Public Sub Form_Close()                                                   ' Programm beenden
  If SPort.Status = Net.Active Then SPort.Close                           ' wenn der Port offen ist, schließen
  Me.Close                                                                ' Programm beenden
End

Public Sub btnDTR_Click()                                                 ' der Knopf "DTR" wurde gedrückt
  If SPort.DTR Then                                                       ' wenn DTR ein ist
    SPort.DTR = False                                                     ' DTR (4) ausschalten (auf low)
    txaERXD.Text = "DTR ist ausgeschaltet"                                ' Text ausgeben
  Else                                                                    ' wenn DTR aus ist
    SPort.DTR = True                                                      ' DTR (4) einschalten (auf high)
    txaERXD.Text = "DTR ist eingeschaltet"                                ' Text ausgeben
  Endif
End

Public Sub btnRTS_Click()                                                 ' der Knopf "RTS" wurde gedrückt
  If SPort.RTS Then                                                       ' wenn RTS ein ist
    SPort.RTS = False                                                     ' RTS (7) ausschalten (auf low)
    txaERXD.Text = "RTS ist ausgeschaltet"                                ' Text ausgeben
  Else                                                                    ' wenn RTS aus ist
    SPort.RTS = True                                                      ' RTS (7) einschalten (auf high)
    txaERXD.Text = "RTS ist eingeschaltet"                                ' Text ausgeben
  Endif
End
Gruß, Naubaddi

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » Mo 15. Dez 2014, 10:31

Hi,

vielleicht ist diese Formulierung besser:

* nach dem Öffnen der RS232 ist DTR = False (Hardware: die Spannung ist -12V, eine LED an DTR und GND ist aus weil -12V)
* mit dem Befehl "SPort.DTR = True" wird DTR auf True gesetzt (Hardware: die Spannung ist +12V, eine LED an DTR und GND ist an weil +12V)

fragt man nun "SPort.DTR" auf den Zustand ab ergibt es False an Stelle von True, das Problem ist Gambas meint "SPort.DTR" ist False und ignoriert den Befehl "SPort.DTR = False".

Das messen der Spannung und die erwähnte LED an DTR und GND ist nicht erforderlich, der Fehler ist bei Gambas zu erkennen/sehen wenn man DTR abfragt, einmal eingeschaltet lässt sich DTR nicht mehr ausschalten.

Grüßle
Gruß, Naubaddi

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » Mo 15. Dez 2014, 11:52

Hi,

Naubaddi hat geschrieben:...So klein wie mir möglich:...


damit eine eventuell angeschlossene Hardware funktioniert braucht es dann doch noch ein paar Zeilen bei Public Sub Form_Open(), um DTR bei Gambas zu testen sind diese Zeilen nicht notwendig.

Code: Alles auswählen

' Gambas class file

' Testprogramm für die serielle Schnitstelle RS232

Public Sub Form_Open()                                                    ' Programm starten
  SPort.PortName = "/dev/ttyUSB0"                                         ' Name
  SPort.Speed = 19200                                                     ' Geschwindigkeit
  SPort.DataBits = 8                                                      ' Datenbits
  SPort.Parity = 0                                                        ' Parität
  SPort.StopBits = 1                                                      ' Stoppbits
  SPort.FlowControl = 0                                                   ' Datenfluss
  SPort.Open()                                                            ' Port öffnen
  SPort.DTR = False                                                       ' DTR (4) ausschalten (auf low)
  SPort.RTS = False                                                       ' DTR (7) ausschalten (auf low)
End

Public Sub Form_Close()                                                   ' Programm beenden
  SPort.Close                                                             ' Port schließen
  Me.Close                                                                ' Programm beenden
End

Public Sub btnDTR_Click()                                                 ' der Knopf "DTR" wurde gedrückt
  If SPort.DTR Then                                                       ' wenn DTR ein ist
    SPort.DTR = False                                                     ' DTR (4) ausschalten (auf low)
    txaERXD.Text = "DTR ist ausgeschaltet"                                ' Text ausgeben
  Else                                                                    ' wenn DTR aus ist
    SPort.DTR = True                                                      ' DTR (4) einschalten (auf high)
    txaERXD.Text = "DTR ist eingeschaltet"                                ' Text ausgeben
  Endif
End

Public Sub btnRTS_Click()                                                 ' der Knopf "RTS" wurde gedrückt
  If SPort.RTS Then                                                       ' wenn RTS ein ist
    SPort.RTS = False                                                     ' RTS (7) ausschalten (auf low)
    txaERXD.Text = "RTS ist ausgeschaltet"                                ' Text ausgeben
  Else                                                                    ' wenn RTS aus ist
    SPort.RTS = True                                                      ' RTS (7) einschalten (auf high)
    txaERXD.Text = "RTS ist eingeschaltet"                                ' Text ausgeben
  Endif
End


Gambas-Projekt auch geeignet für angeschlossene Hardware:
SerialPort-Test.tar.gz
(7.5 KiB) 184-mal heruntergeladen


*edit, ganz vergessen, die Hardware hat sich nicht geändert, es wurde nur von Ubuntu 12.04 & Gambas 2 auf Ubuntu 14.04 & Gambas 3 gewechselt.

Grüßle
Gruß, Naubaddi

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » Mo 15. Dez 2014, 14:49

Hi,

es gibt Neues zum DTR-Problem :-) , es funktioniert weiterhin nicht aber der Fehler konnte weiter eingekreist werden. Gelernt habe ich bei Gambas auch wieder einiges, ein Programm ohne Fenster zu erstellen und wie dann die RS232 angesprochen wird.

Das Problem/der Fehler ist bei einem Programm mit Fenster anders als bei einem Programm ohne Fenster :shock: , die Software gibt in beiden Fällen einen falschen Wert für DTR (immer False) zurück :evil: . Bei einem Programm mit Fenster und dem SerialPort (gb.net) im Formular reagiert die Hardware auch Fehlerhaft, bei einem Programm ohne Fenster (das im Anhang) funktioniert die Hardware korrekt obwohl eine DTR-Abfrage Falsch ist :? .

Hm, keine Ahnung wie ich das besser erklären kann.

So sieht das Programm ohne Fenster aus (wurde als Archiv angehängt):

Code: Alles auswählen

Public Sub Main()                                                      ' Programm starten
  Dim hSerialPort As New SerialPort                                    ' die RS232
  hSerialPort.PortName = "/dev/ttyUSB0"                                ' an einem USB-->RS232 Adapter (bei einer echten RS232 "/dev/ttyS0"
  hSerialPort.Speed = 19200                                            ' RS232 Geschwindigkeit
  hSerialPort.DataBits = 8                                             ' RS232 Datenbits
  hSerialPort.Parity = 0                                               ' RS232
  hSerialPort.StopBits = 1                                             ' RS232
  hSerialPort.FlowControl = 0                                          ' RS232
  hSerialPort.Open                                                     ' RS232 öffnen
  hSerialPort.DTR = True                                               ' RS232 DTR einschalten
  hSerialPort.RTS = True                                               ' RS232 RTS einschalten
  Print "DTR soll: True, ist: "; hSerialPort.DTR; " <--- Fehler"       ' RS232 DTR Zustand abfragen und anzeigen
  Print "RTS soll: True, ist: "; hSerialPort.RTS; " <--- O.K."         ' RS232 RTS Zustand abfragen und anzeigen
  Wait 1                                                               ' eine Sekunden warten damit die Hardware es mitbekommt ;-)
  hSerialPort.DTR = False                                              ' RS232 DTR ausschalten
  hSerialPort.RTS = False                                              ' RS232 RTS ausschalten
  Print "DTR soll: False, ist: "; hSerialPort.DTR; " <--- O.K."        ' RS232 DTR Zustand abfragen und anzeigen
  Print "RTS soll: False, ist: "; hSerialPort.RTS; " <--- O.K."        ' RS232 RTS Zustand abfragen und anzeigen
  Wait 1                                                               ' eine Sekunden warten damit die Hardware es mitbekommt ;-)
  hSerialPort.DTR = True                                               ' RS232 DTR einschalten
  hSerialPort.RTS = True                                               ' RS232 RTS einschalten
  Print "DTR soll: True, ist: "; hSerialPort.DTR; " <--- Fehler"       ' RS232 DTR Zustand abfragen und anzeigen
  Print "RTS soll: True, ist: "; hSerialPort.RTS; " <--- O.K."         ' RS232 RTS Zustand abfragen und anzeigen
  Wait 1                                                               ' eine Sekunden warten damit die Hardware es mitbekommt ;-)
  hSerialPort.Close                                                    ' RS232 schließen
End                                                                    ' Programm beenden


DTR-Test.tar.gz
(4.73 KiB) 202-mal heruntergeladen


Grüßle
Gruß, Naubaddi

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » Mo 15. Dez 2014, 17:09

Hi,

der Fehler ist festgenagelt :D !

Durch das experimentieren mit einem Programm ohne Fenster konnte der Fehler festgenagelt werden, es ist der Wert bei einer Abfrage von DTR der falsch ist. Eine Abfrage mit "If hSerialPort.DTR Then" kann nicht funktionieren weil der Wert immer False ist, das absolut kürzeste Programm wäre:

Code: Alles auswählen

Public Sub Main()                                                      ' Programm starten
  Dim hSerialPort As New SerialPort                                    ' die RS232
  hSerialPort.PortName = "/dev/ttyUSB0"                                ' an einem USB-->RS232 Adapter (bei einer echten RS232 "/dev/ttyS0"
  hSerialPort.Speed = 19200                                            ' RS232 Geschwindigkeit
  hSerialPort.DataBits = 8                                             ' RS232 Datenbits
  hSerialPort.Parity = 0                                               ' RS232 Datenprüfung
  hSerialPort.StopBits = 1                                             ' RS232 Stoppbits
  hSerialPort.FlowControl = 0                                          ' RS232 Datenflußsteuerung
  hSerialPort.Open                                                     ' RS232 öffnen
  hSerialPort.DTR = True                                               ' RS232 DTR einschalten
  Print "DTR soll: True, ist: "; hSerialPort.DTR; " <--- Fehler"       ' RS232 DTR Zustand abfragen und anzeigen
  hSerialPort.Close                                                    ' RS232 schließen
End                                                                    ' Programm beenden


Nun sollte einer Behebung des Fehlers nichts mehr im Wege stehen.

Grüßle
Gruß, Naubaddi

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » Fr 26. Dez 2014, 17:10

Hi,

bis der Fehler von DTR behoben ist benutze ich eine globale Variable die auf den aktuellen Stand von DTR gehalten wird, jedes mal wenn DTR im Programm ein/aus geschaltet wird wird auch die Boolean-Variable auf ein/aus (true/false) gesetzt.

die globale Variable:

Code: Alles auswählen

Public DTRein As Boolean = False

DTR einschalten:

Code: Alles auswählen

hSerialPort.DTR = True
DTRein = True

DTR ausschalten:

Code: Alles auswählen

hSerialPort.DTR = False
DTRein = False

DTR abfragen:

Code: Alles auswählen

if DTRein then...


so kann man zu jeder Zeit den Zustand von DTR abfragen, vielleicht hilft es Jemanden der auch die RS232 benutzt.

Grüßle
Gruß, Naubaddi

tux_
Moderator
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von tux_ » Mo 29. Dez 2014, 13:08

Auf den Bug-Report, den ich abgeschickt hatte[0], wurde bisher nicht reagiert.

[0] http://sourceforge.net/p/gambas/mailman/message/33155433/
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » Mo 29. Dez 2014, 23:42

Hi,

den hatte ich schon gefunden, danke für Deine Mühe ihn für mich zu erstellen.

Wie Du gelesen hast habe ich mir eine eigene Möglichkeit geschaffen DTR abzufragen, wenn ein Fehler erkannt ist kann man ihn mit etwas Glück umgehen.

Grüßle
Gruß, Naubaddi

tux_
Moderator
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von tux_ » Fr 2. Jan 2015, 13:52

Hast du eine Moeglichkeit, an die neueste Revision heranzukommen? Dort koennte es jetzt korrigiert sein. Bitte bestaetigen, wenn moeglich.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Naubaddi
Foriker
Beiträge: 89
Registriert: Di 10. Jan 2012, 21:30
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von Naubaddi » Fr 2. Jan 2015, 14:43

Hi,

habe von "http://gambaswiki.org/wiki/install/ubuntu" mit:

Code: Alles auswählen

sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3

Gambas 3.6.2 installiert, sollte doch die aktuelle Version sein?

Bevor ich hier etwas falsches mache, kann man mit:

Code: Alles auswählen

sudo apt-get upgrade gambas3

Gambas aktualisieren?

Grüßle
Gruß, Naubaddi

tux_
Moderator
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: RS232 DTR funktioniert nicht mehr

Beitrag von tux_ » Fr 2. Jan 2015, 15:15

Gambas 3.6.2 installiert, sollte doch die aktuelle Version sein?


Ja, die aktuelle stabile Version. Der moegliche Bugfix ist in der neusten Entwicklerversion ("trunk"). Um diese zu installieren, musst du dein jetziges Gambas deinstallieren (apt-get remove, glaube ich?), dann das stabile Repositorium austragen (sudo add-apt-repository --remove ppa:gambas-team/gambas3, eventuell?), das trunk-Repositorium eintragen und Gambas kompilieren. Letztere Schritte sind hier[0] beschrieben (beachte: "trunk" statt "stable"!)

[0] http://gambaswiki.org/wiki/install/ubuntu#t3
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste