![Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht](misc/logos/logo.png) |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 23.12.2017, 00:45 Titel: |
|
|
Im Verzeichnis "FBIde"
http://up.picr.de/31308837gq.jpg
Verzeichnis IDE und die Datei fdid.exe ist drin.
Muss ich das Verzeichnis IDE auch ins Verzeichnis FreeBASIC verschieben ?
Gruß |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
St_W
![](images/avatars/106287718549fca05d5271f.jpg)
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 23.12.2017, 02:01 Titel: |
|
|
Wenn du etwas verschiebst, dann alles miteinander. Allerdings kann ich den Rat meiner Mitposter nicht ganz nachvollziehen, wieso FBIde im gleichen Verzeichnis wie der FBC liegen sollte. Funktionieren sollte es anders auch, du musst vermutlich den Compilerpfad anpassen in diesem Fall. Möglicherweise musst du das anderfalls nicht? _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Sebastian Administrator
![](images/avatars/563932275488e4d20c5ee9.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 23.12.2017, 02:20 Titel: |
|
|
@eeg: Ja, alles aus dem Verzeichnis eine Ebene höher verschieben. Der Ordner "FBIde" ist dann anschließend leer.
@St_W: Ich meine, default-mäßig sucht FBIde relativ im gleichen Verzeichnis nach dem fbc.exe. Wenn man beides zusammen im gleichen Verzeichnis hat, müsste das Zusammenspiel zwischen beidem "out of the box" funktionieren. Wenn man es getrennt installiert, muss man in der FBIde-Konfiguration doch zuerst den Pfad zum fbc eintragen. (Oder vermutlich alternativ das fbc.exe-Verzeichnis in der PATH-Variable hinterlegen.) Also eine vermeidbare Einstiegshürde mehr, wenn man es nicht zusammen ablegt. _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 24.12.2017, 00:58 Titel: |
|
|
Hallo Sebastian,
da sage ich mal das dein Programmvorschlag, eine Punktlandung ist, ohne das zu testen.
Da kann ich nur vor Neid erblassen.
http://up.picr.de/31319402av.jpg
Ich hab das mit RS232 und PZEM004T (FreeBasic) gemacht und die Übertragung läuft geschmeidig.
Wie man das mit USB macht muss ich erst noch testen.
Da hat ja volta am 19.12.2017, 16:39 eine Vorschlag gemacht für USB, hab ich aber noch nicht alles verstanden.
#
Bin ja noch auf der Suche wie ich die Stromrichtung abfrage.
Mit B2 C0 A8 01 01 00 1C bekommt man ja die Watt, nur ob das Lieferung (Netzeinspeisung) oder Netzbezug ist wird am PIN 51 vom IC SD3004 ausgegeben und soll über einen Optokoppler an den PC übergeben werden.
Hat jemand ein Idee wie ich das machen könnte, mit RS232 oder auch USB.
Noch einen Weihnachtsgruß an alle im Forum. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 24.12.2017, 11:38 Titel: |
|
|
@eeg-grimm
Mein kleines Prog hat nichts mit USB zu tun.
Ich hatte nur ausprobiert wie sich die (Hex)Empfangswerte als
Prüfsumme und als Klarwerte berechnen lassen.
Code: | z.B.
A0 00 E7 01 00 00 88
(A0+00+E7+01+00+00) And FF = 88 Prüfsumme
Str((00*256)+E7)+"."+Str(01) = "230.1" Volt |
EDIT so sollte es gehen
Code: | ' Code-Schnipsel ohne Funktionsgarantie. Verwendung nur auf eigene Gefahr!
Declare Function getHexString( Daten As String ) As String
Declare Function wandle (D As String) As Single
' TODO: Hier Parameter einstellen:
Const COMPortParameter = "COM1:9600,N,8,1,ME,CS0,DS0,RS"
' Kommandos hinterlegen:
Dim KommandoA As String = Chr( &HB0, &HC0, &HA8, &H01, &H01, &H00 )
' COM-Port oeffnen:
Print "Versuche COM-Port zu oeffnen: "; COMPortParameter
If ( Open Com ( COMPortParameter For Binary As #1 ) <> 0 ) Then
Print "Der COM-Port konnte leider nicht geoeffnet werden."
GetKey
End 1
End If
Print
Print "COM-Port geoeffnet."
Print "Bitte [Leertaste] druecken zum Senden des Befehls und [Esc] zum Beenden."
Print
Dim As String Tastatur="", Datenpuffer=""
Do
' Hat das angeschlossene Geraet inzwischen Daten gesendet?
If Loc( 1 ) > 0 Then
Datenpuffer = Space( Loc( 1 ) )
Get #1, , Datenpuffer
Print "Daten empfangen! Hex-Ansicht: ";
Color 10
Print getHexString( Datenpuffer )
Color 7
End If
Print wandle (Datenpuffer)
' Hat der Benutzer eine Taste gedrueckt?
Tastatur = InKey
If( Tastatur = Chr(32) ) Then 'Leertaste
Print "Sende Daten! Hex-Ansicht: ";
Color 12
Print getHexString( KommandoA )
Color 7
Put #1, , KommandoA
End If
Sleep 1
Loop Until Tastatur = Chr(27) 'Escape
Print
Print "Schliesse Schnittstelle..."
' Schnittstelle schliessen:
Close #1
Print "Programm beendet."
GetKey
End 0
' String mit irgendwelchen Daten in Hex-Form ausgeben, um auch nicht-druckbare
' Zeichen einfach lesen zu koennen.
Function getHexString( Daten As String ) As String
Dim Laenge As Integer = Len( Daten )
If( Laenge < 1 ) Then
Return ""
End If
Dim HexAusgabe As String = ""
For i As Integer = 1 To Laenge
HexAusgabe &= Hex( Asc( Mid( Daten, i, 1 ) ), 2 ) & " "
Next i
Return HexAusgabe
End Function
'Prüfsumme bilden, Wert berechnen
Function wandle (D As String) As Single
If D[5]<> ((D[0]+D[1]+D[2]+D[3]+D[4]) And 255) Then
?"Fehler";
Exit Function
EndIf
Select Case D[0]
Case &HA0 To &HA2
Function = Val(Str((D[1]*256)+D[2])+"."+Str(D[3]))
Case &HA3
Function = Val(Str((D[1]*65536)+(D[2]*256)+D[3])+"."+Str(D[4]))
Case Else
Function = 0
End Select
End Function |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
St_W
![](images/avatars/106287718549fca05d5271f.jpg)
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 24.12.2017, 16:16 Titel: |
|
|
eeg-grimm hat Folgendes geschrieben: | Wie man das mit USB macht muss ich erst noch testen. |
Direkt kannst du das Gerät nicht via USB anschließen, da brauchst du ohnehin die nötige Hardware, also in diesem Fall einen USB-Seriell(RS232) Umwandler. Aus Softwaresicht wird dabei dann ein virtueller COM-Port bereitgestellt, der sich genau so verhält wie dein physischer RS232 Anschluss. Du musst also für diese Variante nichts anderes ändern als die entsprechende Nummer des COM-Ports. Welche Portnummer die virtuelle (oder auch der physische) serielle Schnittstelle zugewiesen bekommen haben kannst du im Windows Geräte-Manager sehen. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 24.12.2017, 20:54 Titel: |
|
|
eeg-grimm hat Folgendes geschrieben: | die Messung zeigt die Wirkleistung an... | Stimmt, in der Beschreibung steht "Active power" (wer lesen kann, ist klar im Vorteil ). Damit wäre das Modul auch für mich interessant (in 3-phasiger Ausführung, für eines meiner... nun ja... nennen wir es einmal "ruhenden" Projekte).
Die Sache einmal weitergedacht: Für ein 3-phasiges Messgerät wäre ein PC mit 3 RS232-Ports erforderlich, das scheint mir ziemlich unpraktikabel. Wenn außerdem noch weitere Signale des SD3004 ausgewertet werden sollen, wäre es sinnvoller, einen Mikrocontroller (z.B. AT90USBxx von Atmel) als Interface zu benutzen. Damit könnten dann auch die Pegelwandler entfallen, und das Messgerät wäre mit einem (einzelnen) USB - Anschluss auch einigermaßen zukunftssicher.
Was sich mir vom Sinn her nicht ganz erschliesst, ist die Möglichkeit, dem Modul eine IP - Adresse zuzuweisen.
Und wenn jemand einen Link zu einer ausführlichen Beschreibung des SD3004 hat: Ich habe da bisher nichts gefunden.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 24.12.2017, 23:04 Titel: |
|
|
So die Geschenke sind verteilt und ausgepackt.
Hallo volta,
Hallo St_W,
das man auch zwischen USB und dem PZEM004T eine Pegelanpassung braucht ist klar.
Ich hab aber noch nichts mit USB bei eigenen Programmen gemacht das muss ich erst mal verstehen.
Bin mal froh das ich das Programm von Sebastian in den Eckpunkten verstanden habe.
################
Hallo grindstone,
das 3-phasiges messen möchte ich auch nicht an PC mit 3 RS232-Ports machen, ich möchte erst mal verstehen was man mit den PZEM004T genau machen kann und auch wie.
Bei Qbasic hab ich eben noch Grundkenntnisse und verstehe erst mal was da genau ab geht beim Messmodul.
Du schreibst ja was von einem Zitat: | "ruhenden" Projekt | .
Bei mein Projekt soll der Überschussstrom von einer PV-Anlage „vernichten“ werden.
Ich möchte das ESP8266 mit drei Strommesser PZEM-004T zusammen schalten und die Messwerte abfragen und Verbraucher EIN und AUS schalten und am besten noch speichern eine Übertragung würde das Ganze noch abrunden z.B. zu einer Anzeige, PC usw.
https://github.com/apreb/eNode
.
Der Endausbau soll so wie in der Systemübersicht aussehen.
http://up.picr.de/31327145vi.jpg
.
Es soll die Leistung in drei Wechselstromleitungen gemessen werden L1,L2 und L3 und auch die Energierichtung berücksichtigt werden.
Das soll bei einer PV-Anlage am Netzübergabepunkt festgestellt werden ob Strom in das Haus geht oder vom Haus ins Netz und auch die Energiemenge W.
.
Geht Strom ins Netz sollen zusätzliche Verbraucher eingeschaltet werden (3 bis 4 Stück) um die Netzlieferung zu minimieren.
.
Hier ist was mit 3 X PZEM-004T gemacht aber nur am ersten PZEM-004T wird die Energierichtung abgefragt und geht zum Pin 5 (GPIO14 vom ESP-12-E)
.
https://github.com/apreb/eNode
.
Das ESP8266 (ESP-12-E) soll man ja mit der Arduino Software ansprechen können.
Die Regelung muss ja nicht unbedingt das ESP-12-E sein, nur ist da gleich eine Funkübertragung mit dabei, da vermeidet man Kabel durchs Haus zu ziehen.
####
Das mit der IP – Adresse beim PZEM004T hab ich auch nicht so richtig verstanden, dachte eigentlich das die 192,168,1,1 fest ist.
Gruß |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Sebastian Administrator
![](images/avatars/563932275488e4d20c5ee9.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 25.12.2017, 00:57 Titel: |
|
|
Bei USB ist es mit einer Pegelanpassung nicht getan. Der normale COM-Port (RS232) ist ja auch nur für Point-to-Point gedacht, Peripherie zu Computer. USB ist ein Bussystem, also eher wie RS485, nur viel komplexer bzw. zusätzlich auch noch mind. eine logische Schicht oben drauf (Adressierung der Bus-Teilnehmer usw.). Die Geräte-/Teilnehmer-IDs werden bei USB auch irgendwie zentral von einem Konsortium oder sowas verwaltet. (Ist ne Weile her, dass ich mich da mal eingelesen hatte.) Bei so einem Bus hängen wie an einer Wäscheleine (von der Idee her) beliebig viele Teilnehmer, also nicht nur 2 Kommunikationspartner. Um an einem USB-Bus teilnehmen zu können, muss dein Controller das Protokoll beherrschen. Da reicht es nicht, einfach Daten drauf los zu senden. Deshalb verwendet man dafür häufig spezialisierte, fertige ICs, die die ganze Komplexität des Bussystems verbergen und für den Entwickler so tun, als handele es sich um einen banalen COM-Port. Dann hast du applikationsseitig gar nichts mehr mit USB zu tun, sondern nutzt es genauso wie ein Gerät an COM1 oder COM2. Nur dass der "simulierte" COM-Port dann eben COM8 oder sowas ist. _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 25.12.2017, 10:52 Titel: |
|
|
Hallo Sebastian,
hab jetzt mal mit deinem Programm COM2, 4, 5, 6, 7, 8 und COM9 getestet, kommt immer die Fehlermeldung.
„Der COM-Port konnte leider nicht geoeffnet werden.“
USB spricht irgend wie als COM3, siehe Foto.
COM1 ist ja die tatsächlich vorhandene RS232 am PC und da ist ja kein Pegelumsetzer vorhanden und auch kein Messmodul.
Deshalb kommt auch keine Antwort vom COM1, siehe Foto.
http://up.picr.de/31329613vb.jpg
#
Zitat: | „Deshalb verwendet man dafür häufig spezialisierte, fertige ICs, die die ganze Komplexität des Bussystems verbergen und für den Entwickler so tun, als handele es sich um einen banalen COM-Port.“ |
Mit Bussystems habe ich auch bereits einiges gemacht mit Basic, aber nur mit I2C-Bus.
IP – Adresse beim PZEM004T ist ja 192.168.1.1 so sehe ich das erst mal und im IC SD3004 ist das mit den COM-Port Sachen bereits drinnen.
Im Netz sind ja einige Beispiele das über USB das PZEM004T mit dem PC spricht.
Die Rückmeldungen vom USB-COM3 sind ja nicht schlüssig und immer die selben.
Egal ob man die USB-Pegelumsetzer eingesteckt ist oder nicht, ob die 230V AC anliegen oder nicht.
Zumindest ist klar das da jetzt USB zu COM3 spricht.
Da ist eine Beschreibung auf Deutsch, aber auch nicht sehr aufschlussreich.
https://de.aliexpress.com/item/1-Set-AC-80-260V-100A-Electric-Monitoring-Module-Power-Voltage-Current-Tester-With-Split-Core/32805420539.html
Gruß |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 29.12.2017, 00:06 Titel: |
|
|
Hallo Jungs,
hab jetzt mal versucht vom COM1 RTS zu schalten (LED zu GND, EIN-AUS)
Mit dem eingebaute COM1 am PC geht das, mit FreeBASIC und Pegelanpassung an TTL.
Zitat: |
' Schaltet RTS (Pin7) am COM1 EIN AUS ( nur am COM1 )
' 27.12.2017 EEG
OPEN COM "COM1:9600,N,8,1,ME,CS0,DS0,RS" AS #1
DIM AS INTEGER i
FOR i = 1 TO 10
OUT 1020,0
PRINT "RTS = LED EIN (+5V)";i
SLEEP 2000
OUT 1020,3
PRINT "RTS = LED AUS (-5V)"
SLEEP 2000
SLEEP 500
NEXT
end |
###############
Nun mach ich das mit dem USB Pegelanpassung und auch nach TTL.
Versucht vom COM4, RTS anzuschalten (LED zu GND, EIN-AUS) das geht aber nicht.
Zitat: | ' Schaltet RTS (Pin7) am COM4 EIN AUS ( USB = COM4 )
' 27.12.2017 EEG
OPEN COM "COM4:9600,N,8,1,ME,CS0,DS0,RS" AS #3
DIM AS INTEGER i
FOR i = 1 TO 10
OUT 748,0
PRINT "RTS = LED EIN (+5V)";i
SLEEP 2000
OUT 748,3
PRINT "RTS = LED AUS (-5V)"
SLEEP 2000
SLEEP 500
NEXT
end |
Wo hab ich da den Fehler, oder geht COM4 nicht mit FreeBASIC.
########################
Verwende ich das keine Programm (COM-Tester 1.0), so kann ich auch RTS EIN und AUS schalten am USB (COM4)
http://elektronik-kompendium.de/public/arnerossius/programme/windows/porttest.htm
Gruß |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Sebastian Administrator
![](images/avatars/563932275488e4d20c5ee9.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 29.12.2017, 04:23 Titel: |
|
|
Hallo,
ich könnte mir gut vorstellen, dass die USB-Lösungen standardmäßig nur RXD und TXD bieten, ohne eine ("manuelle" Pin-Toggle-) Hardware-Flusssteuerung zu ermöglichen. Ich hab schon öfters mitbekommen, dass man bei den simulierten COM-Ports via USB die Statusleitungen nicht manuell setzen könne. Vielleicht geht das, wenn man direkt irgendwelche C-APIs des USB-Adapter-/IC-Anbieters verwendet. Also in der Anwendung nicht so tut, als arbeite man mit einem normalen COM-Port, sondern wirklich ein proprietäres API bzw. eine Bibliothek des USB-Converter-Herstellers nutzt.
Ich glaube, ich würde diese USB-Adapter-Lösungen vermeiden und lieber für 20...50 Euro eine PCI(-Express)-Steckkarte mit "normalen" RS232-Schnittstellen einbauen, sofern der PC keine mehr on-board hat. Bei ebay findet man solche Karten auch gebraucht recht günstig, teilweise mit extrem vielen COM-Ports, z. B. 8 Stück an einer Kabelpeitsche. Das sind dann "echte, normale" COM-Ports. Dann spart man sich den Umweg über USB. Ich glaube, im professionellen Industrie-Elektronik-Bereich verwendet man entweder Systeme, die RS232- und/oder RS485-Ports "selbstverständlich" haben (irgendwelche Embedded-Industrie-PCs, Hutschienen-PCs usw.), oder nutzt eben solche PCI(Express)-Steckkarten.
Solche Port-Karten gibt es zum Beispiel von EXSYS, Delock und anderen Anbietern.
Link-Beispiele:
Die Konvertierung von USB nach RS232 oder TTL würde ich nämlich nicht vergleichen mit der Konvertierung von TTL nach RS232, sondern eher mit der Konvertierung von analogem Fax zu PDF-Dokument in einer E-Mail. USB ist eine recht komplexe Busschnittstelle, die vom Protokoll, von den Treibern usw. her komplett anders funktioniert, als einfach einen Point-to-Point-COM-Port zu öffnen. Von daher birgt das recht viel Komplexität und Problempotenzial.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 29.12.2017, 11:52 Titel: |
|
|
Zitat: |
Sebastian schreibt:
ich könnte mir gut vorstellen, dass die USB-Lösungen standardmäßig nur RXD und TXD bieten, ohne eine ("manuelle" Pin-Toggle-) Hardware-Flusssteuerung zu ermöglichen. Ich hab schon öfters mitbekommen, dass man bei den simulierten COM-Ports via USB die Sta-tusleitungen nicht manuell setzen könne. |
Hallo Sebastian,
Das RTS Signal lässt die USB Pegelanpassung (COM4) und nach TTL durch, mit dem kleine Testprogramm * geht das ja auch.
Nur mit FreeBASIC und USB Pegelanpassung nach TTL nicht .
Mit dem Testprogramm * geht das EIN und AUS schalten der LED an RTS.
Das Auslesen der Messwerte mit TXD geht ja mit FreeBASIC und USB (COM4)
Beim Testprogramm * geht auch TXD-LED wunderbar EIN AUS.
Das sind die Pegelwandler.
https://www.shotroom.com/i/1447/oYW1K
Gruß
*
http://elektronik-kompendium.de/public/arnerossius/programme/windows/porttest.htm |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Sebastian Administrator
![](images/avatars/563932275488e4d20c5ee9.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 29.12.2017, 13:23 Titel: |
|
|
Ah, OK, wenn es mit dem Testprogramm funktioniert, die RS232-Statusleitungen auch über den USB-Adapter zu setzen, dann müsste es wahrscheinlich hiermit auch in FreeBASIC gehen:
https://www.freebasic-portal.de/code-beispiele/elektronikansteuerung/statusleitungen-comport-winapi-78.html
Das Code-Beispiel verwendet WinAPI-Funktionen, die das Betriebssystem bereitstellt. Kleiner Nachteil: Wenn du die in deinem Programm benutzt, kannst du es nicht mehr plattformübergreifend auch unter Linux laufen lassen.
Mit dem verlinkten Code-Beispiel von Steini hab ich selber schon gearbeitet. Hat auf jeden Fall unter Windows 2000, ich meine auch unter XP, damals einwandfrei funktioniert.
Der OUT-Befehl in FreeBASIC ist so eine Sache. "Eigentlich" kann man unter modernen Windows-Versionen überhaupt nicht mehr direkt über irgendwelche Port-Adressen direkt auf die Schnittstellen-Hardware zugreifen. FreeBASIC tut an dieser Stelle nur so, als würde das noch so wie unter DOS/Win3x/Win9x funktionieren, um halbwegs Kompatibilität zu den alten QBasic-DOS-Programmen zu bieten. Im Hintergrund wird dafür meines Wissens ein spezieller Treiber benutzt. Das kann gut sein, dass diese Legacy-Emulation bei USB-Adaptern und COM4 an ihre Grenzen stößt. Bzw. dass der verwendete Treiber nur mit "echten" COM-Ports zusammenarbeiten kann und nicht den Umweg über einen USB-Port beherrscht. _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 29.12.2017, 14:33 Titel: |
|
|
Ich fürchte, irgendwie ist der ganze Ansatz falsch: Das erste Beispiel funktioniert auch (zumindest bei mir), wenn man OPEN COM "COM1:... auskommentiert.
Und Code: | Open Com ("COMx:9600,N,8,1,ME,CS0,DS0,RS" For Binary As #3) | ist nur dann erfolgreich (Rückgabewert = 0), wenn x die Nummer eines existierenden Ports ist.
Code: | 'test for comm ports, Windows only, WIN2k+
#Include Once "windows.bi"
'
Dim As Integer c,werr,vl(255)
Dim As String s
Dim As HANDLE hPort
'
For c=1 To 255
s="\\.\COM" & Str(c)
SetLastError(0)
hPort=CreateFile(StrPtr(s),GENERIC_READ Or GENERIC_WRITE,0,0,OPEN_EXISTING,0,0)
If hPort=INVALID_HANDLE_VALUE Then
werr=GetLastError()
If werr=ERROR_ACCESS_DENIED Then
vl(c)=1
Else
vl(c)=0
End If
Else
vl(c)=1
End If
CloseHandle(hPort)
Next
'
For c=1 To 255
If vl(c) Then Print "COM" & Str(c)
Next
'
Print
Print "Sleeping to Exit"
Sleep |
Ich verstehe sowieso nicht, wie der Zugriff über den virtuellen COM - Port funktionieren soll. Schließlich lassen sich über einen Hub etliche Geräte an einen einzigen USB - Port anschliessen. Wie will man da ein bestimmtes Gerät ansprechen?
Gruß
grindstone
EDIT: Ich sehe gerade: Der Versuch, COM1 zu öffnen, gibt ebenfalls eine Fehlermeldung. _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 29.12.2017, 15:24 Titel: |
|
|
Hier ein kleines Programm, das alle im System vorhandenen USB - Geräte auflistet.
@eeg-grimm: Sieh mal nach, ob es deinen USB - Pegelwandler erkennt (als Konsolenprogramm compilieren und laufen lassen).
Code: | 'enumerate USB devices?, Windows only, WINNT forward
#Include Once "windows.bi"
#Include Once "win\setupapi.bi"
Dim As HDEVINFO hDevInfo
Dim As SP_DEVINFO_DATA DeviceInfoData
Dim As Integer buffersize, c, DataT, i
Dim As String buffer, buffer1, k
hDevInfo=SetupDiGetClassDevs(NULL, "USB", 0, DIGCF_PRESENT Or DIGCF_ALLCLASSES)
If hDevInfo = INVALID_HANDLE_VALUE Then
Print "SetupDiGet failed, sleeping to exit.."
Sleep
End
End If
i = 0
DeviceInfoData.cbSize = SizeOf(SP_DEVINFO_DATA)
SetupDiEnumDeviceInfo(hDevInfo, i, @DeviceInfoData)
Do
i += 1
SetLastError(0)
SetupDiEnumDeviceInfo(hDevInfo, i, @DeviceInfoData)
If GetLastError() = ERROR_NO_MORE_ITEMS Then Exit Do
buffer = Space(1024)
buffersize = 1024
SetupDiGetDeviceRegistryProperty(hDevInfo, @DeviceInfoData, SPDRP_DEVICEDESC, _
@DataT, StrPtr(buffer), buffersize, @buffersize)
buffer = Trim(buffer)
If buffer > "" Then
Print buffer;
c += 1
buffer = Space(1024)
buffersize = 1024
SetupDiGetDeviceRegistryProperty(hDevInfo, @DeviceInfoData, SPDRP_FRIENDLYNAME,_
@DataT, StrPtr(buffer), buffersize, @buffersize)
buffer = Trim(buffer)
If buffer > "" Then
Print " ";buffer
Else
Print " (No friendly name)"
End If
If c = 20 Then
c = 0
Input "::::Paused:::: Press Enter ",k
EndIf
End If
Loop
Print
Print "Done, Sleeping to Exit.."
Sleep |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 29.12.2017, 16:14 Titel: |
|
|
Hallo grindstone,
der COM4 (USB zu TTL) ist im Geräte-Manager vorhanden und dein FreeBASIC Programm, das alle im System vorhandenen USB - Geräte auflistet, hat diese Ausgabe, siehe Foto.
Mit USB-Com4 und daneben ohne USB-Com
http://up.picr.de/31369279xa.jpg
Ich hab jetzt noch so die Vermutung das beim USB=COM4 die „Basisadresse“ für RTS nicht 744+4 ist (748).
Bei COM1 ist die ja 1020.
Am besten wäre es wenn man ein Programm hat, so wie bei den Testprogramm* das auch funktioniert und man sieht wie das in dem Programm gelöst wurde.
##########
Hallo Sebastian,
bei deinem Programm:
https://www.freebasic-portal.de/code-beispiele/elektronikansteuerung/statusleitungen-comport-winapi-78.html
Wenn man auf COM4 Umstellt in der Zeile 4 geht mach dem Start erst mal die LED am RTS aus, Spannung fällt auf 0 V gemessen zu GND.
Das ist mal nicht schlecht, erste Reaktion vom LED auf FreeBASIC am USB-COM4.
Nach Programm STOP mit „ESC“ Taste, wieder LED EIN (+5V zu GND an RTS).
Was noch geschmeidig ist da werden gleich noch die Eingänge DSR, CTS usw. abgefragt und als 0 oder 1 am Bildschirm ausgegeben.
Gruß
P.S.
Ich hab's verstanden, FreeBASIC hat doch einige Vorzüge zu QBasic. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 29.12.2017, 19:02 Titel: |
|
|
eeg-grimm hat Folgendes geschrieben: | Ich hab jetzt noch so die Vermutung das beim USB=COM4 die „Basisadresse“ für RTS nicht 744+4 ist (748). | Das lässt sich ganz einfach feststellen: Im Gerätemanager auf 'USB Serial Port' doppelklicken. Es öffnet sich das "Eigenschaften" - Fenster. Falls vorhanden, den Tab "Ressourcen" wählen, dort ist unter "E/A Bereich" die Portadresse angegeben. Falls der Tab nicht vorhanden ist, lässt sich der Adapter nicht über die Portadresse ansprechen.
Frage 1: Gibt es zu dem Adapter irgendeine Dokumentation, wo solche Details beschrieben sind?
Frage 2: Gehört zu dem Adapter ein Treiber, den du zusätzlich installieren musstest?
Gruß
grindstone
EDIT:
Hast du den Link von Sebastian schon ausprobiert?
https://www.freebasic-portal.de/code-beispiele/elektronikansteuerung/statusleitungen-comport-winapi-78.html
Der Code sieht recht vielversprechend aus, du müsstest nur Code: | Dim PortNr As String = "COM1" | in Code: | Dim PortNr As String = "COM4" | ändern (3. Zeile von oben).
EDIT 2:
Bei mir schlägt das Öffnen der COM - Schnittstelle fehl, wenn ich vorher das Testprogramm gestartet habe. Offensichtlich vertragen sich die beiden nicht. _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Zuletzt bearbeitet von grindstone am 29.12.2017, 20:00, insgesamt 3-mal bearbeitet |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
dreael Administrator
![](images/avatars/112279543641421ec80e8e2.gif)
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 29.12.2017, 19:09 Titel: |
|
|
Tipp von mir, da ich beruflich aktuell auch viel mit Modems/CPEs im Profibereich zu tun habe, wo es überall einen seriellen Konsolenport gibt, um Dinge wie die IP-Adressen einstellen zu können, ich inzwischen ebenfalls fürs Notebook immer so ein USB-Seriell-Adapter dabei habe: Grundsätzlich immer erst im Windows-Gerätemanager unter "Anschlüsse" schauen, welcher virtuelle COM-Port verwendet wird (mache ich immer so, weil dieser bei USB-Geräte grundsätzlich immer dynamisch ist). Erst dann PuTTY in meinem Fall entsprechend einstellen.
Der Tipp an den FreeBasic-Programmierer: Am besten eine .ini-Datei implementieren, wo sich der Endbenutzer solche Sachen wie der COM-Port selber einstellen kann, d.h. grundsätzlich nie ins fertige .EXE-Programm hartcodieren.
Die Win32-API-Profis unter Euch können sich natürlich damit beschäftigen, wie sich die im Gerätemanager gezeigte Anschluss-Liste als Enumaration auslesen lässt -> passendes Konfigurationsmenü ins FB-Programm implementieren, wo der Benutzer beim Start bequem mit den Cursortasten und [Enter] den gewünschten COM-Port auswählen kann. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|