RS232 mit 250000 Baud für 3D-Drucker nutzen

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
samurai1967
Beiträge: 7
Registriert: 01.02.2010 23:19
Kontaktdaten:

RS232 mit 250000 Baud für 3D-Drucker nutzen

Beitrag von samurai1967 »

Hallo Gemeinde,

mein 3D-Drucker hat einen Atmel ATMega2560-Controller.
Dieser wird über einen FTDI USB -> RS232 Wandler angesprochen.
In der seriellen Schnittstellen-Einstellungen müssen hier 250000 Baud eingestellt werden.
Dies ist im PB-Standard mit OpenSerialPort() leider nicht möglich.
Ich habe mich mit der MVCOM-Libary beschäftig und das auch nicht hinbekommen.

Nun meine konkrete Frage:
Wie initialisiere ich den COM-Port über PB mit 250000 Baud?

Für eine Antwort wäre ich hier sehr dankbar!
Benutzeravatar
Falko
Admin
Beiträge: 3531
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.0
Kontaktdaten:

Re: RS232 mit 250000 Baud für 3D-Drucker nutzen

Beitrag von Falko »

Hallo, ich weiß nicht, ob es funktionieren wird.
Ich habe folgenden Source erweitert und nach PB 5.31
angepasst, das er ausgeführt wird. Ob es bei dir funktioniert,
musst du mal testen.

Gruß,
Falko

Versuche das mal hiermit:

Code: Alles auswählen

Code:
; PureBasic SerialPort Library Demonstration
; Based on the demo Code by Marc Vitry and its MVCOM Library
; To sue this software connect a loop back connector to the tested serial port
; Or connect 2 PC with a serial cable and run this software on the 2 PC

; SerialPortError() results

;http://www.purebasic.fr/english/viewtopic.php?p=218644#p218644
; changed by Falko

#PB_SerialPort_RxOver       = (1 << 0)
#PB_SerialPort_OverRun      = (1 << 1)
#PB_SerialPort_RxParity     = (1 << 2)
#PB_SerialPort_Frame        = (1 << 3)
#PB_SerialPort_Break        = (1 << 4)
#PB_SerialPort_TxFull       = (1 << 5)
#PB_SerialPort_IOE          = (1 << 6)
#PB_SerialPort_WaitingCTS   = (1 << 7)
#PB_SerialPort_WaitingDSR   = (1 << 8)
#PB_SerialPort_WaitingRLSD  = (1 << 9)
#PB_SerialPort_XoffReceived = (1 << 10)
#PB_SerialPort_XoffSent     = (1 << 11)
#PB_SerialPort_EOFSent      = (1 << 12)

; For OpenSerialPort 'Parity' parameter
#PB_SerialPort_NoParity    = #NOPARITY
#PB_SerialPort_EvenParity  = #EVENPARITY
#PB_SerialPort_MarkParity  = #MARKPARITY   
#PB_SerialPort_OddParity   = #ODDPARITY
#PB_SerialPort_SpaceParity = #SPACEPARITY

; For the SetAttribute only
#PB_SerialPort_DTR = 1
#PB_SerialPort_RTS = 2
#PB_SerialPort_TXD = 3

; For the GetAttribute only
#PB_SerialPort_RI  = 4
#PB_SerialPort_DCD = 5
#PB_SerialPort_DSR = 6
#PB_SerialPort_CTS = 7

; For Get/SetAttribute
#PB_SerialPort_XonCharacter  = 8
#PB_SerialPort_XoffCharacter = 9

; For OpenSerialPort 'Handshake' parameter

#PB_SerialPort_NoHandshake = #HandShakeModeNone
#PB_SerialPort_RtsEnable   = #HandShakeModeRtsEnable
#PB_SerialPort_RtsCts      = #HandShakeModeRtsCts
#PB_SerialPort_XonXoff     = #HandShakeModeXonXoff

; For the stop bit: can be 0,1 or 2 with the following limitations:
; "The use of 5 data bits with 2 stop bits is an invalid combination, as is 6, 7, or 8 data bits with 1.5 stop bits."

;Windows
Enumeration
  #Window_0
EndEnumeration

;Gadgets
Enumeration
  #Text01
  #Label01
  #Key_Quit
  #Key_SR
  #Key_RTSON
  #Key_RTSOFF
  #Key_DTRON
  #Key_DTROFF
  #Key06
  #Key07
  #Key08
  #Key09
  #ListBaud
  #ListData
  #ListStopbits
  #ListParity
  #ListHandshake
  #ListPorts
  #Gadget_50
  #Gadget_51
  #Gadget_54
  #Gadget_55
  #Gadget_56
  #Gadget_57
  #Gadget_58
  #Gadget_59
  #Gadget_60
  #Gadget_61
  #Gadget_62
  #Gadget_63
  #Gadget_64
  #Gadget_65
  #Gadget_66
  #Gadget_67
  #Gadget_68
  #Gadget_Xon
  #Gadget_Xoff
EndEnumeration

;Menu
Enumeration
  #Menu_Return
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 0, 0, 370, 310, "PureBasic Serial Demonstration", #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
    ;If CreateGadgetList(WindowID(#Window_0))
      StringGadget(#Text01, 50, 10, 310, 20, "")
      ComboBoxGadget(#ListPorts, 10, 140, 70, 80)
      ComboBoxGadget(#ListBaud, 130, 140, 100, 80)
      ComboBoxGadget(#ListData, 130, 170, 100, 80)
      ComboBoxGadget(#ListStopbits, 130, 200, 100, 80)
      ComboBoxGadget(#ListParity, 130, 230, 100, 80)
      ComboBoxGadget(#ListHandshake, 130, 260, 100, 80)
      ButtonGadget(#Key_SR, 240, 70, 120, 30, "Send / Read Data")
      ButtonGadget(#Key_RTSON, 240, 100, 60, 30, "RTS ON")
      ButtonGadget(#Key_RTSOFF, 300, 100, 60, 30, "RTS OFF")
      ButtonGadget(#Key_DTRON, 240, 130, 60, 30, "DTR ON")
      ButtonGadget(#Key_DTROFF, 300, 130, 60, 30, "DTR OFF")
      ButtonGadget(#Key06, 240, 160, 60, 30, "TXD ON")
      ButtonGadget(#Key07, 300, 160, 60, 30, "TXD OFF")
      ButtonGadget(#Key08, 240, 190, 120, 30, "Open Com Port")
      ButtonGadget(#Key09, 240, 220, 120, 30, "Close Com Port")
      ButtonGadget(#Key_Quit, 240, 250, 120, 30, "Quit")
      TextGadget(#Label01, 50, 30, 310, 20, "", #PB_Text_Border)
      TextGadget(#Gadget_50, 10, 10, 40, 20, "TxD")
      TextGadget(#Gadget_51, 10, 30, 30, 20, "RxD")
      TextGadget(#Gadget_54, 120, 60, 70, 20, "RTS ------>CTS")
      TextGadget(#Gadget_55, 120, 80, 70, 20, "DTR ----->DSR")
      TextGadget(#Gadget_56, 160, 100, 30, 20, "DCD", #PB_Text_Right)
      TextGadget(#Gadget_57, 160, 120, 30, 20, "RI", #PB_Text_Right)
      TextGadget(#Gadget_58, 210, 60, 20, 18, "")
      TextGadget(#Gadget_59, 210, 80, 20, 18, "")
      TextGadget(#Gadget_60, 210, 100, 20, 18, "")
      TextGadget(#Gadget_61, 210, 120, 20, 18, "")
      TextGadget(#Gadget_62, 85, 140, 40, 20, "Speed", #PB_Text_Right)
      TextGadget(#Gadget_63, 85, 170, 40, 20, "Data", #PB_Text_Right)
      TextGadget(#Gadget_64, 85, 200, 40, 20, "Stopbits", #PB_Text_Right)
      TextGadget(#Gadget_65, 85, 230, 40, 20, "Parity", #PB_Text_Right)
      TextGadget(#Gadget_66, 55, 260, 70, 20, "Handshaking", #PB_Text_Right)
      TextGadget(#Gadget_67, 5, 290, 70, 20, "Xon character", #PB_Text_Right)
      TextGadget(#Gadget_68, 125, 290, 70, 20, "Xoff character", #PB_Text_Right)
      StringGadget(#Gadget_Xon, 80, 290, 30, 20, "17")
      StringGadget(#Gadget_Xoff, 200, 290, 30, 20, "19")
      AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #Menu_Return)
    ;EndIf
  EndIf
EndProcedure

Global ComBaud.l           ;Index of selected com baudrate
Global ComData.l           ;Index of selected data bit
Global ComStopbits.l       ;Index of selected stopbits
Global ComParity.l         ;Index of selected parity
Global ComHandshake.l      ;Index of selected handshake mode

Global Hcom.l               ;Communication Handle
Global ComPort.s            ;Communications Port
Global Baud.l               ;Baudrate
Global Parity.l             ;Parity
Global DataBits.l           ;DataBits
Global StopBits.l           ;StopBits
Global Handshake.l          ;Handshake
; -----------------------------------------------------------------------------------------------

Procedure Affiche01()
  SetGadgetState(#ListBaud,ComBaud)
  SetGadgetState(#ListData,ComData)
  SetGadgetState(#ListStopbits,ComStopbits)
  SetGadgetState(#ListParity,ComParity)
  SetGadgetState(#ListHandshake,ComHandshake)
  If CountGadgetItems(#ListPorts)
    SetGadgetState(#ListPorts,0)
  EndIf
EndProcedure

; ----------------------------------------------------------------------------
; Procedure:  Init01()
; Parameter:  No
; Action:     Init gadgets list and some variables
; Return:     
; ----------------------------------------------------------------------------
Procedure Init01()
  Boucle.l = 0
  Chaine.s = ""
  ClearGadgetItems(#ListBaud)
  AddGadgetItem(#ListBaud,-1,"75 Bauds")
  AddGadgetItem(#ListBaud,-1,"110 Bauds")
  AddGadgetItem(#ListBaud,-1,"134 Bauds")
  AddGadgetItem(#ListBaud,-1,"150 Bauds")
  AddGadgetItem(#ListBaud,-1,"300 Bauds")
  AddGadgetItem(#ListBaud,-1,"600 Bauds")
  AddGadgetItem(#ListBaud,-1,"1200 Bauds")
  AddGadgetItem(#ListBaud,-1,"1800 Bauds")
  AddGadgetItem(#ListBaud,-1,"2400 Bauds")
  AddGadgetItem(#ListBaud,-1,"4800 Bauds")
  AddGadgetItem(#ListBaud,-1,"7200 Bauds")
  AddGadgetItem(#ListBaud,-1,"9600 Bauds")
  AddGadgetItem(#ListBaud,-1,"14400 Bauds")
  AddGadgetItem(#ListBaud,-1,"19200 Bauds")
  AddGadgetItem(#ListBaud,-1,"38400 Bauds")
  AddGadgetItem(#ListBaud,-1,"57600 Bauds")
  AddGadgetItem(#ListBaud,-1,"115200 Bauds")
  AddGadgetItem(#ListBaud,-1,"128000 Bauds")
  AddGadgetItem(#ListBaud,-1,"250000 Bauds")
 
  ClearGadgetItems(#ListData)
  AddGadgetItem(#ListData,-1,"4 Bits")
  AddGadgetItem(#ListData,-1,"5 Bits")
  AddGadgetItem(#ListData,-1,"6 Bits")
  AddGadgetItem(#ListData,-1,"7 Bits")
  AddGadgetItem(#ListData,-1,"8 Bits")
 
  ClearGadgetItems(#ListStopbits)
  AddGadgetItem(#ListStopbits,-1,"1 Bits")
  AddGadgetItem(#ListStopbits,-1,"1.5 Bits")
  AddGadgetItem(#ListStopbits,-1,"2 Bits")
 
  ClearGadgetItems(#ListParity)
  AddGadgetItem(#ListParity,-1,"None")
  AddGadgetItem(#ListParity,-1,"Even")
  AddGadgetItem(#ListParity,-1,"Odd")
  AddGadgetItem(#ListParity,-1,"Space")
  AddGadgetItem(#ListParity,-1,"Mark")
 
  ClearGadgetItems(#ListHandshake)
  AddGadgetItem(#ListHandshake,-1,"None")
  AddGadgetItem(#ListHandshake,-1,"RTS Enable")
  AddGadgetItem(#ListHandshake,-1,"RTS / CTS")
  AddGadgetItem(#ListHandshake,-1,"Xon / Xoff")
 
  SetGadgetText(#Text01,"The quick brown fox jumps over the lazy dog!!!")
 
  ClearGadgetItems(#ListPorts)
  For Boucle = 1 To 255
    Chaine = "COM" + Str(Boucle)
    Hcom = OpenSerialPort(#PB_Any,Chaine,1200,0,8,0,0,1024,1024)
    If Hcom And IsSerialPort(hCom)
      AddGadgetItem(#ListPorts,-1,"COM" + Str(Boucle))
      If CloseSerialPort(Hcom)
        Hcom = 0
      EndIf
    EndIf
  Next
 
  Hcom = 0
  ComBaud = 11      ;9600 Bauds
  ComData = 4       ;8 Bits
  ComStopbits = 0   ;1 Stopbit
  ComParity = 0     ;None
  ComHandshake = 0  ;None
 
  Affiche01()
EndProcedure

; ----------------------------------------------------------------------------
; Procedure:  GetComDescription()
; Parameter:  No
; Action:     Create the Communication Description string (Ex: COM1:9600,N,8,1)
; Return:     String
; ----------------------------------------------------------------------------
Procedure GetComDescription()
  ComPort = GetGadgetText(#ListPorts)
 
  Select GetGadgetState(#ListBaud)
    Case 0
      Baud = 75
    Case 1
      Baud = 110
    Case 2
      Baud = 134
    Case 3
      Baud = 150
    Case 4
      Baud = 300
    Case 5
      Baud = 600
    Case 6
      Baud = 1200
    Case 7
      Baud = 1800
    Case 8
      Baud = 2400
    Case 9
      Baud = 4800
    Case 10
      Baud = 7200
    Case 11
      Baud = 9600
    Case 12
      Baud = 14400
    Case 13
      Baud = 19200
    Case 14
      Baud = 38400
    Case 15
      Baud = 57600
    Case 16
      Baud = 115200
    Case 17
      Baud = 128000
    Case 18
      Baud = 250000
  EndSelect
 
  Select GetGadgetState(#ListParity)
    Case 0 ; None
      Parity = #PB_SerialPort_NoParity
    Case 1 ; Even
      Parity = #PB_SerialPort_EvenParity
    Case 2 ; Odd
      Parity = #PB_SerialPort_OddParity
    Case 3 ; Space
      Parity = #PB_SerialPort_SpaceParity
    Case 4 ; Mark
      Parity = #PB_SerialPort_MarkParity
  EndSelect

  Select GetGadgetState(#ListData)
    Case 0 ; DateBits=4
      DataBits = 4
    Case 1 ; DateBits=5
      DataBits = 5
    Case 2 ; DateBits=6
      DataBits = 6
    Case 3 ; DateBits=7
      DataBits = 7
    Case 4 ; DateBits=8
      DataBits = 8
  EndSelect
 
  Select GetGadgetState(#ListStopbits)
    Case 0 ; 1
      StopBits = 0
    Case 1 ; 1.5
      StopBits = 1
    Case 2 ; 2
      StopBits = 2
  EndSelect
 
  Select GetGadgetState(#ListHandshake)
    Case 0 ; None
      Handshake = #PB_SerialPort_NoHandshake
    Case 1 ; RTS Enable
      Handshake = #PB_SerialPort_RtsEnable
    Case 2 ; RTS / CTS
      Handshake = #PB_SerialPort_RtsCts
    Case 3 ; Xon / Xoff
      Handshake = #PB_SerialPort_XonXoff
  EndSelect
 
  Debug "ComPort="+ComPort
  Debug "Baud="+Str(Baud)
  Debug "Parity="+Str(Parity)
  Debug "DataBits="+Str(DataBits)
  Debug "StopBits="+Str(StopBits)
  Debug "Handshake="+Str(Handshake)
EndProcedure

Procedure DisplayComError()
  ComErrorText.s = ""
  If IsSerialPort(hCom)
    ComError.l = SerialPortError(Hcom)
    If ComError & #PB_SerialPort_RxOver : ComErrorText + "An input buffer overflow has occurred"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_OverRun : ComErrorText + "A character-buffer overrun has occurred"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_RxParity : ComErrorText + "The hardware detected a parity error"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_Frame : ComErrorText + "The hardware detected a framing error"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_Break : ComErrorText + "The hardware detected a break condition"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_TxFull : ComErrorText + "The output buffer was full"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_IOE : ComErrorText + "An I/O error occurred during communications with the device"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_WaitingCTS : ComErrorText + "Waiting  CTS"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_WaitingDSR : ComErrorText + "Waiting  DSR"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_WaitingRLSD : ComErrorText + "Waiting  RLSD"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_XoffReceived : ComErrorText + "Waiting  because the XOFF character was received"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_XoffSent : ComErrorText + "Waiting  because the XOFF character was transmitted"+Chr(13) : EndIf
    If ComError & #PB_SerialPort_EOFSent : ComErrorText + "EOF character has been received"+Chr(13) : EndIf
    If Right(ComErrorText,1)=Chr(13):ComErrorText=Left(ComErrorText,Len(ComErrorText)-1):EndIf
    MessageRequester("Serial: Communication error occured !",ComErrorText)
  EndIf
EndProcedure

; -----------------------------------------------------------------------------------------------
; Main loop
; -----------------------------------------------------------------------------------------------

Open_Window_0()

Init01()

Repeat
  Event = WaitWindowEvent(100)
  Select Event
    Case 0
      If Hcom And IsSerialPort(Hcom)
        If GetActiveGadget()<>#Gadget_Xon
          SetGadgetText(#Gadget_Xon,StrU(GetSerialPortStatus(Hcom,#PB_SerialPort_XonCharacter),#PB_Byte))
        EndIf
        If GetActiveGadget()<>#Gadget_Xoff
          SetGadgetText(#Gadget_Xoff,StrU(GetSerialPortStatus(Hcom,#PB_SerialPort_XoffCharacter),#PB_Byte))
        EndIf
        Buffer.b = 0
        Text.s = GetGadgetText(#Label01)
        While AvailableSerialPortInput(Hcom) > 0
          If ReadSerialPortData(Hcom, @Buffer, 1) ; Read Byte
            Text = Text + Chr(Buffer)
            SetGadgetText(#Label01, Text)
          EndIf
        Wend
        If GetSerialPortStatus(Hcom,#PB_SerialPort_CTS)
          SetGadgetColor(#Gadget_58,#PB_Gadget_BackColor,#Green)
        Else
          SetGadgetColor(#Gadget_58,#PB_Gadget_BackColor,#Red)
        EndIf
        If GetSerialPortStatus(Hcom,#PB_SerialPort_DSR)
          SetGadgetColor(#Gadget_59,#PB_Gadget_BackColor,#Green)
        Else
          SetGadgetColor(#Gadget_59,#PB_Gadget_BackColor,#Red)
        EndIf
        If GetSerialPortStatus(Hcom,#PB_SerialPort_DCD)
          SetGadgetColor(#Gadget_60,#PB_Gadget_BackColor,#Green)
        Else
          SetGadgetColor(#Gadget_60,#PB_Gadget_BackColor,#Red)
        EndIf
        If GetSerialPortStatus(Hcom,#PB_SerialPort_RI)
          SetGadgetColor(#Gadget_61,#PB_Gadget_BackColor,#Green)
        Else
          SetGadgetColor(#Gadget_61,#PB_Gadget_BackColor,#Red)
        EndIf
      Else
        SetGadgetColor(#Gadget_58,#PB_Gadget_BackColor,#Red)
        SetGadgetColor(#Gadget_59,#PB_Gadget_BackColor,#Red)
        SetGadgetColor(#Gadget_60,#PB_Gadget_BackColor,#Red)
        SetGadgetColor(#Gadget_61,#PB_Gadget_BackColor,#Red)
      EndIf
    Case #PB_Event_Menu
      Select EventMenu()
        Case #Menu_Return
          Select GetActiveGadget()
            Case #Gadget_Xon
              If Hcom And IsSerialPort(Hcom)
                SetSerialPortStatus(Hcom,#PB_SerialPort_XonCharacter,Val(GetGadgetText(#Gadget_Xon))&$FF)
              EndIf
            Case #Gadget_Xoff
              If Hcom And IsSerialPort(Hcom)
                SetSerialPortStatus(Hcom,#PB_SerialPort_XoffCharacter,Val(GetGadgetText(#Gadget_Xoff))&$FF)
              EndIf
          EndSelect
      EndSelect
    Case #PB_Event_Gadget
      GadgetID = EventGadget()
      Select GadgetID
        Case #Key_Quit                             ;Quit
          Break
        Case #Key_SR                             ;Send and Get Data
          If Hcom And IsSerialPort(hCom)        ;Send the string to Communication Port
            EOL.b=13
            Chaine.s = GetGadgetText(#Text01)
            SetGadgetText(#Label01,"")         
            Select 1
              Case 1
                WriteSerialPortString(Hcom,Chaine) ; forced conversion to ASCII (Standard in PB4.20)
              Case 2
                WriteSerialPortString(Hcom,Chaine,#PB_Unicode) ; convert to UNICODE
              Case 3
                WriteSerialPortString(Hcom,Chaine,#PB_UTF8) ; convert to UTF8
            EndSelect
            WriteSerialPortData(Hcom,@EOL,1)
          Else
            MessageRequester("Message","Communication Port not open!!!",#MB_ICONEXCLAMATION)
          EndIf
        Case #Key_RTSON ; Set RTS ON
          If Hcom And IsSerialPort(hCom):SetSerialPortStatus(Hcom,#PB_SerialPort_RTS,1):EndIf
        Case #Key_RTSOFF ; Set RTS OFF
          If Hcom And IsSerialPort(hCom):SetSerialPortStatus(Hcom,#PB_SerialPort_RTS,0):EndIf
        Case #Key_DTRON ; Set DTR ON
          If Hcom And IsSerialPort(hCom):SetSerialPortStatus(Hcom,#PB_SerialPort_DTR,1):EndIf
        Case #Key_DTROFF ; Set DTR OFF
          If Hcom And IsSerialPort(hCom):SetSerialPortStatus(Hcom,#PB_SerialPort_DTR,0):EndIf
        Case #Key06 ; Set TXD ON
          If Hcom And IsSerialPort(hCom):SetSerialPortStatus(Hcom,#PB_SerialPort_TXD,1):EndIf
        Case #Key07 ; Set TXD OFF
          If Hcom And IsSerialPort(hCom):SetSerialPortStatus(Hcom,#PB_SerialPort_TXD,0):EndIf
        Case #Key08                               ;Open Com Port
          If hCom And IsSerialPort(hCom)          ;If one port is used then close it
            If CloseSerialPort(hCom)
              hCom = 0
            EndIf
          EndIf
          GetComDescription()
          hCom = OpenSerialPort(#PB_Any,ComPort,Baud,Parity,DataBits,StopBits,Handshake,1024,1024)
          If hCom = 0
            MessageRequester("Message","Communication Port not available!!!",#MB_ICONEXCLAMATION)
          Else
            Debug "hCom="+Str(hCom)
          EndIf
        Case #Key09             ;Close Com Port
          If hCom And IsSerialPort(hCom)
            If CloseSerialPort(hCom)
              hCom = 0
            EndIf
          EndIf
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow

If Hcom And IsSerialPort(hCom)
  CloseSerialPort(Hcom)                ;Close the Communication Port
  Hcom=0
EndIf
CloseWindow(#Window_0)                ;Close the window

End
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
samurai1967
Beiträge: 7
Registriert: 01.02.2010 23:19
Kontaktdaten:

Re: RS232 mit 250000 Baud für 3D-Drucker nutzen

Beitrag von samurai1967 »

Hallo Falko,

klappt leider nicht.

Bei Deinem Test erscheint nur die COM10 zur Auswahl.

Im TestV4 von MVCOM erscheinen alle Schnittstellen.
Einmalig kann ich auch COm4 (Drucker) öffnen.
Aber
a.) Der Drucke reagiert nicht auf die Befehle
b.) Was zurück kommt über die COM ist nur Mist.

Ich habe inzwischen mal mit dem Purebasic-Standard-Befehle probiert.

Dort kann ich die COM auf 250000 initialisieren (Der Treiber für den FTDI-Chip sieht das auch vor).
Da meckert PB dann scheinbar nicht bzw. macht das.

Auch das Senden des Befehls (z. B. G28 =X/Y/Z-Home) funktioniert da.
Aber auch die Rückmeldungen kommen nicht sauber.
Mal sollte ein einfaches "Ok" zurück kommen, mal ein längerer String (z. B. Temperaturwerte).

D. h. das Absetzen der Befehle funktioniert erstmal mit dem PB-Standard-Befehl.
Was aber über die COM zurück kommt, lässt sich erstmal nicht abfragen/auswerten.

Aber auf jeden Fall danke ich Dir für Deine Bemühungen.
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35
Computerausstattung: armseliger Laptop, mit wenig RAM und noch weniger CPU-Leistung. ...und die Grafikkarte.... ....naja.. da male ich doch lieber selber.
Wohnort: nahe Wolfsburg

Re: RS232 mit 250000 Baud für 3D-Drucker nutzen

Beitrag von SBond »

Tach :)

die Ursache deines Problems könnte unterschiedliche Gründe haben. Mit PB habe ich auch COM-Ports mit 1 MBaud geöffnet und gesteuert.
Du nutzt ja einen FTDI-Chip. Mit diesem Ding hatte ich anfangs auch meine Probleme.

Wenn du unter Windows arbeiten solltest, dann müsstest du zunächst deine Geräteeinstellungen anpassen. Wenn ich mich recht erinnere, dann musst du den Sendepuffer (Windowsseitig) auf das Minimum stellen. Wie sehen deine Daten aus? Ist das ASCII-Text oder sind das irgendwelche Binärdatenströme?


viele Grüße
SBond
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
samurai1967
Beiträge: 7
Registriert: 01.02.2010 23:19
Kontaktdaten:

Re: RS232 mit 250000 Baud für 3D-Drucker nutzen

Beitrag von samurai1967 »

Hallo SBond,

bei mir handelt es sich um reine ASCII-Zeichen.

Es werden zeilenweise Steuerbefehle für CNC-Fräsen (ist ja bei 3D-Drucker ähnlich) geschickt und das Echo ausgewertet.

Z. B. sende ich ein

G28

und der 3D-Drucker macht das Homing auf X/Y/Z-Achse.

Wenn dann da als Echo ein "OK" zurück kommt ist alles gut.

Hatte auch schon dran gedacht eine Verbindung über PuTTY zu öffnen und dort drüber dann zu senden und zu empfangen und dann in PB die Geschichte auszuwerten.
Ist aber ein unnötiger Umweg, der auch mit zusätzlicher Arbeit einher geht.

Sorry, dass ich mich erst so spät melde, hatte aber die ganze Zeit anderen Kram um die Ohren.

Ich wünsche Dir auf jeden Fall einen schönen Rutsch nach 2015.
Benubi
Beiträge: 186
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: RS232 mit 250000 Baud für 3D-Drucker nutzen

Beitrag von Benubi »

Hallo,

besteht das Problem noch ? Ich kann leider nichts testen, aber schau mal ob das nicht einfach an dem hier liegt :

Code: Alles auswählen


Buffer1.b = 200
Buffer2.a = 200

Debug Chr(Buffer1)
Debug Chr(Buffer2)

:)

Mfg,

Benubi
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: RS232 mit 250000 Baud für 3D-Drucker nutzen

Beitrag von mk-soft »

Ich glaube nicht das es nach über 4 Jahren das Problem besteht. :)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benubi
Beiträge: 186
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: RS232 mit 250000 Baud für 3D-Drucker nutzen

Beitrag von Benubi »

Huch, da hatte ich wohl einen Knick in der Optik... der war also nicht aus diesem Jahr? :freak: :lol:

Trotzdem vermisse ich die Ergebnisse des Ganzen...
Antworten