C WPF上位機實現和下位機TCP通訊

2021-09-19 18:53:58 字數 4559 閱讀 3340

c# wpf上位機實現和下位機tcp通訊

下位機使用北京大華程式控制電源dh1766-1,上位機使用wpf。實現了電壓電流實時採集,曲線顯示。上午在公司除錯成功,手頭沒有程式控制電源,使用tcp服務端模擬。昨天寫的tcp服務端正好排上用場。

介面如下:

服務端服務端實在上篇基礎上實現的。需要做如下更改:

複製**

while (true)

string receivestr = encoding.default.getstring(bufferdate, 0, reallen);

switch (receivestr)

this.invoke(addtextdelegate, receivestr + "from" + psocket.remoteendpoint.tostring() + "\r\n");

}catch (exception ex)

}

複製**

在while迴圈中加入:

switch (receivestr)

private addtextdelegate addtextdelegate;

private listsocketlist = new list();

public delegate void addtextdelegate(string text);

private void addtext(string text)

random r = new random();

private void btnstart_click(object sender, eventargs e)

string receivestr = encoding.default.getstring(bufferdate, 0, reallen);

switch (receivestr)

this.invoke(addtextdelegate, receivestr + "from" + psocket.remoteendpoint.tostring() + "\r\n");

}catch (exception ex)}})

.start(proxsocket);

}});

thread.isbackground = true;

thread.start(socket);

}private void btnsend_click(object sender, eventargs e)}}

}複製**

上位機實現客戶端功能。具體如下:

1、欄位和屬性

public readonly ipendpoint tagetipep;

public bool isconnected = false;

private socket socket = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp) ;

private thread reclistenthread;

public string receivestr

public byte receivebyte

tagetipep是伺服器位址和埠。

isconnected是連線的狀態,這個比較重要,在傳送和接收時,都要更加isconnected進行,並更新isconnected。

socket用於和客戶端通訊。

reclistenthread是監聽客戶端訊息的執行緒。

receivestr和receivebyte用來儲存客戶端發來的訊息。

2、方法函式

連線方法:

複製**

public bool connect()

;

//iasyncresult connresult = socket.beginconnect(tagetipep.address, tagetipep.port, null, null);

true);

//if (connresult.iscompleted)

//return;}}

catch (exception ex)

return;}}

});

reclistenthread.start();

return true;

//}}

catch (exception ex)

return false;

}

複製**

連線函式返回值為bool型別,根據返回值判斷連線是否成功連線。這裡每次連線都例項化了乙個socket,因為在執行socket.close()後,重新開啟會失敗,而斷線重連會經常用到,沒有找到更好的方法,乾脆重新例項化socket。連線成功後,開啟監聽服務端訊息的執行緒。這裡使用了乙個receiveevent()事件,在接收到訊息時會觸發這個事件,重新整理ui介面。

傳送方法:

複製**

public bool send(string msg)

catch (exception ex)}}

return false;

}

複製**

關閉方法:

複製**

public void close()

}

複製**

在出現異常時呼叫

訊息接收事件:

public event action receiveevent;

每次接收訊息時觸發,獲取屬性receivestr和receivebyte的值,重新整理ui介面。

完整**:

複製**

public class tcpclient

public readonly ipendpoint tagetipep;

public bool isconnected = false;

private socket socket = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp) ;

public bool connect()

;//iasyncresult connresult = socket.beginconnect(tagetipep.address, tagetipep.port, null, null);

true);

//if (connresult.iscompleted)

//return;}}

catch (exception ex)

return;}}

});

reclistenthread.start();

return true;

//}}

catch (exception ex)

return false;

}public bool send(string msg)

catch (exception ex)}}

return false;

}public event action receiveevent;

public string receivestr

public byte receivebyte

public void close()

}private thread reclistenthread;

}

複製**

前台呼叫,宣告timer定時器,每個一秒觸發一次。觸發事件如下:

複製**

private string flag = "";

private void querytimer_elapsed(object sender, system.timers.elapsedeventargs e)

flag = "v";

thread.sleep(50);

if (!tcp.send("meas:curr:all?\n"))

flag = "c";

#region 測試

//angle += 18;

//if (angle > 360)

//#endregion

}

複製**

重新整理ui介面的事件如下:

複製**

private void tcp_receiveevent()

#region 測試

//voltvalue = math.round(math.sin((angle) * pi / 180) * 16 + 16, 3);

//currentvalue = math.round(math.sin((angle) * pi / 180) * 2.5 + 2.5, 3);

#endregion

voltvalues.add(voltvalue);

currentvalues.add(currentvalue);

if (voltvalues.count > 30)

});});

}

C WPF上位機實現和下位機TCP通訊

c wpf上位機實現和下位機tcp通訊 下位機使用北京大華程式控制電源dh1766 1,上位機使用wpf。實現了電壓電流實時採集,曲線顯示。上午在公司除錯成功,手頭沒有程式控制電源,使用tcp服務端模擬。昨天寫的tcp服務端正好排上用場。介面如下 服務端服務端實在上篇基礎上實現的。需要做如下更改 複...

上位機 下位機

上位機是指 人可以直接發出操控命令的計算機,一般是pc,螢幕上顯示各種訊號變化 液壓,水位,溫度等 下位機是直接控制裝置獲取裝置狀況的的計算機,一般是plc 微控制器之類的。上位機發出的命令首先給下位機,下位機再根據此命令解釋成相應時序訊號直接控制相應裝置。下位機不時讀取裝置狀態資料 一般模擬量 轉...

上位機與下位機

上位機一般是集中管理監控機,下位機是指現場直接控制器或控制機。上位機面向管理級使用者,下位機面向底層裝置控制。上位機 上位監視系統,一般為計算機系統 監控軟體 下位機 控制系統的現場執行系統,一般為plc等裝置。上位機是指人可以直接發出操控命令的計算機,一般是pc,螢幕上顯示各種訊號變化 液壓,水位...