『7x24小时有问必答』
    设备的上位机与客户工厂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<stringstring> data = new Dictionary<stringstring>();
            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系统,保存到客户服务器里面。以上是常用的三种方式,大家如果遇到奇怪的错误,评论区问我,咱们一起琢磨!

用得上的话大家帮点点关注收藏一下。

以下是一些相关的技术分享文章,感兴趣的可以看看:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码