diff --git a/NengLiang/.vs/NengLiang/FileContentIndex/23f288a7-a2ea-4fe2-ad94-b1cea116a11b.vsidx b/NengLiang/.vs/NengLiang/FileContentIndex/23f288a7-a2ea-4fe2-ad94-b1cea116a11b.vsidx new file mode 100644 index 0000000..959cd83 Binary files /dev/null and b/NengLiang/.vs/NengLiang/FileContentIndex/23f288a7-a2ea-4fe2-ad94-b1cea116a11b.vsidx differ diff --git a/NengLiang/.vs/NengLiang/FileContentIndex/32689ad0-5385-42e6-a838-2449d26337a0.vsidx b/NengLiang/.vs/NengLiang/FileContentIndex/32689ad0-5385-42e6-a838-2449d26337a0.vsidx new file mode 100644 index 0000000..da80245 Binary files /dev/null and b/NengLiang/.vs/NengLiang/FileContentIndex/32689ad0-5385-42e6-a838-2449d26337a0.vsidx differ diff --git a/NengLiang/.vs/NengLiang/FileContentIndex/3d6e0ca6-b16e-4dd1-a0d2-8ac14fdeb9be.vsidx b/NengLiang/.vs/NengLiang/FileContentIndex/3d6e0ca6-b16e-4dd1-a0d2-8ac14fdeb9be.vsidx new file mode 100644 index 0000000..68e0be5 Binary files /dev/null and b/NengLiang/.vs/NengLiang/FileContentIndex/3d6e0ca6-b16e-4dd1-a0d2-8ac14fdeb9be.vsidx differ diff --git a/NengLiang/.vs/NengLiang/FileContentIndex/9aa62488-0d6b-44d9-84cb-3590464903ee.vsidx b/NengLiang/.vs/NengLiang/FileContentIndex/9aa62488-0d6b-44d9-84cb-3590464903ee.vsidx new file mode 100644 index 0000000..2911dad Binary files /dev/null and b/NengLiang/.vs/NengLiang/FileContentIndex/9aa62488-0d6b-44d9-84cb-3590464903ee.vsidx differ diff --git a/NengLiang/.vs/NengLiang/FileContentIndex/read.lock b/NengLiang/.vs/NengLiang/FileContentIndex/read.lock new file mode 100644 index 0000000..e69de29 diff --git a/NengLiang/.vs/NengLiang/v16/.suo b/NengLiang/.vs/NengLiang/v16/.suo new file mode 100644 index 0000000..7bf9abf Binary files /dev/null and b/NengLiang/.vs/NengLiang/v16/.suo differ diff --git a/NengLiang/.vs/NengLiang/v17/.suo b/NengLiang/.vs/NengLiang/v17/.suo new file mode 100644 index 0000000..d74ed5c Binary files /dev/null and b/NengLiang/.vs/NengLiang/v17/.suo differ diff --git a/NengLiang/NengLiang.cs b/NengLiang/NengLiang.cs index 140f359..7c447bd 100644 --- a/NengLiang/NengLiang.cs +++ b/NengLiang/NengLiang.cs @@ -16,723 +16,724 @@ using System.Net.Sockets; using System.Net; using System.Collections; -internal class NengLiang +namespace NengLiang { - - static log4net.ILog log; - - public static Socket serverSocket; - /// - /// 在线用户列表 - /// - public static List idOnLine = new List(); - /// - /// 存储IP及Socket--便于服务器与指定客户端通信 - /// - public static Dictionary OnLineDic = new Dictionary(); - - public static Encoding encoding = Encoding.Default; - - /// - /// 地址码,[变量名,数据类型,可修改可读否(改-读)] ,变量个数 - /// - public static Dictionary RegisterType;//地址码00对应40001,其他地址以此类推[4区保持寄存器40001~49999](绝对地址) - - /// - /// 循环获取数据时间 - /// - public static int loopTime = 10; - - //public static float TRAS = 1000 / 2400 * 12.5f;//3.5字符周期周期时间(单位ms) - public static float TRAS = 3.5f * 9 / 2.4f;//3.5字符周期周期时间(单位ms)单条发送周期时间 - - /// - /// 添加数据寄存器信息 - /// - public static void AddDictionary() + internal class NengLiang { - if (RegisterType == null) + + static log4net.ILog log; + + public static Socket serverSocket; + /// + /// 在线用户列表 + /// + public static List idOnLine = new List(); + /// + /// 存储IP及Socket--便于服务器与指定客户端通信 + /// + public static Dictionary OnLineDic = new Dictionary(); + + public static Encoding encoding = Encoding.Default; + + /// + /// 地址码,[变量名,数据类型,可修改可读否(改-读)] ,变量个数 + /// + public static Dictionary RegisterType;//地址码00对应40001,其他地址以此类推[4区保持寄存器40001~49999](绝对地址) + + /// + /// 循环获取数据时间 + /// + public static int loopTime = 10; + + //public static float TRAS = 1000 / 2400 * 12.5f;//3.5字符周期周期时间(单位ms) + public static float TRAS = 3.5f * 9 / 2.4f;//3.5字符周期周期时间(单位ms)单条发送周期时间 + + /// + /// 添加数据寄存器信息 + /// + public static void AddDictionary() { - RegisterType = new Dictionary(); - RegisterType.Add(0, new string[] { "瞬时流量", "ulong", "ny", "2" }); - RegisterType.Add(2, new string[] { "供水温度", "uint", "ny", "1" }); - RegisterType.Add(3, new string[] { "回水温度", "uint", "ny", "1" }); - RegisterType.Add(4, new string[] { "采样值", "uint", "ny", "1" }); - RegisterType.Add(5, new string[] { "累计流量整数", "ulong", "ny", "2" }); - RegisterType.Add(7, new string[] { "累计流量小数", "uint", "ny", "1" }); - RegisterType.Add(8, new string[] { "正累计流量整数", "ulong", "yy", "2" }); - RegisterType.Add(10, new string[] { "正累计流量小数", "uint", "ny", "1" }); - RegisterType.Add(11, new string[] { "负累计流量整数", "ulong", "yy", "2" }); - RegisterType.Add(13, new string[] { "负累计流量小数", "uint", "ny", "1" }); - RegisterType.Add(14, new string[] { "瞬时热量", "ulong", "ny", "2" }); - RegisterType.Add(16, new string[] { "修改版本号", "uint", "yy", "1" }); - RegisterType.Add(17, new string[] { "语言", "uint", "yy", "1" }); - RegisterType.Add(18, new string[] { "表地址", "uint", "yy", "1" }); - RegisterType.Add(19, new string[] { "仪表通讯速度", "uint", "yy", "1" }); - RegisterType.Add(20, new string[] { "修改口径", "uint", "yy", "1" }); - RegisterType.Add(21, new string[] { "流量单位", "uint", "yy", "1" }); - RegisterType.Add(22, new string[] { "流量积算单位", "uint", "yy", "1" }); - RegisterType.Add(23, new string[] { "零点采样值", "uint", "yy", "1" }); - RegisterType.Add(24, new string[] { "仪表系数", "uint", "yy", "1" }); - RegisterType.Add(25, new string[] { "热量系数", "uint", "yy", "1" }); - RegisterType.Add(26, new string[] { "供水温度系数", "uint", "yy", "1" }); - RegisterType.Add(27, new string[] { "回水温度系数", "uint", "yy", "1" }); - RegisterType.Add(28, new string[] { "小信号切除点", "uint", "yy", "1" }); - RegisterType.Add(29, new string[] { "修改脉冲单位", "uint", "yy", "1" }); - RegisterType.Add(30, new string[] { "允许切除显示", "uint", "yy", "1" }); - RegisterType.Add(31, new string[] { "反向输出允许", "uint", "yy", "1" }); - RegisterType.Add(32, new string[] { "电流输出类型", "uint", "yy", "1" }); - RegisterType.Add(33, new string[] { "脉冲输出方式", "uint", "yy", "1" }); - RegisterType.Add(34, new string[] { "频率输出范围", "uint", "yy", "1" }); - RegisterType.Add(35, new string[] { "空管报警允许", "uint", "yy", "1" }); - RegisterType.Add(36, new string[] { "空管报警阈值", "uint", "yy", "1" }); - RegisterType.Add(37, new string[] { "上限报警允许", "uint", "yy", "1" }); - RegisterType.Add(38, new string[] { "上限报警数值", "uint", "yy", "1" }); - RegisterType.Add(39, new string[] { "下限报警允许", "uint", "yy", "1" }); - RegisterType.Add(40, new string[] { "下限报警数值", "uint", "yy", "1" }); - RegisterType.Add(41, new string[] { "励磁报警允许", "uint", "yy", "1" }); - RegisterType.Add(42, new string[] { "传感器系数", "uint", "yy", "1" }); - RegisterType.Add(43, new string[] { "预留", "uint", "yy", "1" }); - RegisterType.Add(44, new string[] { "空管采样值", "uint", "ny", "1" }); - RegisterType.Add(45, new string[] { "报警信息", "uint", "ny", "1" }); - RegisterType.Add(46, new string[] { "电流零点修正", "uint", "yy", "1" }); - RegisterType.Add(47, new string[] { "电流满度修正", "uint", "yy", "1" }); - RegisterType.Add(48, new string[] { "仪表量程设置", "uint", "yy", "1" }); - RegisterType.Add(49, new string[] { "测量阻尼时间", "uint", "yy", "1" }); - RegisterType.Add(50, new string[] { "流量方向选择项", "uint", "yy", "1" }); - RegisterType.Add(51, new string[] { "累计热量整数", "ulong", "yy", "2" }); - RegisterType.Add(53, new string[] { "累计热量小数", "uint", "yy", "1" }); - RegisterType.Add(54, new string[] { "累计冷量整数", "ulong", "yy", "2" }); - RegisterType.Add(56, new string[] { "累计冷量小数", "uint", "yy", "1" }); - } - } - - static void Main(string[] args) - { - //初始化日志 - log4net.Config.XmlConfigurator.Configure(); - log = log4net.LogManager.GetLogger("loginfo"); - AddDictionary(); - init(); - - //var a = 0x36213; - //ushort b = (ushort)Convert.ToInt16(a, 16); - //byte g = (byte)(b / 256);//0x33 - //byte d = (byte)(b % 256);//0x2A - //Console.ReadKey(); - - while (true) - { - if (OnLineDic.Count == 0) continue; - Thread.Sleep(1000 * loopTime); - byte devAdd = 0x01; - byte code = 0x03; - byte[] bytes;// 发送字节 - - foreach (var v in OnLineDic.Values) + if (RegisterType == null) { - foreach (var item in RegisterType.Keys) + RegisterType = new Dictionary(); + RegisterType.Add(0, new string[] { "瞬时流量", "ulong", "ny", "2" }); + RegisterType.Add(2, new string[] { "供水温度", "uint", "ny", "1" }); + RegisterType.Add(3, new string[] { "回水温度", "uint", "ny", "1" }); + RegisterType.Add(4, new string[] { "采样值", "uint", "ny", "1" }); + RegisterType.Add(5, new string[] { "累计流量整数", "ulong", "ny", "2" }); + RegisterType.Add(7, new string[] { "累计流量小数", "uint", "ny", "1" }); + RegisterType.Add(8, new string[] { "正累计流量整数", "ulong", "yy", "2" }); + RegisterType.Add(10, new string[] { "正累计流量小数", "uint", "ny", "1" }); + RegisterType.Add(11, new string[] { "负累计流量整数", "ulong", "yy", "2" }); + RegisterType.Add(13, new string[] { "负累计流量小数", "uint", "ny", "1" }); + RegisterType.Add(14, new string[] { "瞬时热量", "ulong", "ny", "2" }); + RegisterType.Add(16, new string[] { "修改版本号", "uint", "yy", "1" }); + RegisterType.Add(17, new string[] { "语言", "uint", "yy", "1" }); + RegisterType.Add(18, new string[] { "表地址", "uint", "yy", "1" }); + RegisterType.Add(19, new string[] { "仪表通讯速度", "uint", "yy", "1" }); + RegisterType.Add(20, new string[] { "修改口径", "uint", "yy", "1" }); + RegisterType.Add(21, new string[] { "流量单位", "uint", "yy", "1" }); + RegisterType.Add(22, new string[] { "流量积算单位", "uint", "yy", "1" }); + RegisterType.Add(23, new string[] { "零点采样值", "uint", "yy", "1" }); + RegisterType.Add(24, new string[] { "仪表系数", "uint", "yy", "1" }); + RegisterType.Add(25, new string[] { "热量系数", "uint", "yy", "1" }); + RegisterType.Add(26, new string[] { "供水温度系数", "uint", "yy", "1" }); + RegisterType.Add(27, new string[] { "回水温度系数", "uint", "yy", "1" }); + RegisterType.Add(28, new string[] { "小信号切除点", "uint", "yy", "1" }); + RegisterType.Add(29, new string[] { "修改脉冲单位", "uint", "yy", "1" }); + RegisterType.Add(30, new string[] { "允许切除显示", "uint", "yy", "1" }); + RegisterType.Add(31, new string[] { "反向输出允许", "uint", "yy", "1" }); + RegisterType.Add(32, new string[] { "电流输出类型", "uint", "yy", "1" }); + RegisterType.Add(33, new string[] { "脉冲输出方式", "uint", "yy", "1" }); + RegisterType.Add(34, new string[] { "频率输出范围", "uint", "yy", "1" }); + RegisterType.Add(35, new string[] { "空管报警允许", "uint", "yy", "1" }); + RegisterType.Add(36, new string[] { "空管报警阈值", "uint", "yy", "1" }); + RegisterType.Add(37, new string[] { "上限报警允许", "uint", "yy", "1" }); + RegisterType.Add(38, new string[] { "上限报警数值", "uint", "yy", "1" }); + RegisterType.Add(39, new string[] { "下限报警允许", "uint", "yy", "1" }); + RegisterType.Add(40, new string[] { "下限报警数值", "uint", "yy", "1" }); + RegisterType.Add(41, new string[] { "励磁报警允许", "uint", "yy", "1" }); + RegisterType.Add(42, new string[] { "传感器系数", "uint", "yy", "1" }); + RegisterType.Add(43, new string[] { "预留", "uint", "yy", "1" }); + RegisterType.Add(44, new string[] { "空管采样值", "uint", "ny", "1" }); + RegisterType.Add(45, new string[] { "报警信息", "uint", "ny", "1" }); + RegisterType.Add(46, new string[] { "电流零点修正", "uint", "yy", "1" }); + RegisterType.Add(47, new string[] { "电流满度修正", "uint", "yy", "1" }); + RegisterType.Add(48, new string[] { "仪表量程设置", "uint", "yy", "1" }); + RegisterType.Add(49, new string[] { "测量阻尼时间", "uint", "yy", "1" }); + RegisterType.Add(50, new string[] { "流量方向选择项", "uint", "yy", "1" }); + RegisterType.Add(51, new string[] { "累计热量整数", "ulong", "yy", "2" }); + RegisterType.Add(53, new string[] { "累计热量小数", "uint", "yy", "1" }); + RegisterType.Add(54, new string[] { "累计冷量整数", "ulong", "yy", "2" }); + RegisterType.Add(56, new string[] { "累计冷量小数", "uint", "yy", "1" }); + } + } + + static void Main(string[] args) + { + //初始化日志 + log4net.Config.XmlConfigurator.Configure(); + log = log4net.LogManager.GetLogger("loginfo"); + AddDictionary(); + init(); + + //var a = 0x36213; + //ushort b = (ushort)Convert.ToInt16(a, 16); + //byte g = (byte)(b / 256);//0x33 + //byte d = (byte)(b % 256);//0x2A + //Console.ReadKey(); + + while (true) + { + if (OnLineDic.Count == 0) continue; + Thread.Sleep(1000 * loopTime); + byte devAdd = 0x01; + byte code = 0x03; + byte[] bytes;// 发送字节 + + foreach (var v in OnLineDic.Values) { - Thread.Sleep((int)Math.Ceiling(TRAS)); - ushort start = (ushort)item; - ushort length = ushort.Parse(RegisterType[item][3].ToString()); - bytes = ReadKsepRsgistecs(devAdd, code, start, length); - log.Info("发送至" + v.RemoteEndPoint + ": " + ToolKit.byteArrayToHexString(bytes)); - //Console.WriteLine(ToolKit.byteArrayToHexString(bytes)); - v.Send(bytes); + foreach (var item in RegisterType.Keys) + { + Thread.Sleep((int)Math.Ceiling(TRAS)); + ushort start = (ushort)item; + ushort length = ushort.Parse(RegisterType[item][3].ToString()); + bytes = ReadKsepRsgistecs(devAdd, code, start, length); + log.Info("发送至" + v.RemoteEndPoint + ": " + ToolKit.byteArrayToHexString(bytes)); + //Console.WriteLine(ToolKit.byteArrayToHexString(bytes)); + v.Send(bytes); + } } } } - } - /// - /// 初始化服务器 - /// - public static void init() - { - //TCP - try + /// + /// 初始化服务器 + /// + public static void init() { - var ip = "172.17.0.9"; - var port = 12303; - - //var ip = "172.16.1.49"; - //var port = 12303; - - //调用socket(函数创建一个用于通信的套接字。 - serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - - //给已经创建的套接宁绑定一个端口号 - IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), port); - serverSocket.Bind(endPoint); - - //调用listen(函数使套接宁成为—个监听 - serverSocket.Listen(1000);//最大连接数 - - //开启监听任务 - Task.Run(new Action(() => - { - ListenConnection(); - })); - - } - catch (Exception e) - { - Console.WriteLine("服务器初始化异常:" + e.Message); - } - } - - /// - /// 监听任务 - /// - private static void ListenConnection() - { - while (true) - { - //调用accept() 函数来接受客户端的连接 - Socket clientSocket = serverSocket.Accept();//新用户连接后触发返回新的socket - string ipPort = clientSocket.RemoteEndPoint.ToString();//连接用户的IP及端口 - addOnLine(ipPort, clientSocket, true); - Console.WriteLine(clientSocket.RemoteEndPoint.ToString() + "上线了"); - Task.Run(() => ReceiveMsg(clientSocket));//针对单个客户端开启线程(接收) - - } - } - - - /// - /// 接收消息--接收到进入触发 - /// - /// - private static void ReceiveMsg(Socket clientSocket) - { - StringBuilder builder_shuju = new StringBuilder("");//需校验字节 - StringBuilder builder_crc = new StringBuilder("");//收到检验位 - while (true) - { - byte[] bytes = new byte[1024]; - int length = -1; + //TCP try { - length = clientSocket.Receive(bytes);//返回字节数 - } - catch (Exception) - { - //用户下线--更新在线列表 - addOnLine(clientSocket.RemoteEndPoint.ToString(), clientSocket, false); - Console.WriteLine(clientSocket.RemoteEndPoint.ToString() + "下线了"); - break;//结束线程 - } - if (length == 0) - { - //用户下线--更新在线列表 - addOnLine(clientSocket.RemoteEndPoint.ToString(), clientSocket, false); - Console.WriteLine(clientSocket.RemoteEndPoint.ToString() + "下线了"); - break;//结束线程 - } + var ip = "172.17.0.9"; + var port = 12303; - if (length > 0) - { - //string message = Encoding.Default.GetString(bytes, 0, length); - string _message = ToolKit.byteArrayToHexString(bytes, length);//带空格报文 - string message = _message.Replace(" ", "");//不带空格报文 + //var ip = "172.16.1.49"; + //var port = 12303; + //调用socket(函数创建一个用于通信的套接字。 + serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - //CRC校验--失败返回不解析 - builder_shuju.Clear(); - builder_crc.Clear(); - for (int i = 0; i < message.Length - 4; i++) + //给已经创建的套接宁绑定一个端口号 + IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), port); + serverSocket.Bind(endPoint); + + //调用listen(函数使套接宁成为—个监听 + serverSocket.Listen(1000);//最大连接数 + + //开启监听任务 + Task.Run(new Action(() => { - builder_shuju.Append(message[i]); + ListenConnection(); + })); + + } + catch (Exception e) + { + Console.WriteLine("服务器初始化异常:" + e.Message); + } + } + + /// + /// 监听任务 + /// + private static void ListenConnection() + { + while (true) + { + //调用accept() 函数来接受客户端的连接 + Socket clientSocket = serverSocket.Accept();//新用户连接后触发返回新的socket + string ipPort = clientSocket.RemoteEndPoint.ToString();//连接用户的IP及端口 + addOnLine(ipPort, clientSocket, true); + Console.WriteLine(clientSocket.RemoteEndPoint.ToString() + "上线了"); + Task.Run(() => ReceiveMsg(clientSocket));//针对单个客户端开启线程(接收) + + } + } + + + /// + /// 接收消息--接收到进入触发 + /// + /// + private static void ReceiveMsg(Socket clientSocket) + { + StringBuilder builder_shuju = new StringBuilder("");//需校验字节 + StringBuilder builder_crc = new StringBuilder("");//收到检验位 + while (true) + { + byte[] bytes = new byte[1024]; + int length = -1; + try + { + length = clientSocket.Receive(bytes);//返回字节数 } - for (int i = message.Length - 4; i < message.Length; i++) + catch (Exception) { - builder_crc.Append(message[i]); + //用户下线--更新在线列表 + addOnLine(clientSocket.RemoteEndPoint.ToString(), clientSocket, false); + Console.WriteLine(clientSocket.RemoteEndPoint.ToString() + "下线了"); + break;//结束线程 } - if (CRC.CRCForModbus(builder_shuju.ToString().ToUpper()) != builder_crc.ToString().ToUpper()) + if (length == 0) { - log.Info("接收" + clientSocket.RemoteEndPoint + "数据校验失败" + ": " + _message); - Console.WriteLine("接收" + clientSocket.RemoteEndPoint + "数据校验失败" + ": " + _message); + //用户下线--更新在线列表 + addOnLine(clientSocket.RemoteEndPoint.ToString(), clientSocket, false); + Console.WriteLine(clientSocket.RemoteEndPoint.ToString() + "下线了"); + break;//结束线程 + } + + if (length > 0) + { + //string message = Encoding.Default.GetString(bytes, 0, length); + string _message = ToolKit.byteArrayToHexString(bytes, length);//带空格报文 + string message = _message.Replace(" ", "");//不带空格报文 + + + //CRC校验--失败返回不解析 + builder_shuju.Clear(); + builder_crc.Clear(); + for (int i = 0; i < message.Length - 4; i++) + { + builder_shuju.Append(message[i]); + } + for (int i = message.Length - 4; i < message.Length; i++) + { + builder_crc.Append(message[i]); + } + if (CRC.CRCForModbus(builder_shuju.ToString().ToUpper()) != builder_crc.ToString().ToUpper()) + { + log.Info("接收" + clientSocket.RemoteEndPoint + "数据校验失败" + ": " + _message); + Console.WriteLine("接收" + clientSocket.RemoteEndPoint + "数据校验失败" + ": " + _message); + } + else + { + //执行解析 + log.Info("接收到" + clientSocket.RemoteEndPoint + ": " + _message); + JudgmentFunction(message); + } + } + } + } + + /// + /// 更新在线用户列表 + /// + /// 用户IP端口号套接 + /// Socket + /// 用是否增加 + private static void addOnLine(string clientIp, Socket clientSocket, bool isAdd) + { + try + { + if (isAdd) + { + idOnLine.Add(clientIp); + OnLineDic.Add(clientIp, clientSocket); } else { - //执行解析 - log.Info("接收到" + clientSocket.RemoteEndPoint + ": " + _message); - JudgmentFunction(message); + idOnLine.Remove(clientIp); + OnLineDic.Remove(clientIp); } } - } - } - - /// - /// 更新在线用户列表 - /// - /// 用户IP端口号套接 - /// Socket - /// 用是否增加 - private static void addOnLine(string clientIp, Socket clientSocket, bool isAdd) - { - try - { - if (isAdd) + catch (Exception e) { - idOnLine.Add(clientIp); - OnLineDic.Add(clientIp, clientSocket); + Console.WriteLine("更新在线用户异常:" + e.Message); } - else + //Invoke(new Action(() => + //{ + // if (isAdd) { idOnLine.Add(clientIp); } + // else { idOnLine.Remove(clientIp); } + //})); + + } + + /// + /// 判断功能类型 + /// + /// + public static void JudgmentFunction(string message) + { + try { - idOnLine.Remove(clientIp); - OnLineDic.Remove(clientIp); + string order = message[2].ToString() + message[3].ToString();//命令 + StringBuilder Register = new StringBuilder("");//类型 + for (int i = 4; i < 8; i++) + { + Register.Append(message[i]); + } + var key = int.Parse(ToolKit.hexStr2Str(Register.ToString().Trim())); + + if (order == "03")//读取命令 + { + if (!RegisterType.ContainsKey(key) || RegisterType[key][2][1] == 'n') return; + readData(message, key); + } + else if (order == "10") //修改命令 + { + if (!RegisterType.ContainsKey(key) || RegisterType[key][2][0] == 'n') return; + } + } + catch (Exception e) + { + Console.WriteLine("判断功能类型异常:" + e.Message); } } - catch (Exception e) + + /// + /// 读取保存寄存器指令 + /// + /// 地址 + /// 功能码 + /// 起始地址 + /// 变量个数 + /// + public static byte[] ReadKsepRsgistecs(byte devAdd, byte code, ushort start, ushort length) { - Console.WriteLine("更新在线用户异常:" + e.Message); + //拼接报文 + List sendCommand = new List();//地址 + 功能码 + 起始地址 + 变量个数 + 校验码 + sendCommand.Add(devAdd);//地址 + sendCommand.Add(code);//功能码 + sendCommand.Add((byte)(start / 256));//起始地址--高位 + sendCommand.Add((byte)(start % 256));//起始地址--地位 + sendCommand.Add((byte)(length / 256));//变量个数--高位 + sendCommand.Add((byte)(length % 256));//变量个数--地位 + byte[] astr = ToolKit.listToBytes(sendCommand); + string a = CRC.CRCForModbus(ToolKit.byteArrayToHexString(astr)); + sendCommand.Add(ToolKit.stringToByteArray(a)[0]); //校验码-- 高位 + sendCommand.Add(ToolKit.stringToByteArray(a)[1]); //校验码-- 地位 + + //发送报文 + //sendCommand.ToArray(); + //Thread.Sleep(40); + byte[] bytes = ToolKit.listToBytes(sendCommand); + //接收报文 + + //校验报文--验证长度--验证站--验证功能码 + + + //解析报文 + + return bytes; } - //Invoke(new Action(() => - //{ - // if (isAdd) { idOnLine.Add(clientIp); } - // else { idOnLine.Remove(clientIp); } - //})); - } - - /// - /// 判断功能类型 - /// - /// - public static void JudgmentFunction(string message) - { - try + /// + /// 读取命令 + /// + /// + /// 地址码 + public static void readData(string message, int key) { - string order = message[2].ToString() + message[3].ToString();//命令 - StringBuilder Register = new StringBuilder("");//类型 - for (int i = 4; i < 8; i++) + try { - Register.Append(message[i]); + string _readSum = message[4].ToString() + message[5].ToString(); + int readSum = int.Parse(ToolKit.hexStr2Str(_readSum));//变量总字节数 + StringBuilder builder = new StringBuilder(""); + for (int i = 6; i < 6 + readSum * 2; i++) + { + builder.Append(message[i]); + } + var num = Convert.ToInt64(builder.ToString().Trim(), 16);//获取值 + var aa = RegisterType[key][1].ToLower(); + if (aa == "ulong") + { + var number = (ulong)num; + analysisUnit(RegisterType[key][0], number); + } + else + { + var number = (uint)num; + analysisUnit(RegisterType[key][0], number); + } } - var key = int.Parse(ToolKit.hexStr2Str(Register.ToString().Trim())); + catch (Exception e) + { - if (order == "03")//读取命令 - { - if (!RegisterType.ContainsKey(key) || RegisterType[key][2][1] == 'n') return; - readData(message, key); - } - else if (order == "10") //修改命令 - { - if (!RegisterType.ContainsKey(key) || RegisterType[key][2][0] == 'n') return; + Console.WriteLine("读取命令异常:" + e.Message); } } - catch (Exception e) + + /// + /// unit值类型解析 + /// + /// 变量名 + /// + public static void analysisUnit(string name, uint number) { - Console.WriteLine("判断功能类型异常:" + e.Message); - } - } - /// - /// 读取保存寄存器指令 - /// - /// 地址 - /// 功能码 - /// 起始地址 - /// 变量个数 - /// - public static byte[] ReadKsepRsgistecs(byte devAdd, byte code, ushort start, ushort length) - { - //拼接报文 - List sendCommand = new List();//地址 + 功能码 + 起始地址 + 变量个数 + 校验码 - sendCommand.Add(devAdd);//地址 - sendCommand.Add(code);//功能码 - sendCommand.Add((byte)(start / 256));//起始地址--高位 - sendCommand.Add((byte)(start % 256));//起始地址--地位 - sendCommand.Add((byte)(length / 256));//变量个数--高位 - sendCommand.Add((byte)(length % 256));//变量个数--地位 - byte[] astr = ToolKit.listToBytes(sendCommand); - string a = CRC.CRCForModbus(ToolKit.byteArrayToHexString(astr)); - sendCommand.Add(ToolKit.stringToByteArray(a)[0]); //校验码-- 高位 - sendCommand.Add(ToolKit.stringToByteArray(a)[1]); //校验码-- 地位 - - //发送报文 - //sendCommand.ToArray(); - //Thread.Sleep(40); - byte[] bytes = ToolKit.listToBytes(sendCommand); - //接收报文 - - //校验报文--验证长度--验证站--验证功能码 - - - //解析报文 - - return bytes; - } - - /// - /// 读取命令 - /// - /// - /// 地址码 - public static void readData(string message, int key) - { - try - { - string _readSum = message[4].ToString() + message[5].ToString(); - int readSum = int.Parse(ToolKit.hexStr2Str(_readSum));//变量总字节数 - StringBuilder builder = new StringBuilder(""); - for (int i = 6; i < 6 + readSum * 2; i++) + if (name == "供水温度") { - builder.Append(message[i]); + Console.WriteLine(name + ":" + number + "℃"); } - var num = Convert.ToInt64(builder.ToString().Trim(), 16);//获取值 - var aa = RegisterType[key][1].ToLower(); - if (aa == "ulong") + else if (name == "回水温度") { - var number = (ulong)num; - analysisUnit(RegisterType[key][0], number); + Console.WriteLine(name + ":" + number + "℃"); } - else + else if (name == "采样值") { - var number = (uint)num; - analysisUnit(RegisterType[key][0], number); + Console.WriteLine(name + ":" + number); } - } - catch (Exception e) - { + else if (name == "累计流量小数") + { + Console.WriteLine(name + ":0." + number); + } + else if (name == "正累计流量小数") + { + Console.WriteLine(name + ":0." + number); + } + else if (name == "负累计流量小数") + { + Console.WriteLine(name + ":0." + number); + } + else if (name == "修改版本号") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "语言") + { + if (number == 0) Console.WriteLine(name + ":中文"); + else if (number == 1) Console.WriteLine(name + ":英文"); + } + else if (name == "表地址") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "仪表通讯速度") + { + //float TRAS;//3.5字符周期周期时间(单位ms) + if (number == 0) { Console.WriteLine(name + ":300"); /*TRAS = 1000 / 300 * 12.5f;*/ TRAS = 3.5f * 9 / 0.3f; } + else if (number == 1) { Console.WriteLine(name + ":2400"); /*TRAS = 1000 / 2400 * 12.5f;*/ TRAS = 3.5f * 9 / 2.4f; } + else if (number == 2) { Console.WriteLine(name + ":14400"); /*TRAS = 1000 / 14400 * 12.5f; */TRAS = 3.5f * 9 / 14.4f; } + else if (number == 3) { Console.WriteLine(name + ":600"); /*TRAS = 1000 / 600 * 12.5f; */TRAS = 3.5f * 9 / 0.6f; } + else if (number == 4) { Console.WriteLine(name + ":4800");/* TRAS = 1000 / 4800 * 12.5f;*/ TRAS = 3.5f * 9 / 4.8f; } + else if (number == 5) { Console.WriteLine(name + ":19200"); /*TRAS = 1000 / 19200 * 12.5f;*/ TRAS = 3.5f * 9 / 19.2f; } + else if (number == 6) { Console.WriteLine(name + ":1200"); /*TRAS = 1000 / 1200 * 12.5f; */TRAS = 3.5f * 9 / 1.2f; } + else if (number == 7) { Console.WriteLine(name + ":9600"); /*TRAS = 1000 / 9600 * 12.5f;*/ TRAS = 3.5f * 9 / 9.6f; } + else if (number == 8) { Console.WriteLine(name + ":38400"); /*TRAS = 1000 / 38400 * 12.5f;*/ TRAS = 3.5f * 9 / 38.4f; } - Console.WriteLine("读取命令异常:" + e.Message); - } - } - - /// - /// unit值类型解析 - /// - /// 变量名 - /// - public static void analysisUnit(string name, uint number) - { - - if (name == "供水温度") - { - Console.WriteLine(name + ":" + number + "℃"); - } - else if (name == "回水温度") - { - Console.WriteLine(name + ":" + number + "℃"); - } - else if (name == "采样值") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "累计流量小数") - { - Console.WriteLine(name + ":0." + number); - } - else if (name == "正累计流量小数") - { - Console.WriteLine(name + ":0." + number); - } - else if (name == "负累计流量小数") - { - Console.WriteLine(name + ":0." + number); - } - else if (name == "修改版本号") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "语言") - { - if (number == 0) Console.WriteLine(name + ":中文"); - else if (number == 1) Console.WriteLine(name + ":英文"); - } - else if (name == "表地址") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "仪表通讯速度") - { - //float TRAS;//3.5字符周期周期时间(单位ms) - if (number == 0) { Console.WriteLine(name + ":300"); /*TRAS = 1000 / 300 * 12.5f;*/ TRAS = 3.5f * 9 / 0.3f; } - else if (number == 1) { Console.WriteLine(name + ":2400"); /*TRAS = 1000 / 2400 * 12.5f;*/ TRAS = 3.5f * 9 / 2.4f; } - else if (number == 2) { Console.WriteLine(name + ":14400"); /*TRAS = 1000 / 14400 * 12.5f; */TRAS = 3.5f * 9 / 14.4f; } - else if (number == 3) { Console.WriteLine(name + ":600"); /*TRAS = 1000 / 600 * 12.5f; */TRAS = 3.5f * 9 / 0.6f; } - else if (number == 4) { Console.WriteLine(name + ":4800");/* TRAS = 1000 / 4800 * 12.5f;*/ TRAS = 3.5f * 9 / 4.8f; } - else if (number == 5) { Console.WriteLine(name + ":19200"); /*TRAS = 1000 / 19200 * 12.5f;*/ TRAS = 3.5f * 9 / 19.2f; } - else if (number == 6) { Console.WriteLine(name + ":1200"); /*TRAS = 1000 / 1200 * 12.5f; */TRAS = 3.5f * 9 / 1.2f; } - else if (number == 7) { Console.WriteLine(name + ":9600"); /*TRAS = 1000 / 9600 * 12.5f;*/ TRAS = 3.5f * 9 / 9.6f; } - else if (number == 8) { Console.WriteLine(name + ":38400"); /*TRAS = 1000 / 38400 * 12.5f;*/ TRAS = 3.5f * 9 / 38.4f; } + } + else if (name == "修改口径") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "流量单位") + { + if (number == 0) Console.WriteLine(name + ":L/H"); + else if (number == 1) Console.WriteLine(name + ":L/M"); + else if (number == 2) Console.WriteLine(name + ":L/S"); + else if (number == 3) Console.WriteLine(name + ":M³/H"); + else if (number == 4) Console.WriteLine(name + ":M³/M"); + else if (number == 5) Console.WriteLine(name + ":M³/S"); + } + else if (name == "流量积算单位") + { + if (number == 0) Console.WriteLine(name + ":0.001L"); + else if (number == 1) Console.WriteLine(name + ":0.001M³"); + else if (number == 2) Console.WriteLine(name + ":0.01L"); + else if (number == 3) Console.WriteLine(name + ":0.1L"); + else if (number == 4) Console.WriteLine(name + ":1L"); + else if (number == 5) Console.WriteLine(name + ":0.01M³"); + else if (number == 6) Console.WriteLine(name + ":0.1M³"); + else if (number == 7) Console.WriteLine(name + ":1M³"); + } + else if (name == "零点采样值") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "仪表系数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "热量系数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "供水温度系数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "回水温度系数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "小信号切除点") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "修改脉冲单位") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "允许切除显示") + { + if (number == 0) Console.WriteLine(name + ":允许"); + else if (number == 1) Console.WriteLine(name + ":禁止"); + } + else if (name == "反向输出允许") + { + if (number == 0) Console.WriteLine(name + ":允许"); + else if (number == 1) Console.WriteLine(name + ":禁止"); + } + else if (name == "电流输出类型") + { + if (number == 0) Console.WriteLine(name + ":0~10mA"); + else if (number == 1) Console.WriteLine(name + ":4~20mA"); + } + else if (name == "脉冲输出方式") + { + if (number == 0) Console.WriteLine(name + ":频率"); + else if (number == 1) Console.WriteLine(name + ":脉冲"); + } + else if (name == "频率输出范围") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "空管报警允许") + { + if (number == 0) Console.WriteLine(name + ":允许"); + else if (number == 1) Console.WriteLine(name + ":禁止"); + } + else if (name == "空管报警阈值") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "上限报警允许") + { + if (number == 0) Console.WriteLine(name + ":允许"); + else if (number == 1) Console.WriteLine(name + ":禁止"); + } + else if (name == "上限报警数值") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "下限报警允许") + { + if (number == 0) Console.WriteLine(name + ":允许"); + else if (number == 1) Console.WriteLine(name + ":禁止"); + } + else if (name == "下限报警数值") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "励磁报警允许") + { + if (number == 0) Console.WriteLine(name + ":允许"); + else if (number == 1) Console.WriteLine(name + ":禁止"); + } + else if (name == "传感器系数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "预留") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "空管采样值") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "报警信息") + { + if (number == 1) Console.WriteLine(name + ":瞬时流量单位选择错误"); + else if (number == 2) Console.WriteLine(name + ":空管"); + else if (number == 4) Console.WriteLine(name + ":下限报警"); + else if (number == 8) Console.WriteLine(name + ":上限报警"); + } + else if (name == "电流零点修正") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "电流满度修正") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "仪表量程设置") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "测量阻尼时间") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "流量方向选择项") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "累计热量小数") + { + Console.WriteLine(name + ":0." + number); + } + else if (name == "累计冷量小数") + { + Console.WriteLine(name + ":0." + number); + } } - else if (name == "修改口径") + + /// + /// ulong值类型解析 + /// + /// 变量名 + /// + public static void analysisUnit(string name, ulong number) { - Console.WriteLine(name + ":" + number); + if (name == "瞬时流量") + { + number /= 1000;//此值单位为升 / 小时,需要除以 1000 得到立方米 / 小时 + Console.WriteLine(name + ":" + number + "m³/h"); + } + else if (name == "累计流量整数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "正累计流量整数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "负累计流量整数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "瞬时热量")//单位为 KJ/h(千焦每小时),若想得到 MJ/h 则需要除以 1000;换算成 KWh/h 需要除以 3600, + { + Console.WriteLine(name + ":" + number + "KJ/h"); + } + else if (name == "累计热量整数") + { + Console.WriteLine(name + ":" + number); + } + else if (name == "累计冷量整数") + { + Console.WriteLine(name + ":" + number); + } + } - else if (name == "流量单位") + + /// + /// 寄存器类型 + /// + public enum qRegisterType { - if (number == 0) Console.WriteLine(name + ":L/H"); - else if (number == 1) Console.WriteLine(name + ":L/M"); - else if (number == 2) Console.WriteLine(name + ":L/S"); - else if (number == 3) Console.WriteLine(name + ":M³/H"); - else if (number == 4) Console.WriteLine(name + ":M³/M"); - else if (number == 5) Console.WriteLine(name + ":M³/S"); - } - else if (name == "流量积算单位") - { - if (number == 0) Console.WriteLine(name + ":0.001L"); - else if (number == 1) Console.WriteLine(name + ":0.001M³"); - else if (number == 2) Console.WriteLine(name + ":0.01L"); - else if (number == 3) Console.WriteLine(name + ":0.1L"); - else if (number == 4) Console.WriteLine(name + ":1L"); - else if (number == 5) Console.WriteLine(name + ":0.01M³"); - else if (number == 6) Console.WriteLine(name + ":0.1M³"); - else if (number == 7) Console.WriteLine(name + ":1M³"); - } - else if (name == "零点采样值") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "仪表系数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "热量系数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "供水温度系数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "回水温度系数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "小信号切除点") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "修改脉冲单位") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "允许切除显示") - { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); - } - else if (name == "反向输出允许") - { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); - } - else if (name == "电流输出类型") - { - if (number == 0) Console.WriteLine(name + ":0~10mA"); - else if (number == 1) Console.WriteLine(name + ":4~20mA"); - } - else if (name == "脉冲输出方式") - { - if (number == 0) Console.WriteLine(name + ":频率"); - else if (number == 1) Console.WriteLine(name + ":脉冲"); - } - else if (name == "频率输出范围") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "空管报警允许") - { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); - } - else if (name == "空管报警阈值") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "上限报警允许") - { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); - } - else if (name == "上限报警数值") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "下限报警允许") - { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); - } - else if (name == "下限报警数值") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "励磁报警允许") - { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); - } - else if (name == "传感器系数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "预留") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "空管采样值") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "报警信息") - { - if (number == 1) Console.WriteLine(name + ":瞬时流量单位选择错误"); - else if (number == 2) Console.WriteLine(name + ":空管"); - else if (number == 4) Console.WriteLine(name + ":下限报警"); - else if (number == 8) Console.WriteLine(name + ":上限报警"); - } - else if (name == "电流零点修正") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "电流满度修正") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "仪表量程设置") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "测量阻尼时间") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "流量方向选择项") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "累计热量小数") - { - Console.WriteLine(name + ":0." + number); - } - else if (name == "累计冷量小数") - { - Console.WriteLine(name + ":0." + number); + //不可修改可读 + 瞬时流量, + 供水温度 = 2, + 回水温度, + 采样值, + 累计流量整数, + 累计流量小数 = 7, + + //可修改可读 + 正累计流量整数, + + //不可修改可读 + 正累计流量小数 = 10, + + //可修改可读 + 负累计流量整数, + + //不可修改可读 + 负累计流量小数 = 13, + 瞬时热量, + + //可修改可读 + 修改版本号 = 16, + 语言, + 表地址, + 仪表通讯速度, + 修改口径, + 流量单位, + 流量积算单位, + 零点采样值, + 仪表系数, + 热量系数, + 供水温度系数, + 回水温度系数, + 小信号切除点, + 修改脉冲单位, + 允许切除显示, + 反向输出允许, + 电流输出类型, + 脉冲输出方式, + 频率输出范围, + 空管报警允许, + 空管报警阈值, + 上限报警允许, + 上限报警数值, + 下限报警允许, + 下限报警数值, + 励磁报警允许, + 传感器系数, + 预留, + + //不可修改可读 + 空管采样值, + 报警信息, + + //可修改可读 + 电流零点修正, + 电流满度修正, + 仪表量程设置, + 测量阻尼时间, + 流量方向选择项, + 累计热量整数, + 累计热量小数 = 53, + 累计冷量整数, + 累计冷量小数 = 56, } + } - - /// - /// ulong值类型解析 - /// - /// 变量名 - /// - public static void analysisUnit(string name, ulong number) - { - if (name == "瞬时流量") - { - number /= 1000;//此值单位为升 / 小时,需要除以 1000 得到立方米 / 小时 - Console.WriteLine(name + ":" + number + "m³/h"); - } - else if (name == "累计流量整数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "正累计流量整数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "负累计流量整数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "瞬时热量")//单位为 KJ/h(千焦每小时),若想得到 MJ/h 则需要除以 1000;换算成 KWh/h 需要除以 3600, - { - Console.WriteLine(name + ":" + number + "KJ/h"); - } - else if (name == "累计热量整数") - { - Console.WriteLine(name + ":" + number); - } - else if (name == "累计冷量整数") - { - Console.WriteLine(name + ":" + number); - } - - } - - /// - /// 寄存器类型 - /// - public enum qRegisterType - { - //不可修改可读 - 瞬时流量, - 供水温度 = 2, - 回水温度, - 采样值, - 累计流量整数, - 累计流量小数 = 7, - - //可修改可读 - 正累计流量整数, - - //不可修改可读 - 正累计流量小数 = 10, - - //可修改可读 - 负累计流量整数, - - //不可修改可读 - 负累计流量小数 = 13, - 瞬时热量, - - //可修改可读 - 修改版本号 = 16, - 语言, - 表地址, - 仪表通讯速度, - 修改口径, - 流量单位, - 流量积算单位, - 零点采样值, - 仪表系数, - 热量系数, - 供水温度系数, - 回水温度系数, - 小信号切除点, - 修改脉冲单位, - 允许切除显示, - 反向输出允许, - 电流输出类型, - 脉冲输出方式, - 频率输出范围, - 空管报警允许, - 空管报警阈值, - 上限报警允许, - 上限报警数值, - 下限报警允许, - 下限报警数值, - 励磁报警允许, - 传感器系数, - 预留, - - //不可修改可读 - 空管采样值, - 报警信息, - - //可修改可读 - 电流零点修正, - 电流满度修正, - 仪表量程设置, - 测量阻尼时间, - 流量方向选择项, - 累计热量整数, - 累计热量小数 = 53, - 累计冷量整数, - 累计冷量小数 = 56, - } - - } - - diff --git a/NengLiang/NengLiang.sln b/NengLiang/NengLiang.sln new file mode 100644 index 0000000..69208e0 --- /dev/null +++ b/NengLiang/NengLiang.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32929.386 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NengLiang", "NengLiang.csproj", "{3E0C57DE-5718-4030-A5CD-2EBA107FB7B6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3E0C57DE-5718-4030-A5CD-2EBA107FB7B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E0C57DE-5718-4030-A5CD-2EBA107FB7B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E0C57DE-5718-4030-A5CD-2EBA107FB7B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E0C57DE-5718-4030-A5CD-2EBA107FB7B6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DD8A19F4-BBBF-422D-BB76-7F0953F3DB46} + EndGlobalSection +EndGlobal diff --git a/NengLiang/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/NengLiang/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index a3d0b92..d54d421 100644 Binary files a/NengLiang/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/NengLiang/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/NengLiang/obj/Debug/NengLiang.csproj.AssemblyReference.cache b/NengLiang/obj/Debug/NengLiang.csproj.AssemblyReference.cache new file mode 100644 index 0000000..4625711 Binary files /dev/null and b/NengLiang/obj/Debug/NengLiang.csproj.AssemblyReference.cache differ