xml地图|网站地图|网站标签 [设为首页] [加入收藏]
PHP数组的基础知识,获取系统的网络状态与无线
分类:编程

       使用Designer IDE配置并测试好系统后,可以选择【启动控制台】,作为运行时环境,效果如下图:

一台电脑,有时通过有线网连接网络(调制解调器/局域网),如有网卡也可连接wifi。
那么如何获取WLAN是否连接,和相应的信号强度呢?

图片 1

图片 2

 获取电脑连网状态

通过IsNetworkAlive可获取当前环境是否已经连接网络。详见《C# 获取电脑的网络连接状态》

流程:网络是否连接->是否有无线网连接->获取无线网状态(信号强度)->返回网络状态

 1 [DllImport("sensapi.dll", SetLastError = true)]
 2 private static extern bool IsNetworkAlive(out int connectionDescription);
 3 public NetworkStatus GetNetworkStatusByNetworkAlive()
 4 {
 5     var networkStatus = NetworkStatus.InternetWithError;
 6 
 7     int flags = 0;
 8     var isNetworkAlive = IsNetworkAlive(out flags);
 9 
10     int errCode = Marshal.GetLastWin32Error();
11     if (errCode != 0)
12     {
13         throw new InvalidOperationException($"通过{nameof(IsNetworkAlive)}非托管DLL,获取网络状态时,遇到异常");
14     }
15     if (isNetworkAlive)
16     {
17         // 获取WLAN网络状态
18         var wlanStatus = GetWlanStatus();
19         if (isNetworkAlive && wlanStatus == NetworkStatus.WifiWithErro)
20         {
21             networkStatus = NetworkStatus.Internet;
22         }
23         else
24         {
25             networkStatus = wlanStatus;
26         }
27     }
28     return networkStatus;
29 }

 

1.3    非标准协议的使用和测试

就以下俩点:

图片 3

网络状态枚举值

暂时只定义了有线网和无线网的状态 

 1     /// <summary>
 2     /// 网络状态
 3     /// </summary>
 4     public enum NetworkStatus
 5     {
 6         Internet,
 7         InternetWithError,
 8         WifiWithErro,
 9         WifiWithOneBar,
10         WifiWithTwoBars,
11         WifiWithThreeBars,
12         WifiWithFourBars,
13     }

那么,具体是否有线/还是无线网络,如何判断?见下面~

 

     自行百度下载,主要用于模拟使用Modbus协议的终端设备和传感器。不明白Modbus协议的朋友们,先补补课。实现运行效果,如下图:

获取无线网络的信号强度

获取WLAN的名称与信号强度

无线网的信息,可以通过第三方开源ManagedWifi来获取。

ManagedWifi.Dll也可以从我的云盘下载: 密码:2d2o

下载后引用到项目中

  1. WlanClient wlanClient = new WlanClient();

  2. 循环foreach(WlanClient.WlanInterface wlanIface in wlanClient.Interfaces)

  3. Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0);

值得注意的是,

  • WlanClient只在有网卡的系统中能初始化--所以如果WlanClient不能初始化,且IsNetworkAlive返回true,则意味着当前是有线连接网线
  • WlanInterfacer的GetAvailableNetworkList方法,获取的是附近wifi热点列表,和任务栏下热点列表的顺序无关。
  • WlanAvailableNetwork的wlanSignalQuality信号强度,100以内,如要转换成信号格数,需要整除25
  • profileName,对已连接的热点profileName显示完整,未连接的热点profileName为empty.

获取无线网连接状态:

 1 private NetworkStatus GetWlanStatus()
 2 {
 3     var wlanStatus = NetworkStatus.WifiWithErro;
 4     try
 5     {
 6         WlanClient wlanClient = new WlanClient();
 7 
 8         foreach (WlanClient.WlanInterface wlanIface in wlanClient.Interfaces)
 9         {
10             if (wlanIface.InterfaceState == Wlan.WlanInterfaceState.Connected && wlanIface.CurrentConnection.isState == Wlan.WlanInterfaceState.Connected)
11             {
12                 Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0);
13                 foreach (var network in networks)
14                 {
15                     if (network.profileName == wlanIface.CurrentConnection.profileName
16                         && (int)network.flags == (int)(Wlan.WlanAvailableNetworkFlags.Connected | Wlan.WlanAvailableNetworkFlags.HasProfile))
17                     {
18                         switch (network.wlanSignalQuality / 25)
19                         {
20                             case 0:
21                                 wlanStatus = NetworkStatus.WifiWithOneBar;
22                                 break;
23                             case 1:
24                                 wlanStatus = NetworkStatus.WifiWithTwoBars;
25                                 break;
26                             case 2:
27                                 wlanStatus = NetworkStatus.WifiWithThreeBars;
28                                 break;
29                             default:
30                                 wlanStatus = NetworkStatus.WifiWithFourBars;
31                                 break;
32                         }
33                         break;
34                     }
35                 }
36                 break;
37             }
38         }
39     }
40     catch (Exception e)
41     {
42     }
43     return wlanStatus;
44 }

 

关键字:网络连接状态NetworkStatus,无线网络强度(格数),ManagedWifi,IsNetworkAlive,GetLastError

1.标准Modbus和非标准协议的使用、测试以及驱动开发... 2

  • 获取电脑连网状态
  • 获取无线网络的信号强度

     步骤一:接下来对Modbus Slave进行设置,选择【Setup】->【Slave Definition】, 对从机地址、功能码、寄存器开始地址和数量进行设置,如下图:

3.C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)

          读取第一个寄存器数据的设置,如下图:

物联网&集成技术 QQ群:54256083 

图片 4

        非标准协议的使用和测试与Modbus的操作过程一致,但是选择增加设备驱动和配置增加监测点要根据实际情况而定。该驱动的协议,参见:《如开发一套设备驱动,同时支持串口和网络通讯》发送和接收协议章节。

       有很多设备或传感器号称是Modbus协议,但是实际中对标准的Modbus协议进行修改,这种情况很多,本质上自定义协议。

(1)下载Modbus Slave,并进行设置

ServerSuperIO Designer IDE v4.2版本更新内容:

  • style="font-size: 16px;">增加ServerSuperIO.Host运行程序,可以使用IDE进行测试,Host为运行环境。
  • style="font-size: 16px;">针对设备驱动增加导入监测点功能。
  • style="font-size: 16px;">修复OPC客户端配置后关闭窗体慢的情况。
  • 修改保存Tag值为object对象。
  • 优化其他代码。

图片 5

         步骤一:增加设备驱动,如下图:

2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案

     步骤二:下载Virtual Serial Port Driver虚拟串口软件,实现COM1与COM2的虚拟连接。如下图:

           至此,模拟数据源终端设置完毕。

       标准Modbus设备驱动事例下载:。

     步骤五:选择刚才增加的设备驱动,并且在最右边区域选择【增加监测点】,对应Modbus Slave进行设置和配置,读取两个监测点的数据信息。

(2)部署Designer IDE,并进行设置,实现与Modbus Slave通讯

本文由澳门新葡亰手机版发布于编程,转载请注明出处:PHP数组的基础知识,获取系统的网络状态与无线

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文