基於多串列埠ETH005裝置的Socket網路程式設計
利用多串列埠裝置進行Socket網路程式設計
1、安裝多串列埠伺服器ETH005軟體。軟體下載地址:http://download.csdn.net/detail/taomanman/6762173
2、開啟ETH005軟體,點選“掃描”,如下圖:
3、會搜尋到裝置的IP地址,修改串列埠COM1的串列埠波特率為9600,通訊方式修改為485通訊,遠端IP修改成192.168.0.2,然後點選“連線”,如下圖:
4、連線完成後,點選“配置”,如下圖:
5、點選“讀取配置資訊”,如下圖:
6、開啟串列埠除錯助手,配置遠端主機和遠端埠號資訊,然後連線網路,然後輸入十六進位制數,然後傳送,接收區會將結果輸出,如下圖:
開始程式設計:使用Socket進行網路程式設計,傳送指令,獲取資料
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1、 建立Socket連線
Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ie = new IPEndPoint(IPAddress.Parse("192.168.0.18"), 50001);
try
{
newclient.Connect(ie);
}
catch (SocketException e)
{
MessageBox.Show("連線伺服器失敗:" + e.Message);
return;
}
ThreadStart myThreaddelegate = new ThreadStart(ReceiveMsg);
myThread = new Thread(myThreaddelegate);
myThread.Start();
2、 傳送指令
///<summary>
///傳送溫溼度資料
///</summary>
public void SendWSD()
{
string wsd = "01 03 00 00 00 03 05 cb";
int m_length = wsd.Length;
byte[] data = new byte[m_length];
//十六進位制字串轉換成字元陣列(01 03 00 00 00 03 05 cb)
data = ConvertHelper.strToToHexByte(wsd);
int i = newclient.Send(data, data.Length, 0);
//showMsg("溫溼度傳送訊息為:" + wsd + "\r\n");
}
public static class ConvertHelper
{
///<summary>
/// 16進位制字串轉位元組陣列
///</summary>
///<param name="hexString"></param>
///<returns></returns>
public static byte[] strToToHexByte(string hexString)
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0)
hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Trim(), 16);
return returnBytes;
}
///<summary>
///位元組陣列轉16進位制字串
///</summary>
///<param name="bytes"></param>
///<returns></returns>
public static string byteToHexStr(byte[] bytes)
{
string returnStr = "";
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("X2");
}
}
return returnStr;
}
///<summary>
///十六進位制轉十進位制
///</summary>
///<param name="hex"></param>
///<returns></returns>
public static string Hex2Ten(string hex)
{
int ten = 0;
for (int i = 0, j = hex.Length - 1; i < hex.Length; i++)
{
ten += HexChar2Value(hex.Substring(i, 1)) * ((int)Math.Pow(16, j));
j--;
}
return ten.ToString();
}
}
3、 接收資料
///<summary>
///接收訊息
///</summary>
public void ReceiveMsg()
{
while (true)
{
byte[] data = new byte[1024];
int recv = newclient.Receive(data);
string stringdata = Encoding.UTF8.GetString(data, 0, recv);
//將所讀取的字串轉換為位元組陣列
byte[] content = Encoding.ASCII.GetBytes(stringdata);
if (recv <= 0)
break;
string hexString = ConvertHelper.byteToHexStr(content);
string sd = hexString.Substring(6, 4);
string wd = hexString.Substring(10, 4);
//showMsg("溫溼度接收到的返回值串為:" + hexString + "\r\n");
//處理後的溫溼度數值
double csd = double.Parse(ConvertHelper.Hex2Ten(sd)) / 100;
double cwd = (double.Parse(ConvertHelper.Hex2Ten(wd)) - 27315) / 100;
showMsg("溼度值為:" + csd + "% 採集時間:[" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "]\r\n");
showMsg("溫度值為:" + cwd + "℃ 採集時間:[" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "]\r\n");
}
}
///<summary>
///顯示訊息
///</summary>
///<param name="msg"></param>
public void showMsg(string msg)
{
{
//線上程裡以安全方式呼叫控制元件
if (receiveMsg.InvokeRequired)
{
MyInvoke _myinvoke = new MyInvoke(showMsg);
receiveMsg.Invoke(_myinvoke, new object[] { msg });
}
else
{
receiveMsg.AppendText(msg);
}
}
}
相關文章
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計
- Linux串列埠程式設計Linux串列埠程式設計
- 沒有真實串列埠裝置時使用"虛擬串列埠驅動"除錯你的串列埠程式碼串列埠除錯
- Android之串列埠程式設計Android串列埠程式設計
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- 基於VPN網路實現串列埠PLC的遠端監控和程式上下載串列埠
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- Socket網路程式設計基礎與實踐:建立高效的網路通訊程式設計
- Socket程式設計基礎程式設計
- Socket程式設計入門(基於Java實現)程式設計Java
- C#獲取本地串列埠裝置C#串列埠
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- socket網路程式設計程式設計
- 網路程式設計-socket程式設計
- 【socket程式設計基礎模板】程式設計
- HUST-計算機網路實驗-socket程式設計計算機網路程式設計
- 基於abp的小小裝置控制系統設計
- 在 macOS 系統中使用串列埠轉藍芽介面卡配置網路裝置Mac串列埠藍芽
- ROS串列埠程式設計學習筆記ROS串列埠程式設計筆記
- ubuntu 為USB串列埠繫結固定的裝置名Ubuntu串列埠
- 網路程式設計之socket程式設計
- python:socket網路程式設計Python程式設計
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- Java實驗——基於GUI的網路通訊程式設計JavaGUI程式設計
- 網路程式設計-Socket通訊程式設計
- 【網路程式設計】socket詳解程式設計
- 基於Atmega8微控制器的串列埠收發程式串列埠
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- Linux Socket C語言網路程式設計:Select SocketLinuxC語言程式設計
- SOCKET程式設計程式設計
- 關於網路框架設計封裝的扯淡框架封裝
- Linux單裝置多路USB串列埠的實現方法介紹Linux串列埠
- Java 網路程式設計 —— Socket 詳解Java程式設計
- go socket、http網路程式設計demoGoHTTP程式設計
- 多種網路裝置的優缺點及網路故障的排除方法
- (3)Tcp Socket程式設計的封裝類 TcpListener/TcpClientTCP程式設計封裝client
- 網路裝置
- 基於WebSocket的modbus通訊(三)- websocket和串列埠Web串列埠