簡體   English   中英

與Virtual PC的COM端口通信(第2部分)

[英]COM port communication with Virtual PC (part 2)

這個問題與我先前的問題有關

現在已成功連接到管道,但是我仍然無法從端口讀取(或寫入)任何數據。

我的第一個猜測是,數據被緩沖了。 但是,即使我在客戶端站點上寫了5000字節(NamedPipeClientStream中的緩沖區大為512字節),我也沒有收到任何數據。

PipeOptions.WriteThrough也沒有進行任何更改。

當我不使用管道而是使用文本文件(在Virtual-PC設置中)將數據重定向到寫入COM端口的數據時,數據將按預期寫入文本文件。 因此,在Virtual-PC中運行的客戶端測試程序運行良好。 該問題可能在下面的代碼中。

var pipe = new NamedPipeClientStream(".", "mypipe", PipeDirection.InOut, PipeOptions.WriteThrough);

pipe.Connect();

// this is blocking
int i = pipe.ReadByte();

var reader = new StreamReader(pipe);
// this is blocking, too
var s = reader.ReadLine();

更新:

我在來賓操作系統上運行的代碼:

var port = new SerialPort("COM1");
port.Open();

port.WriteLine("Hallo");

按照telewin的建議在命令提示符中使用'echo'效果很好。 回顯和使用上面的代碼有什么區別?

抱歉,回復晚了,希望它仍然有用...

在我的測試中,“ echo hello> com1”僅您在VPC中運行程序(啟動新的SerialPort)之前有效。 運行它之后,宿主程序將不再顯示“ echo hello> com1”,直到重新啟動客戶機。

這表明SerialPort本身的初始化是永久的。 使用Reflector,我們發現SerialPort的ctor沒有任何作用,但是它的Open方法調用了SerialStream的ctor。 這個ctor做了很多事情:它設置讀/寫緩沖區,Rts / Dtr和握手模式。 經過一些試驗,似乎Rts / Dtr搞砸了“ echo hello> com1”。 您能否在VPC中嘗試以下修改后的代碼:

var port = new SerialPort("com1");
port.DtrEnable = true;
port.RtsEnable = true;
port.Open();
port.WriteLine("Hallo");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM