Чтение данных из mscomm в ABAP - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь прочитать данные, отправленные с последовательного порта через MSCOMM32 объект.

То, что я получил, было ##.

Сначала я конвертирую шестнадцатеричный код в строку и отправляю на порт COMM:

DATA : xSTX TYPE xstring VALUE '02'.
DATA : sSTX TYPE string.

CALL FUNCTION 'HR_KR_XSTRING_TO_STRING'
EXPORTING
 in_xstring = xSTX
 IMPORTING
 out_string = sSTX. "this value is now # but still understood by the device

SET PROPERTY OF O_OBJ 'Output' =  sSTX .

А затем устройство, подключенное к последовательному порту, выдаст ответ. Я читаю данные, используя этот код ниже:

  Data strmsg Type string.
  DO 10 TIMES.
    GET PROPERTY OF o_obj 'InBufferCount' = wa_buffer.
    If wa_buffer > 0.
        GET PROPERTY OF o_obj 'Input' =  strmsg.
    Endif.
  ENDDO.

Я вижу ответ, используя устройство мониторинга, но получаю ввод, который был только ##, когда я конвертирую этот ## в шестнадцатеричный код, тогда я быget 0202.

Я уже сделал все настройки правильно, потому что я могу отправить данные и активировать машину, но я все еще не могу перевести ответ.

У меня есть устаревшее программное обеспечение, использующее .NET, и оно может отлично считывать данные, используя те же данные ответов.

Еще одной странной вещью было значение sSTX, равное #, но я его тоже не беспокоюмного, потому что это понимает устройство.

Ожидаемый вывод (взят из монитора)

<ACK><STX><STX><NUL><SOH>01000000000000000000000000                       P3                                                                                                                                                    <ETX>

Но все, что я получаю, было 060202, что как-то

<ACK><STX><STX> 

тело текста не в том же месте.

Я знаю, что ответ есть, но я просто не могу понять это неделями. очень странно.

1 Ответ

0 голосов
/ 13 ноября 2019

Я нашел ответ.

установите для свойства inputlen значение 4. Решите проблему.

...