您好!欢迎来到默认站点! 请登录 注册有礼
首页 新闻资讯 > 研发日志 > 物联网

物联网RFID开发四:保存设备配置信息

2020-3-26 21:29:00 人评论

先建立一个私有方法,通过建立的Socket连接象目标端口发送一系列内容(指令),代码暂时完全参照SDK编写,没时间验证是否存在多余的指令,全部执行是能够正常保存设备配置信息的。

保存配置信息和获取配置信息代码类似,都是通过Socket连接发送一系列指令

/// <summary>
/// 保存设备配置
/// </summary>
/// <param name="setting">设备配置实体对象</param>
/// <returns></returns>
public bool SaveDeviceSetting(ReaderDeviceSetting setting) {
    bool result = true;
    using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
        socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
        try {
            SaveDeviceSetting(socket, setting);//发送多条指令给设备来完成配置修改
        }
        catch (Exception e) {
            message = e.Message;
            result = false;
        }
        socket.Close();
    }
    return result;
}

/// <summary>
/// 保存设备配置
/// </summary>
/// <param name="socket"></param>
/// <param name="setting"></param>
/// <param name="ipEndPoint"></param>
private void SaveDeviceSetting(Socket socket, ReaderDeviceSetting setting) {
    IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(setting.RemoteIPAddress ), 65535);
    string request = "L";//初始化需要发送的数据
    byte[] buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(50);

    request = "SON" + setting.SubName + "|18";//保存设备用户名
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SDN" + setting.Name + "|19";//保存设备名称
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "STP" + setting.TransferProtocol + "|20";//保存传输协议
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SPN" + setting.RemotePort + "|21";//保存远程设备端口号
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SRM" + setting.RunMode + "|22";//保存工作模式
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SFC" + setting.fc + "|23";//保存fc
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SDT" + setting.dt + "|24";//保存dt
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SBR" + setting.br + "|25";//保存br
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SPR" + setting.pr + "|26";//保存pr
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SBB" + setting.bb + "|27";//保存bb
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SRC" + setting.rc + "|28";//保存rc
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SCM" + setting.ConnectionMode + "|29";//保存连接方式
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SCT" + setting.ConnectionTime + "|30";//保存连接时限
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SML" + setting.ml + "|31";//保存ml
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SMD" + setting.md + "|32";//保存md
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SDI" + setting.LocalIPAddress + "|33";//保存上报数据IP地址
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SDP" + setting.LocalPort + "|34";//保存上报数据端口号
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SGI" + setting.Gateway + "|35";//保存远程设备网关地址
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SNM" + setting.SubnetMask + "|36";//保存远程设备子网掩码
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "SIP" + setting.RemoteIPAddress + "|37";//保存远程设备IP地址
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(10);

    request = "E";//初始化需要发送的数据
    buffer = Encoding.ASCII.GetBytes(request);
    socket.SendTo(buffer, ipEndPoint);
    Thread.Sleep(500);

    //request = "W" + setting.MAC;//保存远程设备MAC地址
    //buffer = Encoding.ASCII.GetBytes(request);
    //socket.SendTo(buffer, ipEndPoint);
    //Thread.Sleep(100);

    //request = "L";//初始化需要发送的数据
    //buffer = Encoding.ASCII.GetBytes(request);
    //socket.SendTo(buffer, ipEndPoint);
    //Thread.Sleep(50);
}


修改之前建立的device_editConroller控制器,增加一个SubmitSave保存动作,修改后整体代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Net;
using Mvcms.Common.Net;

namespace Mvcms.Web.Controllers.admin.IOT {
    public class device_editController: UI.Controllers.BaseManageController {
        public ActionResult Index() {
            string ipaddress = request.QueryString["ip"].Trim();
            int port = request.QueryString["port"].ToInt();
            IsPlugin = true;
            ReaderDeviceHelper helper = new ReaderDeviceHelper();
            ReaderDeviceSetting model = helper.GetDeviceSetting(ipaddress, port);
            return View(GetViewName("/IOT/device_edit.cshtml"), model);
        }

        /// <summary>
        /// 保存设备配置
        /// </summary>
        /// <returns></returns>
        public ActionResult SubmitSave() {
            string ipAddress = request.Form["IPAddress"].Trim();
            System.Net.IPAddress ip = null;
            try {
                ip = System.Net.IPAddress.Parse(ipAddress);
            }
            catch {
                return JsDialog("设备IP地址无效!", false);
            }
            int port = request.Form["Port"].ToInt();
            ReaderDeviceHelper helper = new ReaderDeviceHelper();
            //需要获取设备配置信息,有几个参数文档未说明含义,需要原样保存回去
            ReaderDeviceSetting setting = helper.GetDeviceSetting(ipAddress, port);
            if (setting == null) {
                return JsDialog("无法检测到要更新的设备,操作中止!", false);
            }
            setting.RemoteIPAddress = ipAddress;
            setting.RemotePort = port;
            setting.MAC = request.Form["MAC"].ToString();
            setting.Name = request.Form["Name"].Trim();
            setting.SubName = request.Form["SubName"].Trim();
            setting.SubnetMask = request.Form["SubnetMask"].Trim();
            setting.Gateway = request.Form["Gateway"].Trim();
            setting.LocalIPAddress = request.Form["DestinationIP"].Trim();
            setting.LocalPort = request.Form["DestinationPort"].ToInt();
            setting.ConnectionMode = request.Form["ConnectionMode"].ToInt();
            setting.ConnectionTime = request.Form["ConnectionTime"].ToInt();
            setting.RunMode = request.Form["RunMode"].ToInt();
            setting.TransferProtocol = request.Form["TransferProtocol"].ToInt();
            try {
                ip = IPAddress.Parse(setting.SubnetMask);
                ip = IPAddress.Parse(setting.Gateway);
                ip = IPAddress.Parse(setting.LocalIPAddress);
            }
            catch {
                return JsDialog("存在不和法的IP地址,请修正", false);
            }
            if (!request.Success) {
                return JsDialog(request.HtmlMessage(), false);
            }
            if (helper.SaveDeviceSetting(setting)) {
                System.Threading.Thread.Sleep(1500);//阻塞1.5秒,等待设备准备就绪
                return JscriptMsg("保存 " + setting.LocalIPAddress + " 设备配置成功!", "../device_list/index?wait=1500", true);
            }
            else {
                return JsDialog(ReaderDeviceHelper.Message, false);
            }
        }
    }
}

注意事项:保存完成配置信息后,设备需要重启,如果立即搜索设备会搜索不到这个刚刚更新配置的设备,测试发现大约需要等待3秒时间,设备才能准备就绪,所以在返回的Url参数中增加一个wait参数并设定列表页控制器动作延迟3秒在执行搜索设备操作。

相关资讯

暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?
会员登陆
18004549898
QQ
Mvcms网站管理系统客服QQ:
返回顶部