一文了解基于WebApi實現ModbusTCP數據服務
前言
在上位機開發(fā)過程中,有時候會遇到需要提供數據接口給MES或者其他系統(tǒng),今天跟大家分享一下,如何在Winform等桌面應用程序中,開發(fā)WebApi接口,提供對外數據服務。
為了更好地演示應用場景,本案例以讀取ModbusTCP設備為例,開發(fā)好WeiApi接口后,第三方系統(tǒng)可以通過該接口讀取到設備數據。
實現過程
1、創(chuàng)建一個Winform程序,設計UI界面如下,主要包括ModbusTCP的設備IP及端口,以及本地WepApi的Http服務及端口:
2、實現ModbusTCP連接
(1)Nuget搜索xktComm并安裝,便于后續(xù)可以實現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("設備連接成功");
}
else
{
MessageBox.Show("設備連接失敗");
}
}
(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ū)數據,代碼如下所示:
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服務
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("開始服務成功");
}
catch (Exception ex)
{
MessageBox.Show("開始服務失敗:"+ex.Message);
}
}
(3)停止HttpServer服務
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("停止服務失敗:" + ex.Message);
}
}
功能測試
首先用Modbus Slave開一個仿真:
運行上位機軟件后,連接設備并開啟服務:
打開瀏覽器,輸入 http://127.0.0.1:2000/api/home/ReadKeepReg?address=0,即可獲取到40001的數據。

請輸入評論內容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-9.1立即下載>> 【限時下載】ADI中國三十周年感恩回饋助力企業(yè)升級!
-
即日-9.16點擊進入 >> 【限時福利】TE 2025國際物聯網展·深圳站
-
10月23日立即報名>> Works With 開發(fā)者大會深圳站
-
10月24日立即參評>> 【評選】維科杯·OFweek 2025(第十屆)物聯網行業(yè)年度評選
-
11月27日立即報名>> 【工程師系列】汽車電子技術在線大會
-
12月18日立即報名>> 【線下會議】OFweek 2025(第十屆)物聯網產業(yè)大會
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進算力新選擇 | 2025華為算力場景發(fā)布會暨北京xPN伙伴大會成功舉辦
- 3 宇樹機器人撞人事件的深度剖析:六維力傳感器如何成為人機安全的關鍵屏障
- 4 清華跑出具身智能獨角獸:給機器人安上眼睛和大腦,融資近20億
- 5 特朗普要求英特爾首位華人 CEO 辭職
- 6 踢館大廠和微軟,剖析WPS靈犀的AI實用主義
- 7 騰訊 Q2 財報亮眼:AI 已成第二增長曲線
- 8 谷歌吹響AI沖鋒號,AI還有哪些機會
- 9 蘋果把身家押在Siri上:一場輸不起的自我革命
- 10 共探合作新機遇!江門市新會區(qū)(深圳)“AI + 機器人” 產業(yè)對接會成功舉辦