设备的上位机与客户工厂MES对接,把设备的产量、生产数据、故障信息传到客户服务器已经是很常见的了,部分客户还会从服务器端远程控制设备的启停,工艺参数设置等。这么多年的调试经验总结下来,常用的有三种方法:DLL 调用(近距离快)、Web Service和HttpClient(跨网能用)。下面来给大家详细讲一下。
一、DLL 调用:车间内网高频交互用这个
1,添加DLL
先准备好我们的DLL,这里我们随便寻找一个测试DLL。
项目“OmronFins”右键-->添加-->引用-->找到我们的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):右边输入框可以输入客户提供给我们的服务器地址了。
2,获取URL
这里为了让大家更方便的体现,使用一个全网有效的URL,因为我们练习时不一定在客户现场。
天气预报查询URL:
“http://www.webxml.com.cn/WebServices/WeatherWebService.asmx“
以下为搜索成功显示,点击添加引用。
等待添加完成显示”Web References“-->cn.com.webxml.www:
3,编写代码
我们在界面的“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]}\r\n" + $"天气状况:{weatherInfo[10]}\r\n" + $"温度:{weatherInfo[5]}\r\n" + $"风向:{weatherInfo[7]}\r\n" + $"湿度:{weatherInfo[7]}\r\n" + $"今日提示:{weatherInfo[8]}"; textBoxLog.Text = result;
}
else
{ textBoxLog.Text = "获取天气信息失败,可能是城市名称错误或接口返回格式变化";
}
}
catch (TimeoutException)
{ textBoxLog.Text = "错误:请求超时,可能网络较慢";
}
catch (Exception ex)
{ textBoxLog.Text = $"查询失败:{ex.Message}"; }
}
点击“Web接口”,我们就可以获取到具体信息啦。
以上是通过天气预报的接口模拟我们工厂里面的MES接口,使用WebService的方式进行连接。
三、使用HttpClient的方式(跨网、低频次交互,要求灵活性强用这个)
上WebService同样,这里为了让大家更方便的体现,使用一个全网有效的URL,因为我们练习时不一定在客户现场。 1,获取API接口及key
我们来测试下获取上海的天气预报。
第一步:打开聚合数据官网:https://www.juhe.cn,注册账号(用手机号就行,不用企业认证);
按照下面步骤一步一步完成即可。
搜索“天气预报”
申请
一步一步注册和认证,最终申请成功
我的key(6d2465d2a144d3b8d17e0b050e00fbbd)重金购的API,免费贡献出来看能不能用。
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系统,保存到客户服务器里面。以上是常用的三种方式,大家如果遇到奇怪的错误,评论区问我,咱们一起琢磨!
用得上的话大家帮点点关注收藏一下。
以下是一些相关的技术分享文章,感兴趣的可以看看: