Hier ein kleines testprogramm für die MVCOM library von Marc Vitry
Hat mir jedenfalls bisher gute dienste geleistet

Übrigens der handshake sollte auf 0 stehen bei Geräten die nur über zwei Leitungen verfügen (RXD/TXD).
Geräte die damit bisher gut funktionieren :
Mitutoyo Digitale Schieblehre
Datalogic DLL5510 (Barcode Laserscanner)
Datalogic Gryphon M100 (Barcode Laserscanner)
Datalogic FireScan D131 (Barcode Laserscanner)
Symbol FZT302 (Barcode Laserscanner)
Diverse Spannungquellen von Chroma und Genesys
BasicTiger (Ein-Chip Microcontroller)
Code: Alles auswählen
; ComPortTest (PB4B7)
; Benötigt MVCOM-Library von Marc Vitry
; http://www.purearea.net/pb/download/userlibs/MVCOM_LIBRARY.zip
Procedure SendByte(Port,buffer.w)
If ComSendByte(Port,@buffer,1)
Debug "SendByte $"+RSet(Hex(buffer),2,"0")
Else
Debug "SendByte error"
EndIf
EndProcedure
If OpenWindow(0,0,0,250,250,"COM Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ButtonGadget(1,10,10,50,20,"STX")
ButtonGadget(2,60,10,50,20,"ETX")
ButtonGadget(3,110,10,50,20,"ENQ")
ButtonGadget(4,160,10,50,20,"LF")
ButtonGadget(5,10,30,50,20,"FF")
ButtonGadget(6,60,30,50,20,"CR")
ButtonGadget(7,110,30,50,20,"NAK")
ButtonGadget(8,160,30,50,20,"ACK")
TextGadget(9,10,70,200,140,"",#PB_Text_Border)
TextGadget(10,10,220,200,20,"",#PB_Text_Border)
CheckBoxGadget(11,10,50,50,20,"DTR")
CheckBoxGadget(12,70,50,50,20,"RTS")
StringGadget(13,130,50,30,20,"0",#PB_String_Numeric)
ButtonGadget(14,170,50,40,20,"Send")
SetTimer_(WindowID(0),1,100,0)
EndIf
; cominit$="COM1:9600,N,8,1"
cominit$="COM3:4800,E,7,1"
Port=ComOpen(cominit$,0,1024,1024)
If Port
SetGadgetText(10,cominit$+" Online")
EndIf
Repeat
Event=WindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1 ; STX
SendByte(Port,2)
Case 2 ; ETX
SendByte(Port,3)
Case 3 ; ENQ
SendByte(Port,5)
Case 4 ; LF
SendByte(Port,10)
Case 5 ; FF
SendByte(Port,12)
Case 6 ; CR
SendByte(Port,13)
Case 7 ; NAK
SendByte(Port,21)
Case 8 ; ACK
SendByte(Port,6)
Case 11 ; DTR
ComSetDTR(Port,GetGadgetState(11))
Case 12 ; RTS
ComSetRTS(Port,GetGadgetState(12))
Case 14
SendByte(Port,Val(GetGadgetText(13))&$FF)
EndSelect
Case #WM_TIMER
If Port>0
While ComInputBufferCount(Port)>0
rd.b=0
ComReadByte(Port,@rd,1)
Debug rd
If rd>0
If rd=13
Debug ("SCAN COMPLETE : "+String$)
hexstring$=""
For i=1 To Len(String$)
hexstring$+RSet(Hex(Asc(Mid(String$,i,1))),2,"0")+" "
Next
SetGadgetText(9,hexstring$+Chr(13)+String$)
String$=""
Else
If rd>31
String$+Chr(rd)
EndIf
EndIf
EndIf
Wend
EndIf
EndSelect
Until Event=#PB_Event_CloseWindow
ComClose(File)
CloseWindow(0)

[edit] DTR DTS setzen / Wert senden hinzugefügt (danke für den Hinweis SVEN)