[英]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.