一文了解基于WebApi實(shí)現(xiàn)ModbusTCP數(shù)據(jù)服務(wù)
前言
在上位機(jī)開發(fā)過程中,有時候會遇到需要提供數(shù)據(jù)接口給MES或者其他系統(tǒng),今天跟大家分享一下,如何在Winform等桌面應(yīng)用程序中,開發(fā)WebApi接口,提供對外數(shù)據(jù)服務(wù)。
為了更好地演示應(yīng)用場景,本案例以讀取ModbusTCP設(shè)備為例,開發(fā)好WeiApi接口后,第三方系統(tǒng)可以通過該接口讀取到設(shè)備數(shù)據(jù)。
實(shí)現(xiàn)過程
1、創(chuàng)建一個Winform程序,設(shè)計UI界面如下,主要包括ModbusTCP的設(shè)備IP及端口,以及本地WepApi的Http服務(wù)及端口:
2、實(shí)現(xiàn)ModbusTCP連接
(1)Nuget搜索xktComm并安裝,便于后續(xù)可以實(shí)現(xiàn)ModbusTCP連接
(2)建立ModbusTCP連接
private void btn_Connect_Click(object sender, EventArgs e)
{
if (CommonMethods.modbusTcp.Connect(this.txt_DevIp.Text, this.txt_DevPort.Text))
{
MessageBox.Show("設(shè)備連接成功");
}
else
{
MessageBox.Show("設(shè)備連接失敗");
}
}
(3)斷開ModbusTCP連接
private void btn_DisConn_Click(object sender, EventArgs e)
{
CommonMethods.modbusTcp.DisConnect();
}
3、創(chuàng)建HttpServer
首先通過Nuget搜索這兩個庫,添加一下引用:
Microsoft.AspNet.WebApi.ClientMicrosoft.AspNet.WebApi.SelfHost
HttpServer主要是對HttpSelfHostServer的封裝,HttpServer類如下:
public class HttpServer
{
private HttpSelfHostServer server;
public HttpServer(string ip, int port)
{
var config = new HttpSelfHostConfiguration($"http://{ip}:{port}");
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}");
server = new HttpSelfHostServer(config);
}
public Task StartHttpServer()
{
return server.OpenAsync();
}
public Task CloseHttpServer()
{
return server.CloseAsync();
}
}
4、創(chuàng)建Controller創(chuàng)建一個控制器HomeController,以讀取保持寄存器為例,編寫了一個方法可以讀取一個保持寄存器存儲區(qū)數(shù)據(jù),代碼如下所示:
public class HomeController : ApiController
{
[HttpGet]
public IHttpActionResult ReadKeepReg(int address)
{
byte[] res = CommonMethods.modbusTcp.ReadKeepReg(address, 1);
return Json(res[0]*256+res[1]);
}
}
5、開啟HttpServer
(1)創(chuàng)建HttpServer對象
private HttpServer httpServer = null;
(2)開啟HttpServer服務(wù)
private async void btn_Start_Click(object sender, EventArgs e)
{
try
{
httpServer = new HttpServer(this.txt_Ip.Text, int.Parse(this.txt_Port.Text));
await httpServer.StartHttpServer();
MessageBox.Show("開始服務(wù)成功");
}
catch (Exception ex)
{
MessageBox.Show("開始服務(wù)失敗:"+ex.Message);
}
}
(3)停止HttpServer服務(wù)
private async void btn_Stop_Click(object sender, EventArgs e)
{
try
{
httpServer = new HttpServer(this.txt_Ip.Text, int.Parse(this.txt_Port.Text));
await httpServer.CloseHttpServer();
}
catch (Exception ex)
{
MessageBox.Show("停止服務(wù)失敗:" + ex.Message);
}
}
功能測試
首先用Modbus Slave開一個仿真:
運(yùn)行上位機(jī)軟件后,連接設(shè)備并開啟服務(wù):
打開瀏覽器,輸入 http://127.0.0.1:2000/api/home/ReadKeepReg?address=0,即可獲取到40001的數(shù)據(jù)。

發(fā)表評論
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
8月5日立即報名>> 【在線會議】CAE優(yōu)化設(shè)計:醫(yī)療器械設(shè)計的應(yīng)用案例與方案解析
-
8月14日立即報名>> 【在線研討會】解析安森美(onsemi)高精度與超低功耗CGM系統(tǒng)解決方案
-
精彩回顧立即查看>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
-
精彩回顧立即查看>> 7月30日- 8月1日 2025全數(shù)會工業(yè)芯片與傳感儀表展
-
精彩回顧立即查看>> 全數(shù)會2025(第六屆)機(jī)器人及智能工廠展
-
精彩回顧立即查看>> OFweek 2025 具身機(jī)器人動力電池技術(shù)應(yīng)用大會
推薦專題
- 1 AI產(chǎn)業(yè)的新高度!英偉達(dá)成為全球首家市值破4萬億美元的公司
- 2 傳魏建軍與賈躍亭合作,長城汽車出海美國
- 3 一文讀懂:到底什么是 “具身智能” ?
- 4 黃仁勛:與雷軍長期合作,共探AI智駕
- 5 具身智能泡沫爭議下,華映資本尋找「穿越周期者」
- 6 中國平安們欲靠AI守“陣地”
- 7 官宣:智元機(jī)器人借殼上市,A股人形機(jī)器人第一股!
- 8 華為讓渡“三界”銷售主導(dǎo)權(quán),智界高管:終于能全力奔跑了
- 9 借仿生手實(shí)現(xiàn)突圍,國產(chǎn)靈巧手破局“不可能三角”
- 10 DeepSeek R2加持,中國AI與芯片產(chǎn)業(yè)迎來新一輪協(xié)同進(jìn)化