前言
工业自动化场景中,设备的上位机与客户工厂MES(制造执行系统)对接十分常见。
通过这种对接,设备能够将产量、生产数据、故障信息等关键信息传输至客户服务器。部分客户还具备从服务器端远程控制设备启停、设置工艺参数等需求。
经过多年调试经验的积累,总结出三种常用的方法:DLL调用(近距离快)、Web Service和HttpClient(跨网能用)。本文将详细介绍这三种方法的具体实现过程。
正文
一、DLL调用:车间内网高频交互用这个
1、添加DLL
首先准备好所需的DLL文件,以项目"OmronFins"为例,右键点击项目,选择"添加"->"引用",在弹出的界面中找到并选中目标DLL,点击确定。
操作如下图所示:
双击添加的DLL,即可查看该DLL包含的方法:
若添加完成后出现报错,需检查依赖DLL是否缺失,将所有依赖DLL放置在项目的bin/Debug目录中(与exe文件放在一起)。
2、编写DLL调用代码
假设该DLL包含LoadData类,示例代码如下:
BIS.Communication.TestingBLL testingBll;//定义变量
private void button3_Click(object sender, EventArgs e)
{
testingBll = new BIS.Communication.TestingBLL();//实例化
testingBll.StrBarcode = "A123456789";//赋值
//.......一系列操作
}
不同的封装类,其函数名和使用方法可能不同,通常客户会提供相关文档进行说明,开发者可参考文档进行调用。
Web Service:跨网、低频次交互用这个
1、添加引用
在项目"OmronFins"中,右键点击项目,选择"引用"->"服务引用",弹出对话框后,不要在引用输入框中输入内容,而是点击"高级"->"添加Web引用"。
操作如下图所示:
在弹出的界面中,URL(U)右边的输入框可输入客户提供的服务器地址:
- 获取URL
为方便演示,使用一个全网有效的URL,以天气预报查询URL为例:"www.webxml.com.cn/WebServices…
搜索成功后,点击添加引用:
添加完成后,显示"Web References"->cn.com.webxml.www:
- 编写代码
在界面的"Web接口"按钮上添加事件,示例代码如下:
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}";
}
}
点击"Web接口"按钮,即可获取具体信息:
以上通过天气预报接口模拟了工厂MES接口使用WebService进行连接的过程。
使用HttpClient的方式(跨网、低频次交互,要求灵活性强用这个)
1、获取API接口及key
以测试获取上海的天气预报为例,首先打开聚合数据官网:www.juhe.cn,使用手机号注册账号(无需企业认证)。
按照以下步骤搜索"天气预报":
申请相关服务:
完成注册和认证后,最终申请成功:
这里提供一个示例API key(6d2465d2a144d3b8d17e0b050e00fbbd),供测试使用。
2、编写代码
在"http接口"按钮上添加点击事件,示例代码如下:
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);
}
}
}
点击"http接口"按钮,即可获取具体信息:
总结
无论采用哪种方式,最终目的都是将数据和信息传输至客户的MES系统,并保存到客户服务器中。
以上介绍的三种方法(DLL调用、Web Service、HttpClient)是常用的对接方式。
在实际应用中,如果遇到问题,欢迎在评论区提问,大家一起探讨解决。
关键词
设备上位机、MES对接、DLL调用、Web Service、HttpClient、DLL调用、Web Service、HttpClient、PLC数据采集、MES对接、WinForm、策略模式、工厂模式、模块化架构
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!
来源:mp.weixin.qq.com/s/FlzDJGW90ivv3sLSj-zUOQ