三分钟掌握 WinForm 上位机对接 MES 系统的三种主流方法(附代码详解)

196 阅读4分钟

前言

在智能制造体系中,设备上位机与客户工厂制造执行系统(MES)之间的数据交互已成为标准配置。通过这种对接,不仅可以将设备的产量、生产状态、故障信息等实时上传至客户服务器,部分高级应用场景甚至支持从服务器端远程控制设备启停、调整工艺参数等操作。经过多年项目调试经验积累,我们总结出三种主流对接方式:DLL 调用Web ServiceHttpClient。本文将结合图文和代码示例,详细讲解这三种方法的使用场景、配置步骤及实现逻辑。

一、DLL 调用:车间内网高频交互首选

DLL(动态链接库)调用适用于局域网内、对通信频率和响应速度要求较高的场景,如产线设备与本地MES系统的实时数据交互。

1、添加 DLL 引用

首先准备好目标 DLL 文件。在 Visual Studio 项目中右键点击"引用" → "添加引用" → 浏览并选择 DLL 文件:

双击已添加的 DLL,可查看其暴露的类与方法:

提示:若添加后报错,请检查是否缺少依赖 DLL,并将其全部放入项目的 bin/Debug 目录下(与 exe 同级)。

2、编写调用代码

假设 DLL 中包含 LoadData 类,调用方式如下:

 BIS.Communication.TestingBLL testingBll;//定义变量
private void button3_Click(object sender, EventArgs e)
{
    testingBll = new BIS.Communication.TestingBLL();//实例化
    testingBll.StrBarcode = "A123456789";//赋值
    //.......一系列操作

}

不同 DLL 封装的类名、方法名各异,通常客户会提供接口文档,开发按规范调用即可。

二、Web Service:跨网络、低频次交互的理想选择

Web Service 基于 SOAP 协议,适合跨网络、安全性要求较高但交互频率不高的场景,如远程上报设备状态。

1、添加 Web Service 引用

在项目中右键 → "添加" → "服务引用" → 点击"高级" → "添加 Web 引用":

在 URL 输入框中填入客户提供的 Web Service 地址:

为便于演示,本文使用公开的天气预报 Web Service:

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

添加成功后,项目中将生成 Web References

2、编写调用代码

在按钮点击事件中调用 Web Service:

private void button4_Click(object sender, EventArgs e)
{
    try
    {
        cn.com.webxml.www.WeatherWebService _weatherClient = new cn.com.webxml.www.WeatherWebService();
       string[] weatherInfo =  _weatherClient.getWeatherbyCityName("上海");

        if (weatherInfo != null && weatherInfo.Length > 8)
        {
            // 整理显示内容
            string result = $"城市:{weatherInfo[1]}\r\n" +
                           $"更新时间:{weatherInfo[4]}rn" +
                           $"天气状况:{weatherInfo[10]}\r\n" +
                           $"温度:{weatherInfo[5]}rn" +
                           $"风向:{weatherInfo[7]}\r\n" +
                           $"湿度:{weatherInfo[7]}rn" +
                           $"今日提示:{weatherInfo[8]}";
            textBoxLog.Text = result;
        }
        else
        {
            textBoxLog.Text = "获取天气信息失败,可能是城市名称错误或接口返回格式变化";
        }
    }
    catch (TimeoutException)
    {
        textBoxLog.Text = "错误:请求超时,可能网络较慢";
    }
    catch (Exception ex)
    {
        textBoxLog.Text = $"查询失败:{ex.Message}";
    }
}

运行效果如下:

注:此处以天气接口模拟 MES 接口,实际项目中替换为客户提供的地址即可。

三、HttpClient 方式:高灵活性的现代 HTTP 接口方案

HttpClient 适用于基于 RESTful API 的现代系统对接,尤其适合需要灵活处理 JSON 数据、支持 OAuth 认证等复杂场景。

1、获取 API 接口与 Key

以聚合数据平台为例,注册账号后搜索"天气预报"并申请 API:

完成申请后获取 API Key(示例 Key 已提供):

示例 Key:6d2465d2a144d3b8d17e0b050e00fbbd(仅供学习测试)

2、编写 HttpClient 调用代码

private void button5_Click(object sender, EventArgs e)
{
    string url = "http://v.juhe.cn/weather/index";
    string apiKey = "6d2465d2a144d3b8d17e0b050e00fbbd";

    Dictionary<string, string> data = new Dictionary<string, string>();
    data.Add("key", apiKey);
    data.Add("cityname", "上海");
    data.Add("dtype", "json");
    data.Add("format", "");

    using (System.Net.WebClient client = new WebClient())
    {
        // 关键:指定UTF-8编码,匹配API返回的编码
        client.Encoding = System.Text.Encoding.UTF8;

        string fullUrl = url + "?" + string.Join("&", data.Select(x => x.Key + "=" + x.Value));

        try
        {
            string responseContent = client.DownloadString(fullUrl);
            dynamic responseData = JsonConvert.DeserializeObject(responseContent);
            textBoxLog.Text = responseContent;
            if (responseData != null)
            {
                Console.WriteLine("Return Code: " + responseData["error_code"]);
                Console.WriteLine("Return Message: " + responseData["reason"]);
            }
            else
            {
                Console.WriteLine("json解析异常!");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("请检查其它错误" + ex.Message);
        }
    }
}

调用结果如下:

注意:需引用 Newtonsoft.Json 库进行 JSON 反序列化。

总结

无论是通过 DLL 调用实现车间内网的高速通信,还是借助 Web Service 完成跨网络的标准化交互,亦或是利用 HttpClient 灵活对接现代 REST API,这三种方式各有优势,适用于不同场景:

  • DLL 调用:低延迟、高频率,适合本地部署;

  • Web Service:协议成熟、兼容性强,适合传统企业系统;

  • HttpClient:轻量灵活、支持 JSON,适合云平台和微服务架构。

最终目标一致:将设备数据可靠、高效地传输至客户 MES 系统,并支持必要的远程控制功能。在实际项目中,应根据网络环境、安全策略、客户技术栈等因素综合选择。如遇问题,欢迎交流探讨!

关键词

DLL调用、Web Service、HttpClient、MES对接、设备通信、上位机开发、工业自动化、API集成、天气预报接口、聚合数据

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

mp.weixin.qq.com/s/FlzDJGW90ivv3sLSj-zUOQ