在ABAP中从mscomm中读取数据
Reading data from mscomm in ABAP
我正在尝试 read data sent from serial port via 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.
我可以使用监控设备看到响应,但我得到的输入只有 ##
,当我将这个 ##
转换为十六进制时,我会得到 0202
.
我已经正确完成了所有设置,因为我可以发送数据并激活机器,但我仍然无法翻译响应。
我有一个使用 .NET 的遗留软件,它可以使用相同的响应数据完美地读取数据。
另一件奇怪的事情是 sSTX
的值是 #
但我不太在意它,因为它可以被设备理解。
预期输出是(取自监视器)
<ACK><STX><STX><NUL><SOH>01000000000000000000000000 P3 <ETX>
但我得到的只是 060202,即
<ACK><STX><STX>
不知何故正文不在同一个space。
我知道答案就在那里,但我几个星期都想不出来。很奇怪。
我找到了答案。
将 inputlen 属性 设置为 4。
解决问题。
我正在尝试 read data sent from serial port via 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.
我可以使用监控设备看到响应,但我得到的输入只有 ##
,当我将这个 ##
转换为十六进制时,我会得到 0202
.
我已经正确完成了所有设置,因为我可以发送数据并激活机器,但我仍然无法翻译响应。
我有一个使用 .NET 的遗留软件,它可以使用相同的响应数据完美地读取数据。
另一件奇怪的事情是 sSTX
的值是 #
但我不太在意它,因为它可以被设备理解。
预期输出是(取自监视器)
<ACK><STX><STX><NUL><SOH>01000000000000000000000000 P3 <ETX>
但我得到的只是 060202,即
<ACK><STX><STX>
不知何故正文不在同一个space。
我知道答案就在那里,但我几个星期都想不出来。很奇怪。
我找到了答案。
将 inputlen 属性 设置为 4。 解决问题。