一文了解基于WebApi实现ModbusTCP数据服务
前言
在上位机开发过程中,有时候会遇到需要提供数据接口给MES或者其他系统,今天跟大家分享一下,如何在Winform等桌面应用程序中,开发WebApi接口,提供对外数据服务。
为了更好地演示应用场景,本案例以读取ModbusTCP设备为例,开发好WeiApi接口后,第三方系统可以通过该接口读取到设备数据。
实现过程
1、创建一个Winform程序,设计UI界面如下,主要包括ModbusTCP的设备IP及端口,以及本地WepApi的Http服务及端口:
2、实现ModbusTCP连接
(1)Nuget搜索xktComm并安装,便于后续可以实现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、创建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、创建Controller创建一个控制器HomeController,以读取保持寄存器为例,编写了一个方法可以读取一个保持寄存器存储区数据,代码如下所示:
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)创建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的数据。
-
一文教你学会WinForm实现管理员权限运行的三种方式
2021-09-14 -
一文了解通信基站能耗综合管理系统
2021-09-14 -
国网诸城市供电公司开发应用手机版微信数据查询“AI机器人”
2021-09-14 -
数据中心能否合理布局?来看曙光的“盘内招”和“盘外招”
2021-09-13 -
一文教你使用LBPH算法理解人脸识别
2021-09-13 -
迄今为止重要的第三季度经济数据
2021-09-13 -
一文了解SATA协议
2021-09-13 -
一文详解Flink知识体系
2021-09-13 -
一文揭秘芯片为什么这么缺
2021-09-10 -
国网江苏电力上线“全碳链”数字服务平台
2021-09-10 -
一文教你使用python+Keras检测年龄和性别
2021-09-09 -
数字化助力能源高效利用
2021-09-09 -
一文学会使用CNN进行人脸关键点识别
2021-09-08 -
一文了解均衡的秘密之FFE
2021-09-08 -
Linux从头学:一文理解【任务管理】和【任务切换】
2021-09-08