Windows-Testwerkzeuge für virtuelle COM-Ports ergänzen
This commit is contained in:
parent
0eccd003f0
commit
d890aba7b4
2 changed files with 245 additions and 4 deletions
239
cmd/com0com-test/main.go
Normal file
239
cmd/com0com-test/main.go
Normal file
|
|
@ -0,0 +1,239 @@
|
|||
//go:build windows
|
||||
|
||||
/*
|
||||
* ============================================================================
|
||||
* Projekt.....: rs2322tcp
|
||||
* Datei.......: cmd/com0com-test/main.go
|
||||
* Copyright (C) 2026 Dieter Lang
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Beschreibung:
|
||||
* Direkter Test eines com0com-Portpaares.
|
||||
*
|
||||
* Der Test öffnet COM100 und COM10 gleichzeitig und überprüft die
|
||||
* Datenübertragung in beide Richtungen:
|
||||
*
|
||||
* COM100 -> COM10
|
||||
* COM10 -> COM100
|
||||
*
|
||||
* Dadurch kann die Funktion von com0com und go.bug.st/serial unabhängig
|
||||
* vom rs2322tcp-Client, TCP-Server und PTY-Testaufbau geprüft werden.
|
||||
* ============================================================================
|
||||
*/
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"go.bug.st/serial"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("rs2322tcp com0com Direkt-Test")
|
||||
fmt.Println()
|
||||
|
||||
mode := &serial.Mode{
|
||||
BaudRate: 600,
|
||||
DataBits: 8,
|
||||
Parity: serial.NoParity,
|
||||
StopBits: serial.OneStopBit,
|
||||
}
|
||||
|
||||
com10, err := serial.Open("COM10", mode)
|
||||
if err != nil {
|
||||
log.Fatalf("COM10 öffnen: %v", err)
|
||||
}
|
||||
defer com10.Close()
|
||||
|
||||
fmt.Println("COM10 geöffnet.")
|
||||
|
||||
com100, err := serial.Open("COM100", mode)
|
||||
if err != nil {
|
||||
log.Fatalf("COM100 öffnen: %v", err)
|
||||
}
|
||||
defer com100.Close()
|
||||
|
||||
fmt.Println("COM100 geöffnet.")
|
||||
fmt.Println()
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Test 1: COM100 -> COM10
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
request := []byte{
|
||||
0x57,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x1F,
|
||||
0x20,
|
||||
}
|
||||
|
||||
fmt.Printf(
|
||||
"COM100 TX: %d Bytes\n",
|
||||
len(request),
|
||||
)
|
||||
printHex(request)
|
||||
|
||||
n, err := com100.Write(request)
|
||||
if err != nil {
|
||||
log.Fatalf("COM100 schreiben: %v", err)
|
||||
}
|
||||
|
||||
if n != len(request) {
|
||||
log.Fatalf(
|
||||
"COM100 schreiben: %d von %d Bytes geschrieben",
|
||||
n,
|
||||
len(request),
|
||||
)
|
||||
}
|
||||
|
||||
fmt.Println("COM100 schreiben erfolgreich.")
|
||||
|
||||
received := make([]byte, len(request))
|
||||
|
||||
if err := com10.SetReadTimeout(2 * time.Second); err != nil {
|
||||
log.Fatalf("COM10 ReadTimeout setzen: %v", err)
|
||||
}
|
||||
|
||||
n, err = com10.Read(received)
|
||||
if err != nil {
|
||||
log.Fatalf("COM10 lesen: %v", err)
|
||||
}
|
||||
|
||||
fmt.Printf(
|
||||
"COM10 RX: %d Bytes\n",
|
||||
n,
|
||||
)
|
||||
printHex(received[:n])
|
||||
|
||||
if n != len(request) {
|
||||
log.Fatalf(
|
||||
"COM10: %d Bytes empfangen, erwartet %d",
|
||||
n,
|
||||
len(request),
|
||||
)
|
||||
}
|
||||
|
||||
if !equalBytes(request, received[:n]) {
|
||||
log.Fatal("COM10: empfangene Daten stimmen nicht mit den gesendeten Daten überein")
|
||||
}
|
||||
|
||||
fmt.Println("Test COM100 -> COM10 erfolgreich.")
|
||||
fmt.Println()
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Test 2: COM10 -> COM100
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
response := []byte{
|
||||
0x57,
|
||||
0x07,
|
||||
0x01,
|
||||
0x06,
|
||||
0x00,
|
||||
0x01,
|
||||
0x03,
|
||||
0x06,
|
||||
0x02,
|
||||
0x00,
|
||||
0x01,
|
||||
0x20,
|
||||
}
|
||||
|
||||
fmt.Printf(
|
||||
"COM10 TX: %d Bytes\n",
|
||||
len(response),
|
||||
)
|
||||
printHex(response)
|
||||
|
||||
n, err = com10.Write(response)
|
||||
if err != nil {
|
||||
log.Fatalf("COM10 schreiben: %v", err)
|
||||
}
|
||||
|
||||
if n != len(response) {
|
||||
log.Fatalf(
|
||||
"COM10 schreiben: %d von %d Bytes geschrieben",
|
||||
n,
|
||||
len(response),
|
||||
)
|
||||
}
|
||||
|
||||
fmt.Println("COM10 schreiben erfolgreich.")
|
||||
|
||||
received = make([]byte, len(response))
|
||||
|
||||
if err := com100.SetReadTimeout(2 * time.Second); err != nil {
|
||||
log.Fatalf("COM100 ReadTimeout setzen: %v", err)
|
||||
}
|
||||
|
||||
n, err = com100.Read(received)
|
||||
if err != nil {
|
||||
log.Fatalf("COM100 lesen: %v", err)
|
||||
}
|
||||
|
||||
fmt.Printf(
|
||||
"COM100 RX: %d Bytes\n",
|
||||
n,
|
||||
)
|
||||
printHex(received[:n])
|
||||
|
||||
if n != len(response) {
|
||||
log.Fatalf(
|
||||
"COM100: %d Bytes empfangen, erwartet %d",
|
||||
n,
|
||||
len(response),
|
||||
)
|
||||
}
|
||||
|
||||
if !equalBytes(response, received[:n]) {
|
||||
log.Fatal("COM100: empfangene Daten stimmen nicht mit den gesendeten Daten überein")
|
||||
}
|
||||
|
||||
fmt.Println("Test COM10 -> COM100 erfolgreich.")
|
||||
fmt.Println()
|
||||
|
||||
fmt.Println("==========================================")
|
||||
fmt.Println("Alle com0com-Direkt-Tests erfolgreich.")
|
||||
fmt.Println("==========================================")
|
||||
}
|
||||
|
||||
// printHex gibt einen Byte-Block hexadezimal aus.
|
||||
func printHex(data []byte) {
|
||||
for i, b := range data {
|
||||
if i > 0 {
|
||||
fmt.Print(" ")
|
||||
}
|
||||
|
||||
fmt.Printf("%02X", b)
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
// equalBytes compares two byte slices.
|
||||
func equalBytes(a, b []byte) bool {
|
||||
if len(a) != len(b) {
|
||||
return false
|
||||
}
|
||||
|
||||
for i := range a {
|
||||
if a[i] != b[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
@ -5,13 +5,15 @@ echo ==========================================
|
|||
echo rs2322tcp Windows Client Test
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo Starte technischen Client...
|
||||
echo Starte normalen rs2322tcp-Client...
|
||||
echo COM100 wird vom Client verwendet.
|
||||
echo COM10 wird fuer die Testsequenz verwendet.
|
||||
echo Die konfigurierte Startsequenz wird nach
|
||||
echo erfolgreichem Verbindungsaufbau automatisch gesendet.
|
||||
echo.
|
||||
echo Zum Beenden: Ctrl+C
|
||||
echo.
|
||||
go run .\cmd\rs2322tcp-client-test
|
||||
|
||||
go run .\cmd\rs2322tcp-client
|
||||
|
||||
echo.
|
||||
echo Client beendet.
|
||||
|
|
|
|||
Loading…
Reference in a new issue