O formulário Winform usa a interface WebApi para realizar o serviço de dados ModbusTCP

Durante o processo de desenvolvimento do computador superior, às vezes é necessário fornecer interfaces de dados para MES ou outros sistemas. Hoje vou compartilhar com você como desenvolver interfaces WebApi em aplicativos de desktop, como o Winform, para fornecer serviços de dados para dispositivos modbus externos. O modelo de comunicação é:

Para melhor demonstrar o cenário da aplicação, este caso toma como exemplo a leitura do dispositivo ModbusTCP, após o desenvolvimento da interface WeiApi, o sistema de terceiros pode ler os dados do dispositivo através desta interface.

O ambiente técnico usado neste exemplo: VS2019, Modbus Slave, WebApi

1. Crie um programa Winform

 

 

 2. Interface de layout da interface do usuário, o layout aqui não é bom e bonito, mas apenas um layout regular

 3. Realize a conexão ModbusTCP

3.1 Instale o software Modbus Slave, que é um software de simulação de equipamento Modbus slave, utilizado para simular um equipamento Modbus Slave, ou seja, o equipamento do computador inferior, como sensor de temperatura, abra o software,

 3.2 Preencha três dados

Definido para ler os dados do registro salvo,

 

 3.3 Nuget procura por modbustcp e o instala, para que a conexão ModbusTCP possa ser realizada posteriormente. 

 3.4, o código do botão "Estabelecer Conexão" é o seguinte:

 Preste atenção para adicionar o objeto de atributo no arquivo program.cs e atribua o objeto escravo à variável global ModbusDevice quando a conexão for bem-sucedida

 

 Execute o programa, clique na conexão, ele mostrará sucesso

 3.5 Código de desconexão

 4. Criar HttpServer

4.1 Primeiro pesquise essas duas bibliotecas através do Nuget, adicione uma referência:

  • Microsoft.AspNet.WebApi.Client

  • Microsoft.AspNet.WebApi.SelfHost

  •  

    4.2 Crie uma classe. HttpServer é principalmente o encapsulamento de HttpSelfHostServer. A classe HttpServer é a seguinte:  Código completo:

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Http;
    using System.Web.Http.SelfHost;
    
    namespace WinFormsApI
    {
        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);
            }
            /// <summary>
            /// 开启服务(异步任务方式)
            /// </summary>
            /// <returns></returns>
            public Task StartHttpServer()
            {
                return server.OpenAsync();
            }
            /// <summary>
            /// 关闭服务(异步任务方式)
            /// </summary>
            /// <returns></returns>
            public Task CloseHttpServer()
            {
                return server.CloseAsync();
            }
        }
    }
    

     

  • 4.3, adicione uma classe HomeController, 

  •  Escreva um método para ler dados em uma área de armazenamento de registro de retenção, o código é o seguinte:
  • using EasyModbus;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Http;
    
    namespace WinFormsApI
    {
        public class HomeController : ApiController
        {
            public static ModbusClient mc;
    
            public HomeController()
            {
                mc = Program.ModbusDevice; //从全局变量中获取指定属性
            }
            /// <summary>
            /// 读保存寄存器
            /// </summary>
            /// <param name="address">寄存器地址</param>
            /// <returns></returns>
            [HttpGet]
            public IHttpActionResult ReadKeepReg(int address)
            {
                int[] res = mc.ReadHoldingRegisters(address, 3);//读取保存寄存器数据,从指定地址address开始,读取3个地址
                string mes = "温度:" + res[0] + ",湿度:" + res[1] + ",光照:"+res[2];
                return Json(mes);
            }
    
        }
    }
    

    5. O código para abrir o botão de serviço

  •  fechar código do botão de serviço

  •  6. Execute o programa

 

 Abra o navegador e digite o endereço de acesso: http://127.0.0.1:6688/api/home/ReadKeepReg?address=0

 Neste formato de endereço, http://127.0.0.1:6688 é o endereço e a porta definidos na caixa de texto no formulário de formulário, api/home/ReadKeepReg é o método ReadKeepReg no controlador de acesso homecontroller, address=0 é o parâmetro endereço no método, 0 é o valor do parâmetro. O valor do parâmetro é 0 porque o número do endereço do dispositivo modbus escravo começa em 0. Finalmente, revise o processo de comunicação:

 

Acho que você gosta

Origin blog.csdn.net/hqwest/article/details/130797598
Recomendado
Clasificación