Java и Enttec DMX USB ProJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java и Enttec DMX USB Pro

Сообщение Anonymous »

Я пытаюсь заставить Enttec DMX USB Pro работать с Java. Я использую библиотеку jssc для обработки последовательной связи.
Это устройство: https://www.enttec.co.uk/en/product/dmx-usb-interfaces/ dmx-usb-pro-professional-1u-usb-to-dmx512-converter
Я выбрал Pro-версию из-за API (https://cdn.enttec.com/ pdf/assets/70304/70304_DMX_USB_PRO_API.pdf), что должно упростить задачу по сравнению с дешевым «Open DMX».
Это мой класс DmxUsbProExample:

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

package org.example;

import jssc.SerialPort;
import jssc.SerialPortException;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class DmxUsbProExample {

byte[] dmxData;
ScheduledExecutorService executorServiceChangeEffect;
SerialPort serialPort;

public DmxUsbProExample(String comPort) {

try {

this.serialPort = new SerialPort(comPort);
this.serialPort.openPort();
this.serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_2, SerialPort.PARITY_NONE);
this.serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

this.dmxData = new byte[512];
this.dmxData[0] = (byte) 255;
this.dmxData[1] = (byte) 255;
this.dmxData[2] = (byte) 255;
this.dmxData[3] = (byte) 255;

} catch (SerialPortException ex) {

System.out.println(ex);

}

}

private void sendDMXData() {

try {

byte[] packet = buildEnttecDMXUSBProPacket(this.dmxData);

this.serialPort.writeBytes(packet);

} catch (jssc.SerialPortException e) {

e.printStackTrace();

}

}

private static byte[] buildEnttecDMXUSBProPacket(byte[] dmxData) {

int dataLength = dmxData.length;
byte[] enttecDMXUSBProPacket = new byte[5 + dataLength];

byte START_CODE = (byte) 0x7E;
enttecDMXUSBProPacket[0] = START_CODE;
byte DMX_SEND_LABEL = 0x06;
enttecDMXUSBProPacket[1] = DMX_SEND_LABEL;
enttecDMXUSBProPacket[2] = (byte) (dataLength & 0xFF);
enttecDMXUSBProPacket[3] = (byte) ((dataLength >> 8) & 0xFF);
System.arraycopy(dmxData, 0, enttecDMXUSBProPacket, 4, dataLength);
byte END_CODE = (byte) 0xE7;
enttecDMXUSBProPacket[enttecDMXUSBProPacket.length - 1] = END_CODE;

return enttecDMXUSBProPacket;

}

public void startEngine() {

this.executorServiceChangeEffect = Executors.newSingleThreadScheduledExecutor();
this.executorServiceChangeEffect.scheduleAtFixedRate(this::sendDMXData, 0, 1000 / 40, TimeUnit.MILLISECONDS);

}

}
И я использую это так:

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

DmxUsbProExample dmxUsbProExampleOBJ = new DmxUsbProExample("COM6");
dmxUsbProExampleOBJ.startEngine();
Как видно из примера, моя цель — установить для каналов DMX 1,2,3 и 4 значение 255.
Проблема: Лампа ( Cameo Root Rar 6) не реагирует. Похоже, что лампа не получает действительный сигнал DMX, поскольку дисплей на лампе мигает, что указывает на отсутствие сигнала DMX.
Я знаю, что лампа работает, это так. работает с другим программным обеспечением DMX.
Я знаю, что использую правильный COM-порт.
Я знаю, что Enttec DMX USB pro работает, поскольку программное обеспечение от производителя может отправлять «действительный» DMX на лампа.

Подробнее здесь: https://stackoverflow.com/questions/790 ... mx-usb-pro
Ответить

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

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

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

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

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