Как управлять диспенсером ленты Better Pack BP555eMA через последовательный интерфейс (RS-232) и веб-последовательный APJavascript

Форум по Javascript
Ответить
Anonymous
 Как управлять диспенсером ленты Better Pack BP555eMA через последовательный интерфейс (RS-232) и веб-последовательный AP

Сообщение Anonymous »

Вопрос
Я пытаюсь автоматизировать диспенсер ленты Better Pack BP555eMA, управляя им с ПК с помощью адаптера USB-to-Serial.
Я потратил много времени, пытаясь, и хочу рассказать, как это работает.
Ответ
Протокол (EP1002)
Аппарат использует специальный протокол ASCII.
  • Скорость передачи данных: 9600 (стандарт)
  • Настройки: 8 бит данных, без четности, 1 стоповый бит (8N1).
Команды:
  • Рукопопожатие ()[/b]: Вы ДОЛЖНЫ сначала отправить эту команду, чтобы «разбудить» машину. Он не будет реагировать на команды выдачи, пока не получит их.
  • Выдача ()[/b]: формат @1D, за которым следует длина в «отсчетах».
    • Преобразование: ~4 отсчета на см (точно 61 отсчет = 6 дюймов / 15,24 см).
    • Пример: для распределения 20 см -> 20 * 4 = 80 -> Отправить @1D80.
  • Терминатор: Все команды должны заканчиваться ().
Решение A: Python (Backend/Script)
Полезно для автономных серверов или фоновых сценариев.

Код: Выделить всё

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()
4. Решение Б: JavaScript (Web Serial API)
Решение без установки: Работает непосредственно в Chrome/Edge без какого-либо внутреннего сервера.

Код: Выделить всё

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);

Это должно помочь всем, кому нужно подключить оборудование BetterPackaging.


Подробнее здесь: https://stackoverflow.com/questions/798 ... -and-web-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»