From c1e5e8a60e0af5f9dc86b65a1c9a784fd0faea6d Mon Sep 17 00:00:00 2001 From: gaoguozheng Date: Mon, 27 Feb 2023 10:28:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E8=A1=A8=E6=B1=87=E6=80=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0db82c5e-7820-42f7-b1d7-71466095d20a.vsidx | Bin 0 -> 10465 bytes ...52831988-186e-44c6-b11b-df3240283bd2.vsidx | Bin 0 -> 54296 bytes ...b4caea7-e323-4182-acf9-8b72215045b0.vsidx} | Bin NengLiang/.vs/NengLiang/v17/.suo | Bin 70144 -> 60928 bytes NengLiang/Models/energy_data.cs | 543 ++++++++++++++++++ NengLiang/NengLiang.cs | 366 +++++++++--- NengLiang/NengLiang.csproj | 1 + NengLiang/NengLiang.csproj.user | 6 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6994 -> 7022 bytes .../NengLiang.csproj.AssemblyReference.cache | Bin 5406 -> 6443 bytes 10 files changed, 826 insertions(+), 90 deletions(-) create mode 100644 NengLiang/.vs/NengLiang/FileContentIndex/0db82c5e-7820-42f7-b1d7-71466095d20a.vsidx create mode 100644 NengLiang/.vs/NengLiang/FileContentIndex/52831988-186e-44c6-b11b-df3240283bd2.vsidx rename NengLiang/.vs/NengLiang/FileContentIndex/{6592445c-a0e2-4a53-a304-0771e6289d56.vsidx => 5b4caea7-e323-4182-acf9-8b72215045b0.vsidx} (100%) create mode 100644 NengLiang/Models/energy_data.cs create mode 100644 NengLiang/NengLiang.csproj.user diff --git a/NengLiang/.vs/NengLiang/FileContentIndex/0db82c5e-7820-42f7-b1d7-71466095d20a.vsidx b/NengLiang/.vs/NengLiang/FileContentIndex/0db82c5e-7820-42f7-b1d7-71466095d20a.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..962922f054f22afadd5b81e9d64ae62bd22b31fa GIT binary patch literal 10465 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 Ap8x;= literal 0 HcmV?d00001 diff --git a/NengLiang/.vs/NengLiang/FileContentIndex/52831988-186e-44c6-b11b-df3240283bd2.vsidx b/NengLiang/.vs/NengLiang/FileContentIndex/52831988-186e-44c6-b11b-df3240283bd2.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..7a5a8d45c8d66f77648aa4dc93bc0a40626bf98d GIT binary patch literal 54296 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 diff --git a/NengLiang/Models/energy_data.cs b/NengLiang/Models/energy_data.cs new file mode 100644 index 0000000..f370c37 --- /dev/null +++ b/NengLiang/Models/energy_data.cs @@ -0,0 +1,543 @@ +/** 版本信息模板在安装目录下,可自行修改。 +* energy_data.cs +* +* 功 能: N/A +* 类 名: energy_data +* +* Ver 变更日期 负责人 变更内容 +* ─────────────────────────────────── +* V0.01 2023/2/26 19:05:08 N/A 初版 +* +* Copyright (c) 2012 Maticsoft Corporation. All rights reserved. +*┌──────────────────────────────────┐ +*│ 此技术信息为本公司机密信息,未经本公司书面同意禁止向第三方披露. │ +*│ 版权所有:动软卓越(北京)科技有限公司              │ +*└──────────────────────────────────┘ +*/ +using System; +namespace DataService.Model +{ + /// + /// energy_data:实体类(属性说明自动提取数据库字段的描述信息) + /// + [Serializable] + public partial class energy_data + { + public energy_data() + {} + #region Model + private string _energy_id; + private string _device_id; + private decimal? _supply_water_temperature; + private decimal? _return_water_temperature; + private decimal? _instantaneous_delivery; + private decimal? _sampling_value; + private decimal? _cumulative_traffic; + private decimal? _positive_total_flow; + private decimal? _negative_total_flow; + private decimal? _instant_heat; + private string _revised_version_number; + private string _lang; + private string _table_address; + private int? _meter_communication_speed; + private decimal? _modified_caliber; + private string _flow_unit; + private string _flow_integration_unit; + private decimal? _zero_sample_value; + private decimal? _meter_factor; + private decimal? _heat_coefficient; + private decimal? _supply_water_temperature_coefficient; + private decimal? _return_temperature_coefficient; + private decimal? _small_signal_cut_off_point; + private decimal? _modify_pulse_unit; + private string _allow_cutout_display; + private string _reverseoutputallows; + private string _current_output_type; + private string _pulse_output_mode; + private string _frequency_output_range; + private string _empty_traffic_alarm_allowed; + private decimal? _empty_traffic_alarm_threshold; + private string _high_limit_alarm_allows; + private decimal? _upper_alarm_value; + private string _lower_limit_alarm_allowed; + private decimal? _lower_limit_alarm_value; + private string _excitation_alarm_allows; + private decimal? _sensor_coefficient; + private decimal? _empty_pipe_sampling_value; + private string _alarm_information; + private decimal? _current_zero_correction; + private decimal? _current_full_scale_correction; + private string _meter_range_setting; + private string _measure_damping_time; + private string _flow_direction_option; + private decimal? _cumulative_heat; + private decimal? _cumulative_cooling_capacity; + private DateTime? _input_date; + private DateTime? _create_time; + private string _r1; + private string _r2; + private string _r3; + /// + /// 主键 + /// + public string energy_id + { + set{ _energy_id=value;} + get{return _energy_id;} + } + /// + /// 设备外键 + /// + public string device_id + { + set{ _device_id=value;} + get{return _device_id;} + } + /// + /// 供水温度 + /// + public decimal? supply_water_temperature + { + set{ _supply_water_temperature=value;} + get{return _supply_water_temperature;} + } + /// + /// 回水温度 + /// + public decimal? return_water_temperature + { + set{ _return_water_temperature=value;} + get{return _return_water_temperature;} + } + /// + /// 瞬时流量 + /// + public decimal? instantaneous_delivery + { + set{ _instantaneous_delivery=value;} + get{return _instantaneous_delivery;} + } + /// + /// 采样值 + /// + public decimal? sampling_value + { + set{ _sampling_value=value;} + get{return _sampling_value;} + } + /// + /// 累计流量 + /// + public decimal? cumulative_traffic + { + set{ _cumulative_traffic=value;} + get{return _cumulative_traffic;} + } + /// + /// 正累计流量 + /// + public decimal? positive_total_flow + { + set{ _positive_total_flow=value;} + get{return _positive_total_flow;} + } + /// + /// 负累计流量 + /// + public decimal? negative_total_flow + { + set{ _negative_total_flow=value;} + get{return _negative_total_flow;} + } + /// + /// 瞬时热量 + /// + public decimal? instant_heat + { + set{ _instant_heat=value;} + get{return _instant_heat;} + } + /// + /// 修改版本号 + /// + public string revised_version_number + { + set{ _revised_version_number=value;} + get{return _revised_version_number;} + } + /// + /// 语言 + /// + public string lang + { + set{ _lang=value;} + get{return _lang;} + } + /// + /// 表地址 + /// + public string table_address + { + set{ _table_address=value;} + get{return _table_address;} + } + /// + /// 仪表通讯速度 + /// + public int? meter_communication_speed + { + set{ _meter_communication_speed=value;} + get{return _meter_communication_speed;} + } + /// + /// 修改口径 + /// + public decimal? modified_caliber + { + set{ _modified_caliber=value;} + get{return _modified_caliber;} + } + /// + /// 流量单位 + /// + public string flow_unit + { + set{ _flow_unit=value;} + get{return _flow_unit;} + } + /// + /// 流量积算单位 + /// + public string flow_integration_unit + { + set{ _flow_integration_unit=value;} + get{return _flow_integration_unit;} + } + /// + /// 零点采样值 + /// + public decimal? zero_sample_value + { + set{ _zero_sample_value=value;} + get{return _zero_sample_value;} + } + /// + /// 仪表系数 + /// + public decimal? meter_factor + { + set{ _meter_factor=value;} + get{return _meter_factor;} + } + /// + /// 热量系数 + /// + public decimal? heat_coefficient + { + set{ _heat_coefficient=value;} + get{return _heat_coefficient;} + } + /// + /// 供水温度系数 + /// + public decimal? supply_water_temperature_coefficient + { + set{ _supply_water_temperature_coefficient=value;} + get{return _supply_water_temperature_coefficient;} + } + /// + /// 回水温度系数 + /// + public decimal? return_temperature_coefficient + { + set{ _return_temperature_coefficient=value;} + get{return _return_temperature_coefficient;} + } + /// + /// 小信号切除点 + /// + public decimal? small_signal_cut_off_point + { + set{ _small_signal_cut_off_point=value;} + get{return _small_signal_cut_off_point;} + } + /// + /// 修改脉冲单位 + /// + public decimal? modify_pulse_unit + { + set{ _modify_pulse_unit=value;} + get{return _modify_pulse_unit;} + } + /// + /// 允许切除显示 + /// + public string allow_cutout_display + { + set{ _allow_cutout_display=value;} + get{return _allow_cutout_display;} + } + /// + /// 反向输出允许 + /// + public string ReverseOutputAllows + { + set{ _reverseoutputallows=value;} + get{return _reverseoutputallows;} + } + /// + /// 电流输出类型 + /// + public string current_output_type + { + set{ _current_output_type=value;} + get{return _current_output_type;} + } + /// + /// 脉冲输出方式 + /// + public string pulse_output_mode + { + set{ _pulse_output_mode=value;} + get{return _pulse_output_mode;} + } + /// + /// 频率输出范围 + /// + public string frequency_output_range + { + set{ _frequency_output_range=value;} + get{return _frequency_output_range;} + } + /// + /// 空管报警允许 + /// + public string empty_traffic_alarm_allowed + { + set{ _empty_traffic_alarm_allowed=value;} + get{return _empty_traffic_alarm_allowed;} + } + /// + /// 空管报警阈值 + /// + public decimal? empty_traffic_alarm_threshold + { + set{ _empty_traffic_alarm_threshold=value;} + get{return _empty_traffic_alarm_threshold;} + } + /// + /// 上限报警允许 + /// + public string high_limit_alarm_allows + { + set{ _high_limit_alarm_allows=value;} + get{return _high_limit_alarm_allows;} + } + /// + /// 上限报警数值 + /// + public decimal? upper_alarm_value + { + set{ _upper_alarm_value=value;} + get{return _upper_alarm_value;} + } + /// + /// 下限报警允许 + /// + public string lower_limit_alarm_allowed + { + set{ _lower_limit_alarm_allowed=value;} + get{return _lower_limit_alarm_allowed;} + } + /// + /// 下限报警数值 + /// + public decimal? lower_limit_alarm_value + { + set{ _lower_limit_alarm_value=value;} + get{return _lower_limit_alarm_value;} + } + /// + /// 励磁报警允许 + /// + public string excitation_alarm_allows + { + set{ _excitation_alarm_allows=value;} + get{return _excitation_alarm_allows;} + } + /// + /// 传感器系数 + /// + public decimal? sensor_coefficient + { + set{ _sensor_coefficient=value;} + get{return _sensor_coefficient;} + } + /// + /// 空管采样值 + /// + public decimal? empty_pipe_sampling_value + { + set{ _empty_pipe_sampling_value=value;} + get{return _empty_pipe_sampling_value;} + } + /// + /// 报警信息 + /// + public string alarm_information + { + set{ _alarm_information=value;} + get{return _alarm_information;} + } + /// + /// 电流零点修正 + /// + public decimal? current_zero_correction + { + set{ _current_zero_correction=value;} + get{return _current_zero_correction;} + } + /// + /// 电流满度修正 + /// + public decimal? current_full_scale_correction + { + set{ _current_full_scale_correction=value;} + get{return _current_full_scale_correction;} + } + /// + /// 仪表量程设置 + /// + public string meter_range_setting + { + set{ _meter_range_setting=value;} + get{return _meter_range_setting;} + } + /// + /// 测量阻尼时间 + /// + public string measure_damping_time + { + set{ _measure_damping_time=value;} + get{return _measure_damping_time;} + } + /// + /// 流量方向选择项 + /// + public string flow_direction_option + { + set{ _flow_direction_option=value;} + get{return _flow_direction_option;} + } + /// + /// 累计热量 + /// + public decimal? cumulative_heat + { + set{ _cumulative_heat=value;} + get{return _cumulative_heat;} + } + /// + /// 累计冷量 + /// + public decimal? cumulative_cooling_capacity + { + set{ _cumulative_cooling_capacity=value;} + get{return _cumulative_cooling_capacity;} + } + /// + /// 录入日期 + /// + public DateTime? input_date + { + set{ _input_date=value;} + get{return _input_date;} + } + /// + /// 创建时间 + /// + public DateTime? create_time + { + set{ _create_time=value;} + get{return _create_time;} + } + /// + /// 备用1 + /// + public string r1 + { + set{ _r1=value;} + get{return _r1;} + } + /// + /// 备用2 + /// + public string r2 + { + set{ _r2=value;} + get{return _r2;} + } + /// + /// 备用3 + /// + public string r3 + { + set{ _r3=value;} + get{return _r3;} + } + #endregion Model + + + + + /// + /// 正累计流量整数 + /// + public string positive_total_flowA { get { return positive_total_flowA; } set { positive_total_flowA = value; } } + /// + /// 正累计流量小数 + /// + public string positive_total_flowB { get { return positive_total_flowB; } set { positive_total_flowB = value; } } + + + /// + /// 累计流量整数 + /// + public string cumulative_trafficA { get { return cumulative_trafficA; } set { cumulative_trafficA = value} } + /// + /// 累计流量小数 + /// + public string cumulative_trafficB { get { return cumulative_trafficB; } set { cumulative_trafficB=value} } + + + /// + /// 负累计流量整数 + /// + public string negative_total_flowA { get { return negative_total_flowA; } set { negative_total_flowA = value; } } + /// + /// 负累计流量小数 + /// + public string negative_total_flowB { get { return negative_total_flowB; } set { negative_total_flowB = value; } } + + + /// + /// 累计热量整数 + /// + public string cumulative_heatA { get { return cumulative_heatA; } set { cumulative_heatA = value; } } + /// + /// 累计热量小数 + /// + public string cumulative_heatB { get { return cumulative_heatB; } set { cumulative_heatB = value; } } + + + /// + /// 累计冷量整数 + /// + public string cumulative_cooling_capacityA { get { return cumulative_cooling_capacityA; } set { cumulative_cooling_capacityA = value; } } + /// + /// 累计冷量小数 + /// + public string cumulative_cooling_capacityB { get { return cumulative_cooling_capacityB; } set { cumulative_cooling_capacityB = value; } } + } +} + diff --git a/NengLiang/NengLiang.cs b/NengLiang/NengLiang.cs index e4e7b68..e643ef3 100644 --- a/NengLiang/NengLiang.cs +++ b/NengLiang/NengLiang.cs @@ -1,13 +1,17 @@ using CRClib; +using DataService.Model; using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; +using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; +using System.Xml.Linq; using ToolKitlib; + namespace NengLiang { internal class NengLiang @@ -38,7 +42,7 @@ namespace NengLiang /// /// 当前请求数据类型 /// - public static ushort index_id ; + public static ushort index_id; /// /// 报文发送间隔时间 /// @@ -136,22 +140,26 @@ namespace NengLiang Console.WriteLine("发送报文time " + T + " 毫秒,loop间隔 " + loopTime + " 秒"); byte devAdd = 0x01; byte code = 0x03; - byte[] bytes;// 发送字节 + ushort start = (ushort)0; + ushort length = ushort.Parse("0033"); + //byte[] bytes;// 发送字节 foreach (var v in OnLineDic.Values) { - foreach (var item in RegisterType.Keys) - { - if (T >= 0) { Thread.Sleep(T); } - else continue; - 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); - index_id = start;//记录当前请求数据 地址码 - } + Thread.Sleep(T); + ReadKsepRsgistecs(devAdd, code, start, length); + //foreach (var item in RegisterType.Keys) + //{ + // if (T >= 0) { Thread.Sleep(T); } + // else continue; + // 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); + // index_id = start;//记录当前请求数据 地址码 + //} } } } @@ -309,7 +317,7 @@ namespace NengLiang { //执行解析 log.Info("接收到" + clientSocket.RemoteEndPoint + ": " + _message); - JudgmentFunction(message); + JudgmentFunction(bytes); } } } @@ -352,21 +360,18 @@ namespace NengLiang /// 判断功能类型 /// /// - public static void JudgmentFunction(string message) + public static void JudgmentFunction(/*string message*/byte[] message) { try { - string order = message[2].ToString() + message[3].ToString();//命令 + //tring order = message[2].ToString() + message[3].ToString();//命令 + var order = message[1];//命令 - var key = (int)index_id;//获取 地址码 - if (order == "03")//读取命令 + //var key = (int)index_id;//获取 地址码 + if (order == 0x03)//读取命令 { - 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; + //if (!RegisterType.ContainsKey(key) || RegisterType[key][2][1] == 'n') return; + readData(message); } } catch (Exception e) @@ -417,29 +422,37 @@ namespace NengLiang /// /// /// 地址码 - public static void readData(string message, int key) + public static void readData(byte[] message) { + energy_data energy_Data = new energy_data(); 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++) + int a = 3; //message[3]开始 + List by = new List(); + var _readSum = message[2]; + int readSum = (int)message[2];//变量总字节数 + foreach (var item in RegisterType.Keys) { - 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); + for (int i = a; i < a + int.Parse(RegisterType[item][3]); i++) + { + by.Add(message[i]); + } + a += by.Count; + var data = ToolKit.listToBytes(by);//每组数值 + var num = Convert.ToInt64(ToolKit.byteArrayToString(data, encoding), 16);//获取值 + var aa = RegisterType[item][1].ToLower(); + if (aa == "ulong") + { + var number = (ulong)num; + analysisUlong(RegisterType[item][0], number, energy_Data); + } + else + { + var number = (uint)num; + analysisUnit(RegisterType[item][0], number, energy_Data); + } } + //energy_data对象取值完毕 } catch (Exception e) { @@ -448,178 +461,320 @@ namespace NengLiang } } + /// /// unit值类型解析 /// /// 变量名 /// - public static void analysisUnit(string name, uint number) + public static void analysisUnit(string name, uint number, energy_data ed) { if (name == "供水温度") { number /= 100; Console.WriteLine(name + ":" + number + "℃"); + ed.supply_water_temperature = number; } else if (name == "回水温度") { number /= 100; Console.WriteLine(name + ":" + number + "℃"); + ed.return_water_temperature = number; } else if (name == "采样值") { Console.WriteLine(name + ":" + number); + ed.sampling_value = number; } else if (name == "累计流量小数") { Console.WriteLine(name + ":0." + number); + ed.cumulative_trafficB = number.ToString(); } else if (name == "正累计流量小数") { Console.WriteLine(name + ":0." + number); + ed.positive_total_flowB = number.ToString(); } else if (name == "负累计流量小数") { Console.WriteLine(name + ":0." + number); + ed.negative_total_flowB = number.ToString(); } else if (name == "修改版本号") { Console.WriteLine(name + ":" + number); + ed.revised_version_number = number.ToString(); } else if (name == "语言") { - if (number == 0) Console.WriteLine(name + ":中文"); - else if (number == 1) Console.WriteLine(name + ":英文"); + if (number == 0) { Console.WriteLine(name + ":中文"); ed.lang = "中文"; } + else if (number == 1) { Console.WriteLine(name + ":英文"); ed.lang = "英文"; } } else if (name == "表地址") { Console.WriteLine(name + ":" + number); + ed.table_address = number.ToString(); } 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; } + if (number == 0) { Console.WriteLine(name + ":300"); ed.meter_communication_speed = 300;/*TRAS = 1000 / 300 * 12.5f;*/ TRAS = 3.5f * 9 / 0.3f; } + else if (number == 1) { Console.WriteLine(name + ":2400"); ed.meter_communication_speed = 2400;/*TRAS = 1000 / 2400 * 12.5f;*/ TRAS = 3.5f * 9 / 2.4f; } + else if (number == 2) { Console.WriteLine(name + ":14400"); ed.meter_communication_speed = 14400; /*TRAS = 1000 / 14400 * 12.5f; */TRAS = 3.5f * 9 / 14.4f; } + else if (number == 3) { Console.WriteLine(name + ":600"); ed.meter_communication_speed = 600; /*TRAS = 1000 / 600 * 12.5f; */TRAS = 3.5f * 9 / 0.6f; } + else if (number == 4) { Console.WriteLine(name + ":4800"); ed.meter_communication_speed = 4800;/* TRAS = 1000 / 4800 * 12.5f;*/ TRAS = 3.5f * 9 / 4.8f; } + else if (number == 5) { Console.WriteLine(name + ":19200"); ed.meter_communication_speed = 19200;/*TRAS = 1000 / 19200 * 12.5f;*/ TRAS = 3.5f * 9 / 19.2f; } + else if (number == 6) { Console.WriteLine(name + ":1200"); ed.meter_communication_speed = 1200;/*TRAS = 1000 / 1200 * 12.5f; */TRAS = 3.5f * 9 / 1.2f; } + else if (number == 7) { Console.WriteLine(name + ":9600"); ed.meter_communication_speed = 9600;/*TRAS = 1000 / 9600 * 12.5f;*/ TRAS = 3.5f * 9 / 9.6f; } + else if (number == 8) { Console.WriteLine(name + ":38400"); ed.meter_communication_speed = 38400;/*TRAS = 1000 / 38400 * 12.5f;*/ TRAS = 3.5f * 9 / 38.4f; } } else if (name == "修改口径") { Console.WriteLine(name + ":" + number); + ed.modified_caliber = 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"); + if (number == 0) + { + Console.WriteLine(name + ":L/H"); + ed.flow_unit = "L/H"; + } + else if (number == 1) + { + Console.WriteLine(name + ":L/M"); + ed.flow_unit = "L/M"; + } + else if (number == 2) + { + Console.WriteLine(name + ":L/S"); + ed.flow_unit = "L/S"; + } + else if (number == 3) + { + Console.WriteLine(name + ":M³/H"); + ed.flow_unit = "M³/H"; + } + else if (number == 4) + { + Console.WriteLine(name + ":M³/M"); + ed.flow_unit = "M³/M"; + } + else if (number == 5) + { + Console.WriteLine(name + ":M³/S"); + ed.flow_unit = "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³"); + if (number == 0) + { + Console.WriteLine(name + ":0.001L"); + ed.flow_integration_unit = "0.001L"; + } + else if (number == 1) + { + Console.WriteLine(name + ":0.001M³"); + ed.flow_integration_unit = "0.001M³"; + } + else if (number == 2) + { + Console.WriteLine(name + ":0.01L"); + ed.flow_integration_unit = "0.01L"; + } + else if (number == 3) + { + Console.WriteLine(name + ":0.1L"); + ed.flow_integration_unit = "0.1L"; + } + else if (number == 4) + { + Console.WriteLine(name + ":1L"); + ed.flow_integration_unit = "1L"; + } + else if (number == 5) + { + Console.WriteLine(name + ":0.01M³"); + ed.flow_integration_unit = "0.01M³"; + } + else if (number == 6) + { + Console.WriteLine(name + ":0.1M³"); + ed.flow_integration_unit = "0.1M³"; + } + else if (number == 7) + { + Console.WriteLine(name + ":1M³"); + ed.flow_integration_unit = "1M³"; + } } else if (name == "零点采样值") { Console.WriteLine(name + ":" + number); + ed.zero_sample_value = number; } else if (name == "仪表系数") { Console.WriteLine(name + ":" + number); + ed.meter_factor = number; } else if (name == "热量系数") { Console.WriteLine(name + ":" + number); + ed.heat_coefficient = number; } else if (name == "供水温度系数") { Console.WriteLine(name + ":" + number); + ed.supply_water_temperature_coefficient = number; } else if (name == "回水温度系数") { Console.WriteLine(name + ":" + number); + ed.return_temperature_coefficient = number; } else if (name == "小信号切除点") { Console.WriteLine(name + ":" + number); + ed.small_signal_cut_off_point = number; } else if (name == "修改脉冲单位") { Console.WriteLine(name + ":" + number); + ed.modify_pulse_unit = number; } else if (name == "允许切除显示") { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); + if (number == 0) + { + Console.WriteLine(name + ":允许"); + ed.allow_cutout_display = "允许"; + } + else if (number == 1) + { + Console.WriteLine(name + ":禁止"); + ed.allow_cutout_display = "禁止"; + } } else if (name == "反向输出允许") { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); + if (number == 0) + { + Console.WriteLine(name + ":允许"); + ed.ReverseOutputAllows = "允许"; + } + else if (number == 1) + { + Console.WriteLine(name + ":禁止"); + ed.ReverseOutputAllows = "禁止"; + } } else if (name == "电流输出类型") { - if (number == 0) Console.WriteLine(name + ":0~10mA"); - else if (number == 1) Console.WriteLine(name + ":4~20mA"); + if (number == 0) + { + Console.WriteLine(name + ":0~10mA"); + ed.current_output_type = "0~10mA"; + } + else if (number == 1) + { + Console.WriteLine(name + ":4~20mA"); + ed.current_output_type = "4~20mA"; + } } else if (name == "脉冲输出方式") { - if (number == 0) Console.WriteLine(name + ":频率"); - else if (number == 1) Console.WriteLine(name + ":脉冲"); + if (number == 0) + { + Console.WriteLine(name + ":频率"); + ed.pulse_output_mode = "频率"; + } + else if (number == 1) + { + Console.WriteLine(name + ":脉冲"); + ed.pulse_output_mode = "脉冲"; + } } else if (name == "频率输出范围") { Console.WriteLine(name + ":" + number); + ed.frequency_output_range = number.ToString(); } else if (name == "空管报警允许") { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); + if (number == 0) + { + Console.WriteLine(name + ":允许"); + ed.empty_traffic_alarm_allowed = "允许"; + } + else if (number == 1) + { + Console.WriteLine(name + ":禁止"); + ed.empty_traffic_alarm_allowed = "禁止"; + } } else if (name == "空管报警阈值") { Console.WriteLine(name + ":" + number); + ed.empty_traffic_alarm_threshold = number; } else if (name == "上限报警允许") { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); + if (number == 0) + { + Console.WriteLine(name + ":允许"); + ed.high_limit_alarm_allows = "允许"; + } + else if (number == 1) + { + Console.WriteLine(name + ":禁止"); + ed.high_limit_alarm_allows = "禁止"; + } } else if (name == "上限报警数值") { Console.WriteLine(name + ":" + number); + ed.upper_alarm_value= number; } else if (name == "下限报警允许") { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); + if (number == 0) + { + Console.WriteLine(name + ":允许"); + ed.lower_limit_alarm_allowed = "允许"; + } + else if (number == 1) + { + Console.WriteLine(name + ":禁止"); + ed.lower_limit_alarm_allowed = "禁止"; + } } else if (name == "下限报警数值") { Console.WriteLine(name + ":" + number); + ed.lower_limit_alarm_value = number; } else if (name == "励磁报警允许") { - if (number == 0) Console.WriteLine(name + ":允许"); - else if (number == 1) Console.WriteLine(name + ":禁止"); + if (number == 0) + { + Console.WriteLine(name + ":允许"); + ed.excitation_alarm_allows = "允许"; + } + else if (number == 1) + { + Console.WriteLine(name + ":禁止"); + ed.excitation_alarm_allows = "禁止"; + } } else if (name == "传感器系数") { Console.WriteLine(name + ":" + number); + ed.sensor_coefficient= number; } else if (name == "预留") { @@ -628,41 +783,65 @@ namespace NengLiang else if (name == "空管采样值") { Console.WriteLine(name + ":" + number); + ed.empty_pipe_sampling_value = 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 + ":上限报警"); + if (number == 1) + { + Console.WriteLine(name + ":瞬时流量单位选择错误"); + ed.alarm_information = "瞬时流量单位选择错误"; + } + else if (number == 2) + { + Console.WriteLine(name + ":空管"); + ed.alarm_information = "空管"; + } + else if (number == 4) + { + Console.WriteLine(name + ":下限报警"); + ed.alarm_information = "下限报警"; + } + else if (number == 8) + { + Console.WriteLine(name + ":上限报警"); + ed.alarm_information = "上限报警"; + } } else if (name == "电流零点修正") { Console.WriteLine(name + ":" + number); + ed.current_zero_correction= number; } else if (name == "电流满度修正") { Console.WriteLine(name + ":" + number); + ed.current_full_scale_correction= number; } else if (name == "仪表量程设置") { Console.WriteLine(name + ":" + number); + ed.meter_range_setting= number.ToString(); } else if (name == "测量阻尼时间") { Console.WriteLine(name + ":" + number); + ed.measure_damping_time= number.ToString(); } else if (name == "流量方向选择项") { Console.WriteLine(name + ":" + number); + ed.flow_direction_option= number.ToString(); } else if (name == "累计热量小数") { Console.WriteLine(name + ":0." + number); + ed.cumulative_heatB = number.ToString(); } else if (name == "累计冷量小数") { Console.WriteLine(name + ":0." + number); + ed.cumulative_cooling_capacityB= number.ToString(); } } @@ -672,36 +851,43 @@ namespace NengLiang /// /// 变量名 /// - public static void analysisUnit(string name, ulong number) + public static void analysisUlong(string name, ulong number, energy_data ed) { if (name == "瞬时流量") { number /= 1000;//此值单位为升 / 小时,需要除以 1000 得到立方米 / 小时 Console.WriteLine(name + ":" + number + "m³/h"); + ed.instantaneous_delivery = number; } else if (name == "累计流量整数") { Console.WriteLine(name + ":" + number); + ed.cumulative_trafficA = number.ToString(); } else if (name == "正累计流量整数") { Console.WriteLine(name + ":" + number); + ed.positive_total_flowA = number.ToString(); } else if (name == "负累计流量整数") { Console.WriteLine(name + ":" + number); + ed.negative_total_flowA = number.ToString(); } else if (name == "瞬时热量")//单位为 KJ/h(千焦每小时),若想得到 MJ/h 则需要除以 1000;换算成 KWh/h 需要除以 3600, { Console.WriteLine(name + ":" + number + "KJ/h"); + ed.instant_heat = number; } else if (name == "累计热量整数") { Console.WriteLine(name + ":" + number); + ed.cumulative_heatA= number.ToString(); } else if (name == "累计冷量整数") { Console.WriteLine(name + ":" + number); + ed.cumulative_cooling_capacityA= number.ToString(); } } diff --git a/NengLiang/NengLiang.csproj b/NengLiang/NengLiang.csproj index f9bda20..f6a2159 100644 --- a/NengLiang/NengLiang.csproj +++ b/NengLiang/NengLiang.csproj @@ -59,6 +59,7 @@ + diff --git a/NengLiang/NengLiang.csproj.user b/NengLiang/NengLiang.csproj.user new file mode 100644 index 0000000..9b86104 --- /dev/null +++ b/NengLiang/NengLiang.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/NengLiang/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/NengLiang/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index a423998117c182ddf601b77acb34183f8309b179..5c782ae5d7f9dfe456f01842bfaa7f72dfc3f5d8 100644 GIT binary patch delta 170 zcmca)_Reg>B5vLY7ps^E-xz1*7#Bys$qEvZlaFxU;B~|h-N&QItB)=!<5*Cjmz