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