Seite 1 von 1

Verfasst: 04.09.2008 22:06
von thomas223
Hallo ich habe da eine noch etwas ähnliche frage ich habe einen PIC controller dieser schickt mir alles was ich ihm über RS232 sende wider zurück. das funzt mit einem terminal prog schon ganz gut nun würde ich gern so ein terminal selber schreiben um ein eistig in Basic zu findenaber die meisten beisiele hier sind noch in v3.xx und leider nicht in 4.2 und die hilfe brinkt mich nicht weiter!
wie kann ich senden und empfangen in 4.2?

Verfasst: 05.09.2008 08:41
von DarkDragon
Das hier sollte funktionieren:

Code: Alles auswählen

; Öffne COM1 im 8N1 Modus mit der Baudrate 9600
If OpenSerialPort(0, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 256, 256)
  ; Schreibe "Hallo, Welt!"
  WriteSerialPortString(0, "Hallo, Welt!")
  
  ; Warte auf Datensatz
  While AvailableSerialPortInput(0) = 0
    Delay(10)
  Wend
  Delay(10)
  
  ; Lese Datensatz und gib ihn aus
  Text.s = Space(AvailableSerialPortInput(0))
  ReadSerialPortData(0, @Text, AvailableSerialPortInput(0))
  Debug Text
  
  CloseSerialPort(0)
Else
  Debug "ERROR - Couldn't open COM1"
EndIf
Ansonsten kannst du ja noch selbst in der Hilfe (Taste F1 im PureBasic Editor) unter "Serial Port" nachschauen.

Verfasst: 05.09.2008 16:00
von Macros
Ich arbeite gerade in einer Firma an genau dem Problem,
eine Konsolenoberfläche für RS232 mit eier Gui zu ersetzen.

Dabei habe ich mir erstmal selbst ein Terminal geschrieben,
um die Funktionen auszutesten.

Code: Alles auswählen

baud=115200
OpenSerialPort(1,"COM1",baud,#PB_SerialPort_EvenParity,8,1,#PB_SerialPort_NoHandshake,1024,1024)
OpenWindow(1,0,0,500,500,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(1))
  StringGadget(1,5,5,50,25,"")
  ButtonGadget(0,60,5,40,25,"send")
  ButtonGadget(3,110,5,40,25,"clear")
  TextGadget(99,200,5,100,15,"")
  EditorGadget(2,5,40,490,400,#PB_Editor_ReadOnly)

  Repeat
    event=WaitWindowEvent(20)
    Select event
      Case #PB_Event_CloseWindow
        CloseSerialPort(1)
      Case #PB_Event_Gadget
        SetGadgetText(99,Str(AvailableSerialPortOutput(1)))
        Select EventGadget()
          Case 0
            a$=GetGadgetText(1)
            If Len(a$)=1
              WriteSerialPortData(1,@a$,1)
              text$=GetGadgetText(2)+a$
            Else
              a$=Chr(Val(a$))
              WriteSerialPortData(1,@a$,1)
              text$=GetGadgetText(2)+"ASCII: "+Str(Asc(a$))
            EndIf
            SetGadgetText(2,text$+Chr(10))
            SetGadgetText(1,"")
            SetActiveGadget(1)
          Case 3
            SetGadgetText(2,"")
        EndSelect
    EndSelect
    If IsSerialPort(1)
      input=AvailableSerialPortInput(1)
      If input
        a$=Space(input)
        ReadSerialPortData(1,@a$,input)
        text$=GetGadgetText(2)+a$
        SetGadgetText(2,text$)

      EndIf
    EndIf
  Until event=#PB_Event_CloseWindow
Ein paar Hinweise:
  • Scrolling ist noch nicht drinnen
  • Das Programm sendet immer nur Einzelzeichen.
    (Da in meinem Fall nur diese gebraucht werden,
    zwei oder mehr Buchstaben stehen für einen ASCII Code)
  • Die Daten der Com Verbindung musst du natürlich anpassen.
  • Ich hab das Programm jetzt nicht nochmal angeschaut
    kann also komische Variablen usw enthalten ;)