IOT2040无线连接界面化设计

一、功能简述

  1. 此节点通过与SIMATIC IOT2040工业物联网智能网关中服务器的数据交互,完成对工业物联网智能网关(以下均简称为盒子)无线模块网络信息的读取与修改;
  2. 用户可在界面中(通过与之前网络参数节点的结合)可选择不同网卡以修改或读取相应的网络参数;
  3. 用户可在无线连接界面中输入wifi名称及密码进行连接,连接成功后可选择使用默认ip或自定义ip;
  4. 若出现无线网卡连接异常或连接wifi时出现输入名称或密码错误时进行提示。

二、功能实现

1.UML图

客户端 服务端 盒子 输入服务端地址 点击“获取服务端数据” 发送请求(读取无线网卡信息) 利用子进程调用系统命令 调用脚本 判断无线网卡连接状态 传输连接状态 响应请求(返回无线网卡信息:异常) 提示重新连接 响应请求(返回无线网卡信息:正常) 显示wifi连接界面 alt [无线网卡连接异常] [无线网卡连接正常] 配置wifi连接信息 点击连接wifi 发送请求(发送连接wifi信息) 利用子进程调用系统脚本 修改配置文件 重启无线网卡 判断ifconfig 连接wifi状态 传递wifi连接异常信息 返回wifi连接异常信息 提示输入错误,需重新连接 传递网络参数及连接成功信息 返回wifi连接成功信息 及网络参数 显示wifi连接成功界面 及网络参数 alt [wifi连接异常] [wifi连接正常] 输入新IP 点击修改IP 发送请求(修改IP信息) 利用子进程调用系统脚本 执行脚本 修改IP 修改ip异常信息 返回修改ip失败信息 提示修改失败,需重新输入 修改ip正常信息 返回修改ip成功信息 提示修改成功 alt [ip修改异常] [ip修改正常] 客户端 服务端 盒子

2.实现方式

  1. 非无线模块中修改网络参数部分均在上一篇文章中说明,在这里大同小异,不再赘述;
  2. 无线模块中判断无线网卡连接状况功能通过执行系统命令ifconfig判断其中是否存在wlan0字符串实现;
  3. 无线模块中wifi连接功能通过执行盒子中事先编辑好的脚本,修改系统中的wpa_supplicant.conf配置文件后重启网卡实现;
  4. 无线模块中修改网络参数功能通过修改系统中的interfaces配置文件后重启网卡实现。

三、服务端

服务端通过利用子进程来调用系统命令或者脚本文件,结合脚本文件中的内容达到相应的功能。相应基础知识内容在上一篇有所详细说明,此处不再赘述。

1.功能设计

服务端通过与客户端的数据交互,除了有之前读取网卡信息和修改interfaces文件的功能,对于无线网卡模块新增了许多功能。

  • 判断无线网卡模块安装状态功能:通过脚本判断ifconfig中是否存在wlan0部分的信息,若不存在则说明无线网卡安装异常;
  • 连接wifi功能:通过脚本修改配置文件wpa_supplicant.conf中的wifi信息部分,重启网卡后即可连接wifi;
  • 判断wifi连接状态功能:通过脚本判断ifconfig中wlan0部分是否有ip,若没有分配ip则说明无线网卡连接wifi异常;
  • 读取无线网卡ip信息功能:通过正则提取出ifconfigroute中的无线网卡ip和Mac信息;
  • 修改无线网卡ip信息功能:通过脚本修改interfaces文件中的相关信息达到修改无线网卡ip信息的目的,还可以通过判断客户端传来的请求,将无线网卡获取ip的方式修改为默认或自定义。

2.程序设计

