Ich versuche, einen Better Pack BP555eMA-Klebebandspender zu automatisieren, indem ich ihn über einen USB-zu-Seriell-Adapter von einem PC aus steuere.
Ich habe viel Zeit damit verbracht, es zu versuchen, und ich möchte Ihnen hier mitteilen, wie es funktioniert.
Antwort
Das Protokoll (EP1002)
Das Gerät verwendet ein spezifisches ASCII-Protokoll.
- Baudrate: 9600 (Standard)
- Einstellungen: 8 Datenbits, keine Parität, 1 Stoppbit (8N1).
- Handshake ()[/b]: Sie MÜSSEN zuerst diesen Befehl senden, um die Maschine „aufzuwecken“. Es reagiert nicht auf Abgabebefehle, bis es diese erhält.
Code: Select all
@1T - Abgabe ()[/b]: Das Format ist @1D gefolgt von der Länge in „Zählungen“.
Code: Select all
@1D...- Umrechnung: ~4 Zählungen pro cm (genau 61 Zählungen = 6 Zoll / 15,24 cm).
- Beispiel: 20 cm dosieren -> 20 * 4 = 80 -> Send @1D80.
- Terminator: Alle Befehle müssen mit enden ().
Code: Select all
\r\n
Nützlich für Headless-Server oder Hintergrundskripte.
Code: Select all
import serial
import time
# Configure Port (Try 9600 first, then 2400)
ser = serial.Serial('COM3', 9600, timeout=1)
# 1. Handshake (Required)
ser.write(b'@1T\r\n')
time.sleep(0.5) # Wait for machine to initialize
# 2. Dispense 20cm
# 20cm * 4 counts/cm = 80 counts
ser.write(b'@1D80\r\n')
ser.close()
Zero-Install-Lösung: Funktioniert direkt in Chrome/Edge ohne Backend-Server.
Code: Select all
Connect
Dispense 20cm
let writer;
async function connect() {
// User selects port
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
const textEncoder = new TextEncoderStream();
const writableStreamClosed = textEncoder.readable.pipeTo(port.writable);
writer = textEncoder.writable.getWriter();
// Handshake
await writer.write("@1T\r\n");
}
async function dispense(cm) {
if (!writer) return alert("Connect first!");
const counts = Math.floor(cm * 4);
await writer.write(`@1D${counts}\r\n`);
}
document.getElementById('connectBtn').addEventListener('click', connect);
Mobile version