Есть необходимость снимать показания ТРМ101.
Используется конвертор АС3. Программа на Java (хотя конечно библиотека на С).
Сниффером получена команда (последовательность байтов) для ТРМ101 и она работает будучи отослана не из Java.
Java программа отсылает команду с СОМ-порт и ничего не происходит.
У меня сложилось впечатление, что байты помещены в буфер, но их не читает ТРМ101. В конце концов JSSC работает с RS232, а у нас RS485.
Я не нашел за полчаса серфинга никаких полезных сведений на тему Java+продукция ОВЕН.
Поэтому взываю о помощи, что я не так делаю?
public class SerialApp {
private static SerialPort serialPort;
public static void main(String[] args) {
serialPort = new SerialPort("COM1");
try {
//Открываем порт
serialPort.openPort();
//Выставляем параметры
serialPort.setParams(SerialPort.BAUDRATE_9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
//Включаем аппаратное управление потоком
serialPort.setFlowControlMode(SerialPort.FLOWCONTR OL_RTSCTS_IN |
SerialPort.FLOWCONTROL_RTSCTS_OUT);
//Устанавливаем ивент лисенер и маску
serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR);
//Отправляем запрос устройству
byte[] hexRequest = {0x23,0x50,0x4F,0x48,0x47,0x52,0x4F,0x54,0x56,0x4B ,0x54,0x47,0x56,0x0D};
serialPort.setRTS(true);
serialPort.writeBytes(hexRequest);
serialPort.setDTR(true);
}
catch (SerialPortException ex) {
System.out.println(ex.getPortName());
}
}
private static class PortReader implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR() && event.getEventValue() > 0){
try {
//Получаем ответ от устройства, обрабатываем данные и т.д.
String data = serialPort.readString(event.getEventValue());
//И снова отправляем запрос
serialPort.writeString("Get data");
}
catch (SerialPortException ex) {
System.out.println(ex);
}}}}}