上位机与下位机网口无线通信问题——基于MATLAB、C#两种方案实现

[复制链接]
查看49931 | 回复0 | 2024-12-24 16:17:36 | 显示全部楼层 |阅读模式
首先明确三个概念

上位机:是指直接发出操控命令的设备,例如PC端界面,工控机触屏,是控制者;

下位机:按照指令驱动底层硬件的设备,例如单片机、PLC,是被控制者;

网口无线通信:指遵守IEEE802.11(局域网WiFi)或802.3(接入运营商2/3/4G网络)标准进行通信的方式

使用者通过HMI(Human Machine Interface)与上位机进行交互,发出控制指令,下位机接收到控制指令(如控制电机、读取传感器采集值、获取设备当前状态),解析指令做出对应响应,并将响应状态返回至上位机。网口无线通信作为众多无线通信方式中的一种,具有响应快、传输量大、传输距离远等优点,缺点在于模块成本高、功耗大。

在以前项目里曾使用过红外、NRF24L01、Zigbee、射频433、4G、WiFi等多种无线通信方式,但是对于远距离通信(>10km),比如研究生期间做海浪数据采集实验,实验采集器固定在山东威海的一块海岸礁石上,测量一个月数据,当然人不能一直在海边24小时值守,得回到天津。首先实验测的历史数据必须能够在采集器单板上存储,同时考虑到实验环境过于恶劣,单板极易损坏,因此实验采集的实时数据必须要传回。那么这六七百公里距离,除了运营商网络,其他无线通信方式都不灵了(当时考虑过长波电台,但是受无线电管委管制)。

当下比较火的NB-IOT技术,因为构建于窝蜂网络,必须依靠于运营商网络资源,目前中国移动有自己的OneNET物联网平台,所有的数据交互必须通过该平台。一般企业级客户从数据隐私方面考虑是不会允许第三方染指的,所以预感私有组网的LoRa技术会更有市场。当然,一些涉及重要、敏感信息的远距离传输还是得依靠专网,有线的以太网专网或者无线的4G专网SIM卡,本次实验数据即采用4G专网传输。

因此,在下位机端,就需要下位机实现与以太网或者4G DTU的连接。目前嵌入式平台普遍具备以太网接口,例如STM32系列自带以太网模块,通过RMII接口连接PHY芯片LAN8720A可实现以太网通信;市场上成熟的4G DTU模块都有串口接入方式,嵌入式平台只用配置一个USART接口外接232芯片即可实现连接。

在上位机端,PC端必须通过网口才能接入以太网或者4G DSC模块,自己曾分别用Matlab和C#两种方式实现上位机界面对PC端网口控制,上收下发数据与命令,下面分别介绍。

【1】Matlab

选择采用Matlab来做GUI界面,在后台实现网口通信,其原因在于:当设计系统需要对采集的大量多模态数据做实时处理(清洗、插值补齐、滤波)、数据融合、预测等处理时,计算能力强大的Matlab无疑是最合适的。例如,实验采集到的波浪数据,需要后续对波浪进行FIR滤波,能量谱分析,神经网络预测等,这在Matlab工具箱里调用几条语句就能搞定,方便实用。

在用Matlab读取网口时数据时,需要对网口做以下配置。
function jiawangguanshiyan1_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;try                    %设置网关网口配置  handles.tcpipClient = tcpip('192.168.11.254',8000,...    'NetworkRole','Client');%设置对象属性set(handles.tcpipClient,'OutputBufferSize',1024); %设置缓存长度set(handles.tcpipClient,'InputBufferSize',50000); %设置缓存长度  set(handles.tcpipClient,'Timeout',10); %设置连接时间  set(handles.tcpipClient,'TimerPeriod',10);%设置连接周期set(handles.tcpipClient, 'TimerFcn', {@huidiao,handles}); %定义TimerPeriod事件回调函数  set(handles.tcpipClient,'BytesAvailableFcnMode','byte');%设置网口BytesAvailableFcnMode属性  set(handles.tcpipClient,'BytesAvailableFcnCount',1);  fopen(handles.tcpipClient); %打开连接对象catch         %进行出错处理  errmsg = lasterr;  errordlg(['不能打开网口:  ',char(10),'请检查网络连接'],'网口打开错误');  rethrow(lasterror);endnBytes = get(handles.tcpipClient,'BytesAvailable');%数据程序读取放在这里,判断非空后执行disp(nBytes)

        

【2】C#

目前编程上位机界面使用最多的还是C#语言,原因在于:可以对windows底层操作系统的API进行直接调用,.NET控件类型丰富,同时在数据库与其他基于windows平台开发的软件(例如ArcGIS)数据交互方面更比Matlab更加擅长。可以生成exe可执行文件,方便移植使用,GUI界面也很容易做的更美观人性化。

在VS2010开发环境下读取网口时数据时,本机作为server端,远程的下位机作为client端,程序如下所示
publicpartialclassUDPserverForm : Form  {    private UdpClient udpserver;//UDP服务器    private Thread udpListenThread;//UDP监听线程    private IPEndPoint remoteIpAndPort;//远程IP地址和端口    publicUDPserverForm()    {    InitializeComponent();    udpListenThread = new Thread(new ThreadStart(udpListen));//创建监听线程    udpListenThread.IsBackground = true;//设为后台线程    udpListenThread.Start();//启动监听线程for (int i = 0; i < Dns.GetHostEntry(Dns.GetHostName()).AddressList.Length; i++)  //显示本机内网IPv4地址 win7系统            {if (Dns.GetHostEntry(Dns.GetHostName()).AddressList.AddressFamily.ToString().Equals("InterNetwork"))                {this.textBoxHostIp.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList.ToString(); //↓ 获取本机的IPv4地址,不知道怎么获取,只找到了这个办法break;                 }               }      }    privatevoidudpListen()//监听,线程的实际代码    {while (true)//循环,端口不可用自动加1       {try         {         udpserver = new UdpClient(int.Parse(this.textBoxPortNumber.Text));//创建UDP服务器,绑定要监听的端口          break;           }       catch //发生异常时的处理代码          {          this.textBoxPortNumber.Text = (int.Parse(this.textBoxPortNumber.Text) + i++).ToString();//就是将预设的端口号加1          }        }       while (true)         {           receivedStr = udpserver.Receive(ref remoteIpAndPort);//读取指定的远程主机的数据           try             {            //后续处理代码             }          }      }

【3】

当然,C#与Matlab可以进行混合编程(将Matalb程序封装成dll文件在VS中进行调用),这样可以综合两者优势,但是对于硬件资源、参数传递与数据类型转换、个人编程能力是个极大考验。

【实际选择】
在现场实验前,决定充分利用STM32F407的硬件资源,选择在下位机实现数据采集、处理、融合、预测功能,上位机仅负责数据接收并实时保存。因此,最终选择C#编程一个简单的网口数据接收GUI界面,后台程序中将数据以天为单位自动保存为txt格式文件,方便以后调用。



现场实验中,采集器前端放置在海水里,没到一个月,就由于拍岸浪的冲击力和海水腐蚀共同作用而导致仪器被破坏,数据丢失,未达到实验预期目标。。。。不过就论文而言数据量已然够了。。。。。。

下一篇将介绍STM32F4上神经网络的移植与运用  或  Zigbee组网实战与Z-stack协议分析。

本帖子中包含更多资源

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

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

本版积分规则