let http = require("http");
var exec = require('child_process');
const urlLib = require('url');
let server = http.createServer();
server.on('request', function (req, res) {
    if (req.method === 'GET') {
        var urlObj = urlLib.parse(req.url, true);
        if (urlObj.pathname == "/getIpMsg") {
            //当请求为‘GET’‘getIpMsg’时执行脚本提取网卡1网卡2的网络数据。
            exec('/shell02/ip.sh', (err, stdout, stderr) => {
                if (err) {
                    console.log(err);
                    return;
                }
                res.setHeader('Access-Control-Allow-Origin', "*");
                res.end(stdout);
            })
        } else if (urlObj.pathname == "/getWlanMsg") {
            //当请求为‘GET’‘getWlanMsg’时执行脚本提取无线网卡的网络数据。
            exec('/shell02/wlan0.sh', (err, stdout, stderr) => {
                if (err) {
                    console.log(err);
                    return;
                }
                res.setHeader('Access-Control-Allow-Origin', "*");
                res.end(stdout);
            })
        }
    } else if (req.method === 'POST') {
        var urlObj = urlLib.parse(req.url, true);
        res.setHeader('Access-Control-Allow-Origin', "*");
        if (urlObj.pathname == "/setIpMsg") {
            //如果请求为‘POST’‘setIPMsg’时首先获取客户端传来的将要修改的ip等数据
            let data = ''
            req.on('data', function (chunk) {
                data += chunk;
            });
            //获取数据后执行修改网卡ip的脚本
            req.on('end', function () {
                console.log(data);
                data = JSON.parse(data);
                var callfile = require('child_process');
                if (data.eth === 'eth0') {
                    callfile.execFile('/shell01/ip1_shell.sh', [data.ip0, data.nm0, data.gw0], null, function (err, stdout, stderr) {
                    });
                } else if (data.eth === 'eth1') {
                    callfile.execFile('/shell01/ip2_shell.sh', [data.ip1, data.nm1, data.gw1], null, function (err, stdout, stderr) {
                    });
                }
                res.end("successful");
            })
        } else if (urlObj.pathname == "/setWifiMsg") {
            //如果请求为‘POST’‘setWifMsg’时首先获取客户端传来的wifi名称和密码。
            let data = ''
            req.on('data', function (chunk) {
                data += chunk;
            });
            //获取数据后执行连接wifi的脚本
            req.on('end', function () {
                data = JSON.parse(data);
                var child_process = require('child_process');
                var wifi = child_process.execFile('/shell02/wifi.sh', [data.ssid, data.key], null, function (err, stdout, stderr) {
                    console.log(stdout);
                });
                wifi.stdout.on('data', function (data) {
                    console.log(data.toString());
                });
                //执行连接wifi的脚本后重启网卡
                wifi.on('close', function () {
                    console.log('Wifi file is configured');
                    var ifup = child_process.spawn('ifup', ['wlan0']);
                    ifup.stdout.on('data', function (data) {
                        console.log(data.toString());
                    });
                    //重启网卡后判断网卡是否正常连接
                    ifup.on('close', function () {
                        console.log('The network card has been opened');
                        child_process.execFile('/shell02/judge.sh', [], null, function (err, stdout, stderr) {
                            //若连接正常,向客户端返回无线网卡信息
                            if (Boolean(stdout.replace(/[\r\n]/g, ""))) {
                                var stringResult = stdout.split(',');
                                let wlanMsg = {
                                    ip: stringResult[0],
                                    nm: stringResult[1],
                                    gw: stringResult[2],
                                    mac: stringResult[3]
                                }
                                console.log(JSON.stringify(wlanMsg));
                                res.setHeader('Access-Control-Allow-Origin', "*");
                                res.end(JSON.stringify(wlanMsg));
                            } 
                            //若连接异常,向客户端返回连接失败信息
                            else {
                                res.end('')
                            }
                        })
                    })
                })
            })
        } else if (urlObj.pathname == "/setWlanIpMsg") {
            //如果请求为‘POST’‘setWlanIpMsg’时首先获取客户端传来的修改无线网卡ip的数据
            res.setHeader('Access-Control-Allow-Origin', "*");
            let data = ''
            req.on('data', function (chunk) {
                data += chunk;
            });
            //获取数据后执行修改无线网卡ip数据的脚本
            req.on('end', function () {
                var callfile = require('child_process');
                data = JSON.parse(data);
                var ipdhcp = callfile.execFile('/shell02/ipdhcp.sh', [data.ip, data.netmask, data.gateway], null, function (err, stdout, stderr) {
                });
                ipdhcp.on("exit", function () {
                    //修改ip后判断修改是否可以正常连接
                    callfile.execFile('/shell02/judge.sh', [], null, function (err, stdout, stderr) {
                        var stringResult = stdout.split(',');
                        console.log('array:', stringResult)
                        let wlanMsg = {
                            ip: stringResult[0],
                            nm: stringResult[1],
                            gw: stringResult[2],
                            mac: stringResult[3]
                        }
                        res.end(JSON.stringify(wlanMsg))
                    })
                })
            })
        }
    } else {
        res.end('Please re-select the request method')
    }
});
server.listen(3000, function () {
    console.log("Server started successfully")
});

四、客户端

1.功能设计

在之前parameters节点的功能基础上,在切换网卡菜单栏中添加wlan0条目。

  • 点击“获取服务端数据”按钮之后,获得服务端传来的数据,包括eth0、eth1、wlan0的相关数据。
  • 当切换至wlan0条目时,出现无线网卡连接状态提示,若网卡正常,则显示“网卡正常”的提示并缓慢消失,同时出现wifi连接界面;若异常,则显示“网卡异常”的提示。
  • “连接wifi”界面包括wifi名字输入项、wifi密码输入项及连接wifi按钮。输入相应内容之后,点击“连接wifi”按钮,显示“连接中…”等待连接。若成功连上wifi则显示“连接成功”的提示并缓慢消失,同时出现修改ip界面;若异常则显示“连接异常”的提示。
  • 修改ip界面包括“自动获取ip地址”和“使用以下ip地址”的单选框、显示无线模块网络信息诸如ip、netmask、gateway等各个条目。连接wifi成功后界面上显示现在无线网卡的各网络参数信息。若选择“自动获取ip地址”单选框,则ip地址自动变为“dhcp”且各网络信息无法修改;若选择“使用以下ip地址”单选框,则可自行修改各网络参数。点击“修改无线网卡ip”后系统进行修改工作,并显示“正在修改无线网卡ip…”提示,修改完成后提示“无线网卡ip已修改”。

2.界面设计

  1. 输入服务端ip,点击“获取服务端数据”按钮,切换至wlan0条目,网卡安装正常时会提示正常并出现连接wifi界面;
    网卡连接正常
    若网卡安装异常会出现异常提示,则需要检查无线网卡模块安装情况,确认安装完成且出现安装正常提示后即可连接wifi。
    网卡连接异常

  2. 输入wifi名称和密码,点击连接wifi按钮,出现连接中提示。
    wifi连接中

若正常连接会显现正常提示后缓慢消退,且出现修改和显示ip信息界面。此时ip信息界面就是此时无线网卡部分的ip信息。
wifi连接正常
若输入wifi名称或密码错误,则出现wifi连接异常的提示。
wifi连接异常
3. 连接wifi正常后可选择“自动获得ip地址”或“使用以下ip地址”,出现修改中的提示。若选择自动获得选项则默认ip为dhcp,即由系统自动分配ip,此时界面的输入框均处于锁定状态不可修改;
修改ip连接中

若选择自定义ip选项,则可使用用户配置的相关网卡信息。点击“修改无线网卡ip”按钮后会出现连接中提示,修改结束后会出现结果提示。
修改ip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值