2016-08-17 2 views
0

У меня есть Button, который получает значение ComboBox и вставляет его в строку для отправки через мой последовательный порт. По какой-то причине значение не вставляется в строку, но остальная часть строки построена правильно. Может ли кто-нибудь сказать мне, почему?Часть строки, которая не вставлена ​​

когда я System.out.println(something); он правильно печатает значение, выбранное в ComboBox «3»

Вот мои кнопки JavaFX.ActionEvent

@FXML 
public void setPresetButton(ActionEvent event) { 
    byte _preset = (Byte) setPresetComboBox.getValue(); 
    try { 
     something = presetNo[_preset - 1]; 

     byte[] command = { (byte) setPresetX,setPresetS,something,0x20}; 
     TwoWaySerialComm.SerialWriter sw = new TwoWaySerialComm.SerialWriter(
       twoWaySerCom.serialPort.getOutputStream()); 

     sw.out.write(command); 
     System.out.println(something); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 


byte presetNo[] = { 0X01, 0X02, 0X03, 0X04, 0X05 }; 
byte something; 
Byte[] preset = { 1, 2, 3, 4, 5 }; 
byte setPresetX = 0x78; 
byte setPresetS = 0x73; 
+0

Каков тип ваших списков? – ItachiUchiha

+0

его 'private ComboBox getPresetComboBox;' –

+0

байты '0x01'-'0x05' подозрительно малы. Должны ли они содержать цифры в виде (8-битных) символов или отправлять целевые символы управления (SOH, STX, ETX, EOT или ENQ)? – fabian

ответ

1

Вы, кажется, кодировать текст в ASCII, а также нужны символы для цифры, т.е. '1', '2', ..., '5' (кодировок 0x31, 0x32, 0x33, 0x34 и 0x35) ИНСТЕ объявление управляющих кодов для начала заголовка, начала текста, окончания текста, окончания передачи и запроса (см. Control Codes).

В случае, если вам действительно нужна кодировка ASCII, вы можете использовать String для кодирования:

String s = "xs" + something + ' '; 
Charset charset = StandardCharsets.US_ASCII; 
byte[] command = s.getBytes(charset); 

в качестве альтернативы вы можете также получить правильную кодировку, добавив '0' к byte значению:

byte[] command = { (byte) setPresetX, setPresetS, (byte)(something + '0'), 0x20}; 
+0

Я только что скопировал вставить код из другого рабочего примера 'byte [] command = {(byte) startTx, address, byteOne, goPreset, 0x00, something, endTx, 0x0F};' который был типичным 485-8'byte' Строка PelcoP. Я использую новый протокол «FLIR», и он указывает на необработанные ASCII символы ascii, которые я пытаюсь отправить, просто «SX1» для «set preset 1». «Combobox» показывает представление ASCII для удобства использования для пользователя. –

+0

Идея состоит в том, что пользователь может сохранить позицию до своего выбранного «пресета» для последующего вызова, выбрав номер из «ComboBox», а затем нажав кнопку «setpresetButton» –

+0

'' XS1 .getBytes (Charset.forName («US -ASCII "))' должен предоставить вам 'XS1', закодированный как ASCII. BTW '0x73' и' 0x78' являются ** нижним регистром ** 's' и' x'. Я не знаком с протоколом FLIR, хотя ... – fabian

Смежные вопросы