From 1af8e2f7058117c511a13a26bf0300780b7fc179 Mon Sep 17 00:00:00 2001 From: gaoguozheng Date: Sat, 25 Feb 2023 15:37:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=A1=B9=E7=9B=AE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...23f288a7-a2ea-4fe2-ad94-b1cea116a11b.vsidx | Bin 0 -> 34796 bytes ...32689ad0-5385-42e6-a838-2449d26337a0.vsidx | Bin 0 -> 22326 bytes ...3d6e0ca6-b16e-4dd1-a0d2-8ac14fdeb9be.vsidx | Bin 0 -> 48134 bytes ...9aa62488-0d6b-44d9-84cb-3590464903ee.vsidx | Bin 0 -> 26140 bytes .../.vs/NengLiang/FileContentIndex/read.lock | 0 NengLiang/.vs/NengLiang/v16/.suo | Bin 0 -> 51200 bytes NengLiang/.vs/NengLiang/v17/.suo | Bin 0 -> 97792 bytes NengLiang/NengLiang.cs | 1323 +++++++++-------- NengLiang/NengLiang.sln | 25 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6911 -> 6929 bytes .../NengLiang.csproj.AssemblyReference.cache | Bin 0 -> 1040 bytes 11 files changed, 687 insertions(+), 661 deletions(-) create mode 100644 NengLiang/.vs/NengLiang/FileContentIndex/23f288a7-a2ea-4fe2-ad94-b1cea116a11b.vsidx create mode 100644 NengLiang/.vs/NengLiang/FileContentIndex/32689ad0-5385-42e6-a838-2449d26337a0.vsidx create mode 100644 NengLiang/.vs/NengLiang/FileContentIndex/3d6e0ca6-b16e-4dd1-a0d2-8ac14fdeb9be.vsidx create mode 100644 NengLiang/.vs/NengLiang/FileContentIndex/9aa62488-0d6b-44d9-84cb-3590464903ee.vsidx create mode 100644 NengLiang/.vs/NengLiang/FileContentIndex/read.lock create mode 100644 NengLiang/.vs/NengLiang/v16/.suo create mode 100644 NengLiang/.vs/NengLiang/v17/.suo create mode 100644 NengLiang/NengLiang.sln create mode 100644 NengLiang/obj/Debug/NengLiang.csproj.AssemblyReference.cache 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 0000000000000000000000000000000000000000..959cd832e92ddbe5e94fd0625ea6e5b5e00ad5b0 GIT binary patch literal 34796 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 P%fkNm8Y&haH01vQjsl5u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..da8024550ae1f41f69147c27ca12ee1906030964 GIT binary patch literal 22326 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..68e0be5d3f455fce012c810835dd7bb54b9495e8 GIT binary patch literal 48134 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2911dad9b6a5530be5b27304d9e2d243b0357fee GIT binary patch literal 26140 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7bf9abf37a9ecb3e0294c430fcc749b837716097 GIT binary patch literal 51200 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 literal 0 HcmV?d00001 diff --git a/NengLiang/.vs/NengLiang/v17/.suo b/NengLiang/.vs/NengLiang/v17/.suo new file mode 100644 index 0000000000000000000000000000000000000000..d74ed5c9452298eeeccc8916f0a31bdee00a860a GIT binary patch literal 97792 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 - /// 在线用户列表 - /// - 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 a3d0b92b7a462c23270e2c2e134bf76a5a3e2a33..d54d4211b54231d2858f683c51b12f32c5f427de 100644 GIT binary patch delta 156 zcmexwI?-&y5^lzj$$xpoIsH=e(tR=$^U^0D;=akK4HA=ri^Vt=6zC=A=cQ$)vq>>9 xFc^TO8ZsqHPS#e7HGyw@yap=p^9w|- delta 146 zcmbPe_TO~F5^l!8$rpIU*<3Oc^O7?sALYKur~wiXhX}+t78K|u=jWwmrn5;gFfiyM zEB?SE%4iA_P=P8AD9SHLEh@=OEsjY9>dQ^c%S=lxE@6`a>hwp_xjBWmhznv5)Z)$G H#if`5gCj9S diff --git a/NengLiang/obj/Debug/NengLiang.csproj.AssemblyReference.cache b/NengLiang/obj/Debug/NengLiang.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..46257113dc7d3a31fc72033e378ccd2c76cea098 GIT binary patch literal 1040 zcmeZu3JP{+WMpJuU|k&q>V8OHay7%#ZN{@_aHA^U`Aq5|gtN z(^HFMa`Mwn@={CmjPwljEMjsplYm-EOiXptN^^4Hk|{YkV1pwp3nmMS-R1yV!w%KR z$ON$1{H{9Q-Dl1kduJ?pkPNs1{RP57#TEcPo3m=)YfUnJd>%K zZ^_wK{oN%G-%fotb?L6q(-$w4zEL>4^;iDU$(OGd230GB_U2nY{BrgDgUS|-qn(EZ zrvJm(fM!RZPC;*34d8OyX2Yc!8sdpw4cXsx~SB+wDtF^{nZzz zUYjPpP*@}X@T0ctyRS`9Id_W@6g+A3c<*y>T&2b61@)VbLRe~1ab|v=Ejak~40IHn zOLIy}i&Aa#QcFvU5_5DE0!ou|GLyYiD?{?LQ}b-i%q&w4Qc}_kl9CJ)6O9sq#xgLn zg9t`Oj@;tp{32jTF#>&!6@ViJBm;^RAPI8S_NtgLNs|Yi5D`X3w&2R*lGI#^%;1KY zq34oVl1Pz3Tu_4|a&xF+PIxM5fwRFrzFzPumlZ5