CTS, DSR mit Port.dll abfragen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
steelbasic
Beiträge: 63
Registriert: 02.09.2004 19:41
Wohnort: Niedersachsen

CTS, DSR mit Port.dll abfragen

Beitrag von steelbasic »

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!
Viele Grüße
Hein Blöd
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Versuch mal hiermit



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.
ohne Gewähr
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
steelbasic
Beiträge: 63
Registriert: 02.09.2004 19:41
Wohnort: Niedersachsen

Beitrag von steelbasic »

Ich hab's schon hingekriegt !!

cts_rueck = CallFunctionFast(*com_cts,cts_rueck)

Muss den hinter *cm_cts, "cts_rueck"?
:roll:
Viele Grüße
Hein Blöd
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

ich bekomm auch immer alles HIN .. Meine Frau schimpft dann immer

:mrgreen:
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
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:

Beitrag von Falko »

thx bobobo :allright:

:mrgreen:

@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
:allright:

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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
steelbasic
Beiträge: 63
Registriert: 02.09.2004 19:41
Wohnort: Niedersachsen

Beitrag von steelbasic »

Viele Wege führen nach Rom! Manche über DLL`s andere über eine LIB.

Diesmal nehme ich die LIB.

Dank an Falko und bobobo :allright:
Viele Grüße
Hein Blöd
Antworten