Seite 1 von 1

CTS, DSR mit Port.dll abfragen

Verfasst: 11.03.2005 17:50
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!

Verfasst: 11.03.2005 18:03
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

Verfasst: 11.03.2005 18:08
von steelbasic
Ich hab's schon hingekriegt !!

cts_rueck = CallFunctionFast(*com_cts,cts_rueck)

Muss den hinter *cm_cts, "cts_rueck"?
:roll:

Verfasst: 14.03.2005 13:45
von bobobo
ich bekomm auch immer alles HIN .. Meine Frau schimpft dann immer

:mrgreen:

Verfasst: 17.03.2005 13:06
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

Verfasst: 20.03.2005 22:41
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: