Hallo,
ich möchten einen A/D-Wandler auslesen. Dazu muss ich über RS232 TxD, DTR und RTS ansteuern. Ich benutze hier die port.dll.
Mein Problem ist nun:
Wie komme ich nun an den Status von CTS und DSR?
Von Kainka gibt es eine Referenz zur Port.dll. Leider kann ich die Infos von VB nicht in PureBasic umsetzen.
Vielleicht hat einer von Euch eine Idee!
CTS, DSR mit Port.dll abfragen
- steelbasic
- Beiträge: 63
- Registriert: 02.09.2004 19:41
- Wohnort: Niedersachsen
CTS, DSR mit Port.dll abfragen
Viele Grüße
Hein Blöd
Hein Blöd
Versuch mal hiermit
Danke an Falko
die PortEinstellungen werden aus einer Comport.ini gelesen .. weiters im Code
ohne Gewähr
Danke an Falko
die PortEinstellungen werden aus einer Comport.ini gelesen .. weiters im Code
Code: Alles auswählen
start:
If OpenPreferences("ComPort.ini")
PreferenceGroup("Settings")
c_Port$=ReadPreferenceString("Port","com1:")
c_baud$=ReadPreferenceString("Baud","9600")
c_data$=ReadPreferenceString("Data","8")
c_parity$=ReadPreferenceString("Parity","N")
c_stop$=ReadPreferenceString("Baud","1")
c_open_$=c_port$+" baud="+c_baud$+" data="+c_data$+" parity="+c_paritiy$+" stop="+c_stop$
Else
MessageRequester("ComPort.ini nicht gefunden","Defaultwerte werden genommen"+Chr(13)+Chr(10)+"COM1: baud=9600 data=8 parity=N stop=1",0)
c_open_$="COM1: baud=9600 data=8 parity=N stop=1"
EndIf
ClosePreferences()
If OpenLibrary(0,"Port.dll")
; MessageRequester("PortTest","Port.dll ok",#PB_MessageRequester_Ok)
m$=m$+"openlib "
;c_open_$="COM1: baud=19200 data=8 parity=N stop=1"
If CallFunction(0,"OPENCOM",c_open_$)
; MessageRequester("PortTest","COM1 geöffnet",#PB_MessageRequester_Ok)
m$=m$+"c_opened "
If CallFunction(0,"DSR",0)
;MessageRequester("PortTest","DSR auf COM1 aktiv",#PB_MessageRequester_Ok)
m$=m$+"dsr0 "
EndIf
If CallFunction(0,"DSR",1)
;MessageRequester("PortTest","DSR auf COM1 deaktiv",#PB_MessageRequester_Ok)
m$=m$+"dsr1 "
EndIf
If CallFunction(0,"CTS",0)
;MessageRequester("PortTest","CTS auf COM1 aktiv",#PB_MessageRequester_Ok)
m$=m$+"cts0 "
EndIf
If CallFunction(0,"CTS",1)
;MessageRequester("PortTest","CTS auf COM1 deaktiv",#PB_MessageRequester_Ok)
m$=m$+"cts1 "
EndIf
If CallFunction(0,"RI",0)
; MessageRequester("PortTest","RI auf COM1 aktiv",#PB_MessageRequester_Ok)
m$=m$+"ri0 "
EndIf
If CallFunction(0,"RI",1)
; MessageRequester("PortTest","RI auf COM1 deaktiv",#PB_MessageRequester_Ok)
m$=m$+"ri1 "
EndIf
If CallFunction(0,"DCD",0)
; MessageRequester("PortTest","DCD auf COM1 aktiv",#PB_MessageRequester_Ok)
m$=m$+"dcd0 "
EndIf
If CallFunction(0,"DCD",1)
;MessageRequester("PortTest","DCD auf COM1 deaktiv",#PB_MessageRequester_Ok)
m$=m$+"dcd1 "
EndIf
If CallFunction(0,"RTS",0)
;MessageRequester("PortTest","RTS auf COM1 aktiv",#PB_MessageRequester_Ok)
m$=m$+"rts0 "
EndIf
If CallFunction(0,"RTS",1)
;MessageRequester("PortTest","RTS auf COM1 deaktiv",#PB_MessageRequester_Ok)
m$=m$+"rts1 "
EndIf
If CallFunction(0,"TXD",0)
; MessageRequester("PortTest","TXD auf COM1 aktiv",#PB_MessageRequester_Ok)
m$=m$+"txd0 "
EndIf
If CallFunction(0,"TXD",1)
; MessageRequester("PortTest","TXD auf COM1 deaktiv",#PB_MessageRequester_Ok)
m$=m$+"txd1 "
EndIf
If CallFunction(0,"DTR",0)
; MessageRequester("PortTest","DTR auf COM1 aktiv",#PB_MessageRequester_Ok)
m$=m$+"dtr0 "
EndIf
If CallFunction(0,"DTR",1)
; MessageRequester("PortTest","DTR auf COM1 deaktiv",#PB_MessageRequester_Ok)
m$=m$+"dtr1 "
EndIf
Else
m$=m$+"c_opened_failed "
EndIf
If CallFunction(0,"CLOSECOM")
; MessageRequester("PortTest","CLOSECOM erfolgreich",#PB_MessageRequester_Ok)
m$=m$+"c_closed "
EndIf
EndIf
CloseLibrary(0)
m$=m$+"closelib"
If FindString(m$,"cts",0)>0
MessageRequester (c_open_$,m$,0)
Else
MessageRequester (c_open_$,"ich find irgendwie nichts",0)
EndIf
m$=""
r=MessageRequester("Ömm...","Noch einen?"+Chr(13)+Chr(10)+"Ini wird neu eingelesen",#PB_MessageRequester_YesNo )
If r<>7
Goto start
EndIf
End
; Ich glaube schon das es möglich ist, die besagten Comleitungen abzufragen. Wenn
; Du nicht alle Leitungen gleichzeitig abfragen mußt, würde die Port.dll schon
; ausreichen um z.B. die Eingänge zum RechnerPort abzufragen. Das wären dann
; RxD PIN 2,
; CTS PIN 8,
; DSR PIN6,
; DCD PIN 1 und
; RI mit PIN 9 der seriellen Schnittstelle.
; Dort kannst Du einfach mit folgenden code abfragen
; If CTS() = 1, oder
; If DSR()=1 usw. dann z.B. mit einer Message reagieren.
; Je nach dem welchel Leitung du Püfen möchtest
; ob sie High=1 bzw Low=0 ist. Ich hoffe das hilft dir etwas weiter.
; Die Port.DLL ist dafür ausreichend.
; Will man aber gleichzeitit in einem Befehl etwas setzen
; bzw. die COMports auslesen reicht die Portdll leider nicht mehr.
; Im GFAbasic gibt es dafür den Befehl OUTPort bzw. INP(Port) mit
; denen man in den Registern der Comschnittstelle so einiges anstellen
; kann. Dazu müßt ich mich aber tiefer in die Ebene reinarbeiten.
; Visuelbasic und Powerbasic kennen die Befehle auch wie GFABASIC.
; Um das mit Purebasic zu bewerkstelligen muß man dann leider mit
; der IO.DLL arbeiten. Diese hat noch dann auch Möglichkeiten in
; Registern bestimmte Werte einzustellen bzw. auszulesen. Da ich
; diese DLL noch nicht kenne kann ich nicht viel darüber sagen.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
- steelbasic
- Beiträge: 63
- Registriert: 02.09.2004 19:41
- Wohnort: Niedersachsen
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
thx bobobo
@steelbasic
Womit man auch sehr einfach die RS232 ansprechen kann, ohne über
eine externe DLL arbeiten zu müssen, ist die MVCOM-Library von Mark Vitry:
http://perso.wanadoo.fr/marc.vitry/purebasic.htm
oder auf meiner Homepage mit freundlicher Genehmigung von Mark
Kleiner Tip noch. Das Install funktioniert bei mir nicht, also kopiert man die einzelnen Dateien von Hand wie
MVCOM in '\PureBasic\PureLibraries\UserLibraries\', die MVCOM.chm in '\Purebasic\Help\'
und den Sample-Order da, wohin man diesen haben möchte.
Damit kann man soweit alle Funktionen direkt aus PB ausführen ohne eine
DLL oder deren Call's ausführen zu müssen.
MfG Falko
@steelbasic
Womit man auch sehr einfach die RS232 ansprechen kann, ohne über
eine externe DLL arbeiten zu müssen, ist die MVCOM-Library von Mark Vitry:
http://perso.wanadoo.fr/marc.vitry/purebasic.htm
oder auf meiner Homepage mit freundlicher Genehmigung von Mark
Kleiner Tip noch. Das Install funktioniert bei mir nicht, also kopiert man die einzelnen Dateien von Hand wie
MVCOM in '\PureBasic\PureLibraries\UserLibraries\', die MVCOM.chm in '\Purebasic\Help\'
und den Sample-Order da, wohin man diesen haben möchte.
Damit kann man soweit alle Funktionen direkt aus PB ausführen ohne eine
DLL oder deren Call's ausführen zu müssen.
MfG Falko
- steelbasic
- Beiträge: 63
- Registriert: 02.09.2004 19:41
- Wohnort: Niedersachsen
