我正在尝试对旧的 DOS CNC 程序进行逆向工程,但收效甚微。我从 DOS 程序中嗅探了 Rx/Tx 流并看到了这个......
来自 DOS 的 Tx:
"OUTPUT TEST" 0D
来自机器的 Rx:
"OUTPUT TEST" 0D 0D 0A
0D 0A
"TEST" 0D 0A
"0001> +09000 +09000 +00000 +00000 +00000 +00032 +00000 D O " 0D 0A
"0002> +00000 +03000 +00000 +00000 +00000 +00032 +00000 B N " 0D 0A
"0003> +00000 +03000 +00000 +00000 +00000 +00032 +00000 B N " 0D 0A
"0004> +00000 +03000 +00000 +00000 +00000 +00032 +00000 B N " 0D 0A
"0005> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0006> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0007> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0008> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0009> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0010> +09000 +17000 +00000 +00000 +00000 +00064 +00000 B X . " 0D 0A
14 0D 0A
"PIN> "
当然,我必须重新格式化流以使其可读。
如您所见,最后一行没有换行符。这使得 ReadLine 无用,因为最后一行只会出现在下一个请求中。我需要能够发送命令并阅读到最后。我能够实现这一点的唯一方法是睡眠足够长的时间以在机器上完成传输,然后在 PC 上处理数据。在某些机器上,延迟必须设置为高达 5 秒。我不想这样做,但它确实有效。
While spUISC.BytesToRead > 0
buffer &= spUISC.ReadExisting
Threading.Thread.Sleep(100)
End While
概括
如果传入流没有终止字符,我如何判断它是否已完成?