清空项目
This commit is contained in:
parent
fc03c615ea
commit
970af5ef29
|
@ -1,25 +0,0 @@
|
|||
**/.classpath
|
||||
**/.dockerignore
|
||||
**/.env
|
||||
**/.git
|
||||
**/.gitignore
|
||||
**/.project
|
||||
**/.settings
|
||||
**/.toolstarget
|
||||
**/.vs
|
||||
**/.vscode
|
||||
**/*.*proj.user
|
||||
**/*.dbmdl
|
||||
**/*.jfm
|
||||
**/azds.yaml
|
||||
**/bin
|
||||
**/charts
|
||||
**/docker-compose*
|
||||
**/Dockerfile*
|
||||
**/node_modules
|
||||
**/npm-debug.log
|
||||
**/obj
|
||||
**/secrets.dev.yaml
|
||||
**/values.dev.yaml
|
||||
LICENSE
|
||||
README.md
|
|
@ -1,22 +0,0 @@
|
|||
/WeatherStation/obj
|
||||
/WeatherStation/bin
|
||||
/IntelligenceBoard/obj
|
||||
/IntelligenceBoard/bin
|
||||
/GatherAPI/obj
|
||||
/GatherAPI/bin
|
||||
/Gather.Mysql/obj
|
||||
/Gather.Mysql/bin
|
||||
/Gather.Model/obj
|
||||
/Gather.Model/bin
|
||||
/Gather.IDAL/bin
|
||||
/Gather.IDAL/obj
|
||||
/Gather.IBLL/obj
|
||||
/Gather.IBLL/bin
|
||||
/Gather.DAL/obj
|
||||
/Gather.DAL/bin
|
||||
/Gather.Common/obj
|
||||
/Gather.Common/bin
|
||||
/Gather.BLL/obj
|
||||
/Gather.BLL/bin
|
||||
/.vs/GatherAPI
|
||||
/.vs
|
|
@ -1,34 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
|
||||
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
|
||||
|
||||
</configSections>
|
||||
<log4net>
|
||||
<root>
|
||||
<level value="ALL" />
|
||||
<appender-ref ref="SysAppender" />
|
||||
</root>
|
||||
<logger name="WebLogger">
|
||||
<level value="DEBUG" />
|
||||
</logger>
|
||||
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
|
||||
<param name="File" value="App_Data/" />
|
||||
<param name="AppendToFile" value="true" />
|
||||
<param name="RollingStyle" value="Date" />
|
||||
<param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />
|
||||
<param name="StaticLogFileName" value="false" />
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
<param name="Header" value=" ------------------------------------------------
" />
|
||||
<param name="Footer" value=" ------------------------------------------------
" />
|
||||
</layout>
|
||||
</appender>
|
||||
<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
</log4net>
|
||||
</configuration>
|
|
@ -1,29 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="HslCommunication" Version="12.3.0" />
|
||||
<PackageReference Include="log4net" Version="2.0.15" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Gather.Mysql\Gather.Mysql.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="App.config">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="appsettings.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<_LastSelectedProfileId>F:\项目\苏州站房\项目\suzhou-iot-service\DataAcquisition\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,840 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Reflection.PortableExecutable;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using DataAcquisition.Model;
|
||||
using HslCommunication;
|
||||
using HslCommunication.Core;
|
||||
using HslCommunication.ModBus;
|
||||
using MySqlConnector;
|
||||
using System.Text.Json;
|
||||
using MySql.Data.MySqlClient;
|
||||
|
||||
// 连接池项类,用于管理每个PLC的连接
|
||||
public class ConnectionPoolItem
|
||||
{
|
||||
public List<ModbusTcpNet> Clients { get; set; } = new List<ModbusTcpNet>();
|
||||
public SemaphoreSlim Semaphore { get; set; }
|
||||
}
|
||||
|
||||
public class ModbusDataCollector : IDisposable
|
||||
{
|
||||
private readonly Dictionary<long, ModbusTcpNet> _modbusClients = new Dictionary<long, ModbusTcpNet>();
|
||||
private readonly object _lock = new object();
|
||||
private readonly object data_lock = new object();
|
||||
private readonly ConcurrentDictionary<int, Timer> _timers = new ConcurrentDictionary<int, Timer>();
|
||||
private readonly ConcurrentDictionary<int, List<DeviceInfo>> _frequencyGroups = new ConcurrentDictionary<int, List<DeviceInfo>>();
|
||||
private bool _disposed;
|
||||
private readonly int _maxReadRegisters = 125; // Modbus TCP一次最多读取125个寄存器
|
||||
private readonly int _maxReadCoils = 2000; // Modbus TCP一次最多读取2000个线圈或离散输入
|
||||
private readonly int _maxConnectionsPerPLC = 2; // 每个PLC的最大连接数
|
||||
private readonly ConcurrentDictionary<string, ConnectionPoolItem> _connectionPool = new ConcurrentDictionary<string, ConnectionPoolItem>();
|
||||
private readonly string _connectionString; // 数据库连接字符串
|
||||
|
||||
public event EventHandler<string> LogMessage;
|
||||
|
||||
public ModbusDataCollector(string connectionString)
|
||||
{
|
||||
_connectionString = connectionString;
|
||||
}
|
||||
|
||||
public async Task InitializeAsync()
|
||||
{
|
||||
var devices = await LoadDevicesAsync();
|
||||
UpdateFrequencyGroups(devices);
|
||||
StartTimers();
|
||||
}
|
||||
|
||||
private void Log(string message)
|
||||
{
|
||||
LogMessage?.Invoke(this, $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] {message}");
|
||||
}
|
||||
|
||||
public async Task<List<DeviceInfo>> LoadDevicesAsync()
|
||||
{
|
||||
var devices = new List<DeviceInfo>();
|
||||
|
||||
Gather.Mysql.BLL.iot_device device_bll = new Gather.Mysql.BLL.iot_device();
|
||||
Gather.Mysql.BLL.iot_plc_pt device_pt_bll = new Gather.Mysql.BLL.iot_plc_pt();
|
||||
Gather.Mysql.BLL.iot_function_code_config function_code_config_bll = new Gather.Mysql.BLL.iot_function_code_config();
|
||||
|
||||
var device_list = device_bll.GetModelList("");
|
||||
var device_pt_list = device_pt_bll.GetModelList("");
|
||||
var function_code_config_list = function_code_config_bll.GetModelList("");
|
||||
|
||||
// 查询每个设备的点位
|
||||
foreach (var device in device_list)
|
||||
{
|
||||
var device_model = new DeviceInfo
|
||||
{
|
||||
Id = device.id,
|
||||
DeviceNoHost = device.device_no_host,
|
||||
DeviceNoFollow = device.device_no_follow,
|
||||
DeviceName = device.device_name,
|
||||
IpAddress = device.service_ip,
|
||||
Port = int.Parse(device.service_port),
|
||||
Station = byte.Parse(device.station),
|
||||
AcquisitionFrequency = int.Parse(device.acquisition_frequency)
|
||||
};
|
||||
|
||||
devices.Add(device_model);
|
||||
|
||||
var device_pt = device_pt_list.Where(pt => pt.pt_device_id == device.id).ToList();
|
||||
foreach (var item in device_pt)
|
||||
{
|
||||
var point = new ModbusPoint
|
||||
{
|
||||
Id = item.id,
|
||||
Name = item.pt_name,
|
||||
EnglishName = item.pt_english,
|
||||
Address = item.pt_value,
|
||||
FunctionCode = item.pt_function,
|
||||
Pattern = item.pt_pattern,
|
||||
DataType = item.pt_data_type,
|
||||
ByteOrder = item.pt_byte_order,
|
||||
// 读取是否按位读取的字段值
|
||||
IsBitRead = item.pt_is_bit_read,
|
||||
// 读取位索引的字段值
|
||||
BitIndex = !string.IsNullOrEmpty(item.pt_bit_index) ? int.Parse(item.pt_bit_index) : 0,
|
||||
StartAddressFromZero = "1"
|
||||
};
|
||||
|
||||
var function_code_config_model = function_code_config_list.Where(a => a.function_code == point.FunctionCode).FirstOrDefault();
|
||||
if (function_code_config_model != null)
|
||||
{
|
||||
point.StartAddressFromZero = function_code_config_model.start_address_from_zero;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(item.pt_magnification_ratio))
|
||||
{
|
||||
point.Magnification = float.Parse(item.pt_magnification_ratio);
|
||||
}
|
||||
|
||||
device_model.Points.Add(point);
|
||||
}
|
||||
}
|
||||
|
||||
Log($"从数据库加载了 {devices.Count} 个设备");
|
||||
return devices;
|
||||
}
|
||||
|
||||
private void UpdateFrequencyGroups(List<DeviceInfo> devices)
|
||||
{
|
||||
var newGroups = devices
|
||||
.Where(d => d.AcquisitionFrequency > 0)
|
||||
.GroupBy(d => d.AcquisitionFrequency)
|
||||
.ToDictionary(g => g.Key, g => g.ToList());
|
||||
|
||||
// 移除不再存在的频率组
|
||||
var removedFrequencies = _frequencyGroups.Keys.Except(newGroups.Keys).ToList();
|
||||
foreach (var freq in removedFrequencies)
|
||||
{
|
||||
if (_frequencyGroups.TryRemove(freq, out _) && _timers.TryRemove(freq, out var timer))
|
||||
{
|
||||
timer.Dispose();
|
||||
Log($"移除频率组: {freq}ms");
|
||||
}
|
||||
}
|
||||
|
||||
// 更新或添加新频率组
|
||||
foreach (var group in newGroups)
|
||||
{
|
||||
_frequencyGroups.AddOrUpdate(group.Key, group.Value, (k, v) => group.Value);
|
||||
|
||||
if (!_timers.ContainsKey(group.Key))
|
||||
{
|
||||
var timer = new Timer(CollectDevicesByFrequency, group.Key, Timeout.Infinite, Timeout.Infinite);
|
||||
_timers.TryAdd(group.Key, timer);
|
||||
Log($"创建新的采集定时器: {group.Key}ms, 设备数: {group.Value.Count}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void StartTimers()
|
||||
{
|
||||
foreach (var kvp in _frequencyGroups)
|
||||
{
|
||||
if (_timers.TryGetValue(kvp.Key, out var timer))
|
||||
{
|
||||
timer.Change(kvp.Key, kvp.Key);
|
||||
Log($"启动定时器: {kvp.Key}ms, 设备数: {kvp.Value.Count}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void CollectDevicesByFrequency(object state)
|
||||
{
|
||||
int frequency = (int)state;
|
||||
if (!_frequencyGroups.TryGetValue(frequency, out var devices) || devices.Count == 0)
|
||||
return;
|
||||
|
||||
Log($"开始采集频率组: {frequency}ms, 设备数: {devices.Count}");
|
||||
|
||||
try
|
||||
{
|
||||
var results = await BatchReadDevicesAsync(devices);
|
||||
|
||||
foreach (var deviceResult in results)
|
||||
{
|
||||
var device = devices.FirstOrDefault(d => d.Id == deviceResult.Key);
|
||||
if (device == null) continue;
|
||||
|
||||
// 生成 JSON
|
||||
var statusJson = GenerateStatusJson(device, deviceResult.Value);
|
||||
|
||||
// 判断值是否变更并更新数据库
|
||||
UpdateDeviceStatusInDatabase(device.Id, statusJson);
|
||||
|
||||
foreach (var pointResult in deviceResult.Value)
|
||||
{
|
||||
var point = device.Points.FirstOrDefault(p => p.Id == pointResult.Key);
|
||||
if (point == null) continue;
|
||||
|
||||
// 这里可以添加处理采集结果的逻辑,如存入数据库或发送到消息队列
|
||||
Log($"设备 {device.DeviceName}({device.Id}) 点位 {point.Name}({point.Address})({point.FunctionCode}): {pointResult.Value}");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log($"频率 {frequency}ms 采集失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private string GenerateStatusJson(DeviceInfo device, Dictionary<int, object> pointResults)
|
||||
{
|
||||
var status = new Dictionary<string, object>();
|
||||
foreach (var point in device.Points)
|
||||
{
|
||||
if (pointResults.TryGetValue(point.Id, out var value))
|
||||
{
|
||||
status[point.EnglishName] = value;
|
||||
}
|
||||
}
|
||||
return JsonSerializer.Serialize(status);
|
||||
}
|
||||
|
||||
private void UpdateDeviceStatusInDatabase(long deviceId, string statusJson)
|
||||
{
|
||||
using (var connection = new MySqlConnection(_connectionString))
|
||||
{
|
||||
connection.Open();
|
||||
|
||||
lock (data_lock)
|
||||
{
|
||||
// 查询现有记录
|
||||
var selectQuery = "SELECT status_json FROM iot_device_status WHERE device_id = @DeviceId";
|
||||
using (var selectCommand = new MySqlCommand(selectQuery, connection))
|
||||
{
|
||||
selectCommand.Parameters.AddWithValue("@DeviceId", deviceId);
|
||||
var existingJson = selectCommand.ExecuteScalar() as string;
|
||||
|
||||
if (existingJson != statusJson)
|
||||
{
|
||||
// 有变更,更新或插入记录
|
||||
if (existingJson != null)
|
||||
{
|
||||
// 更新现有记录
|
||||
var updateQuery = "UPDATE iot_device_status SET status_json = @StatusJson, update_time = @UpdateTime WHERE device_id = @DeviceId";
|
||||
using (var updateCommand = new MySqlCommand(updateQuery, connection))
|
||||
{
|
||||
updateCommand.Parameters.AddWithValue("@DeviceId", deviceId);
|
||||
updateCommand.Parameters.AddWithValue("@StatusJson", statusJson);
|
||||
updateCommand.Parameters.AddWithValue("@UpdateTime", DateTime.Now);
|
||||
updateCommand.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 插入新记录
|
||||
var insertQuery = "INSERT INTO iot_device_status (id, device_id, status_json, creat_time, update_time) VALUES (@Id, @DeviceId, @StatusJson, @CreatTime, @UpdateTime)";
|
||||
using (var insertCommand = new MySqlCommand(insertQuery, connection))
|
||||
{
|
||||
var id = Guid.NewGuid().ToString("N");
|
||||
insertCommand.Parameters.AddWithValue("@Id", id);
|
||||
insertCommand.Parameters.AddWithValue("@DeviceId", deviceId);
|
||||
insertCommand.Parameters.AddWithValue("@StatusJson", statusJson);
|
||||
insertCommand.Parameters.AddWithValue("@CreatTime", DateTime.Now);
|
||||
insertCommand.Parameters.AddWithValue("@UpdateTime", DateTime.Now);
|
||||
insertCommand.ExecuteNonQuery();
|
||||
Log($"{deviceId},插入数据:{id}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<Dictionary<long, Dictionary<int, object>>> BatchReadDevicesAsync(List<DeviceInfo> devices)
|
||||
{
|
||||
var results = new Dictionary<long, Dictionary<int, object>>();
|
||||
var tasks = new List<Task>();
|
||||
|
||||
foreach (var device in devices)
|
||||
{
|
||||
tasks.Add(Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
using (await GetConnectionSemaphore(device))
|
||||
{
|
||||
var client = GetModbusClient(device);
|
||||
var deviceResults = await ReadDevicePointsAsync(client, device);
|
||||
|
||||
lock (_lock)
|
||||
{
|
||||
results[device.Id] = deviceResults;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log($"读取设备 {device.DeviceName}({device.Id}) 数据失败: {ex.Message}");
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
await Task.WhenAll(tasks);
|
||||
return results;
|
||||
}
|
||||
|
||||
private async Task<IDisposable> GetConnectionSemaphore(DeviceInfo device)
|
||||
{
|
||||
var key = $"{device.IpAddress}:{device.Port}";
|
||||
var poolItem = _connectionPool.GetOrAdd(key, k =>
|
||||
{
|
||||
var item = new ConnectionPoolItem
|
||||
{
|
||||
Semaphore = new SemaphoreSlim(_maxConnectionsPerPLC, _maxConnectionsPerPLC)
|
||||
};
|
||||
return item;
|
||||
});
|
||||
|
||||
await poolItem.Semaphore.WaitAsync();
|
||||
return new SemaphoreReleaser(poolItem.Semaphore);
|
||||
}
|
||||
|
||||
private ModbusTcpNet GetModbusClient(DeviceInfo device)
|
||||
{
|
||||
var key = $"{device.IpAddress}:{device.Port}";
|
||||
var poolItem = _connectionPool.GetOrAdd(key, k => new ConnectionPoolItem());
|
||||
|
||||
lock (_lock)
|
||||
{
|
||||
var client = poolItem.Clients.FirstOrDefault(c => c.Station == device.Station);
|
||||
if (client != null)
|
||||
{
|
||||
return client;
|
||||
}
|
||||
|
||||
client = new ModbusTcpNet(device.IpAddress, device.Port, device.Station)
|
||||
{
|
||||
ConnectTimeOut = 2000
|
||||
};
|
||||
//获取或设置起始的地址是否从0开始,默认为True
|
||||
//client.AddressStartWithZero = false;
|
||||
|
||||
var connectResult = client.ConnectServer();
|
||||
if (!connectResult.IsSuccess)
|
||||
{
|
||||
throw new Exception($"连接设备 {device.DeviceName}({device.IpAddress}:{device.Port}) 失败: {connectResult.Message}");
|
||||
}
|
||||
|
||||
poolItem.Clients.Add(client);
|
||||
Log($"创建新的Modbus客户端: {device.DeviceName}({device.IpAddress}:{device.Port})");
|
||||
return client;
|
||||
}
|
||||
}
|
||||
|
||||
private DataFormat GetDataFormat(string byteOrder)
|
||||
{
|
||||
if (string.IsNullOrEmpty(byteOrder))
|
||||
{
|
||||
return DataFormat.ABCD;
|
||||
}
|
||||
switch (byteOrder?.ToUpper())
|
||||
{
|
||||
case "ABCD": return DataFormat.ABCD;
|
||||
case "BADC": return DataFormat.BADC;
|
||||
case "CDAB": return DataFormat.CDAB;
|
||||
case "DCBA": return DataFormat.DCBA;
|
||||
default: return DataFormat.ABCD;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<Dictionary<int, object>> ReadDevicePointsAsync(ModbusTcpNet client, DeviceInfo device)
|
||||
{
|
||||
var results = new Dictionary<int, object>();
|
||||
var functionGroups = device.Points.GroupBy(p => p.FunctionCode);
|
||||
byte stationNumber = device.Station;
|
||||
|
||||
foreach (var group in functionGroups)
|
||||
{
|
||||
var functionCode = group.Key;
|
||||
var points = group.OrderBy(p => p.Address).ToList();
|
||||
|
||||
try
|
||||
{
|
||||
switch (functionCode)
|
||||
{
|
||||
case "01":
|
||||
await ReadCoils(client, points, results, stationNumber);
|
||||
break;
|
||||
case "02":
|
||||
await ReadDiscreteInputs(client, points, results, stationNumber);
|
||||
break;
|
||||
case "03":
|
||||
case "04":
|
||||
await ReadRegisters(client, points, results, functionCode, stationNumber);
|
||||
break;
|
||||
default:
|
||||
Log($"设备 {device.DeviceName} 不支持的功能码: {functionCode}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log($"读取设备 {device.DeviceName} 功能码 {functionCode} 数据失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
private async Task ReadCoils(ModbusTcpNet client, List<ModbusPoint> points, Dictionary<int, object> results, byte stationNumber)
|
||||
{
|
||||
var addressGroups = MergeAddresses(points, _maxReadCoils);
|
||||
|
||||
foreach (var group in addressGroups)
|
||||
{
|
||||
var startAddress = group.Min(p => ushort.Parse(p.Address));
|
||||
var length = group.Max(p => ushort.Parse(p.Address)) - startAddress + 1;
|
||||
|
||||
if (group.First().StartAddressFromZero == "1")
|
||||
{
|
||||
client.AddressStartWithZero = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
client.AddressStartWithZero = false;
|
||||
}
|
||||
var readResult = await client.ReadCoilAsync($"s={stationNumber};{startAddress}", (ushort)length);
|
||||
if (!readResult.IsSuccess)
|
||||
{
|
||||
throw new Exception($"读取线圈失败: {readResult.Message}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log($"DO,s={stationNumber};{startAddress},长度{length},返回值:{string.Join(',', readResult.Content)}");
|
||||
}
|
||||
|
||||
var values = readResult.Content;
|
||||
foreach (var point in group)
|
||||
{
|
||||
var index = ushort.Parse(point.Address) - startAddress;
|
||||
if (index < values.Length)
|
||||
{
|
||||
results[point.Id] = values[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReadDiscreteInputs(ModbusTcpNet client, List<ModbusPoint> points, Dictionary<int, object> results, byte stationNumber)
|
||||
{
|
||||
var addressGroups = MergeAddresses(points, _maxReadCoils);
|
||||
|
||||
foreach (var group in addressGroups)
|
||||
{
|
||||
var startAddress = group.Min(p => ushort.Parse(p.Address));
|
||||
var length = group.Max(p => ushort.Parse(p.Address)) - startAddress + 1;
|
||||
|
||||
if (group.First().StartAddressFromZero == "1")
|
||||
{
|
||||
client.AddressStartWithZero = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
client.AddressStartWithZero = false;
|
||||
}
|
||||
|
||||
var readResult = await client.ReadDiscreteAsync($"s={stationNumber};{startAddress}", (ushort)length);
|
||||
if (!readResult.IsSuccess)
|
||||
{
|
||||
throw new Exception($"读取离散输入失败: {readResult.Message}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log($"DI,s={stationNumber};{startAddress},长度{length},返回值:{string.Join(',', readResult.Content)}");
|
||||
}
|
||||
|
||||
var values = readResult.Content;
|
||||
foreach (var point in group)
|
||||
{
|
||||
var index = ushort.Parse(point.Address) - startAddress;
|
||||
if (index < values.Length)
|
||||
{
|
||||
results[point.Id] = values[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReadRegisters(ModbusTcpNet client, List<ModbusPoint> points, Dictionary<int, object> results, string functionCode, byte stationNumber)
|
||||
{
|
||||
var registerPoints = points.Select(p => new
|
||||
{
|
||||
Point = p,
|
||||
RegisterCount = GetRegisterCount(p.DataType),
|
||||
Address = ushort.Parse(p.Address),
|
||||
StartAddressFromZero = p.StartAddressFromZero
|
||||
}).ToList();
|
||||
|
||||
var addressGroups = MergeRegisterGroups(registerPoints, _maxReadRegisters);
|
||||
|
||||
foreach (var group in addressGroups)
|
||||
{
|
||||
var startAddress = group.Min(x => x.Address);
|
||||
var endAddress = group.Max(x => x.Address + x.RegisterCount - 1);
|
||||
var length = endAddress - startAddress + 1;
|
||||
|
||||
if (group.First().StartAddressFromZero == "1")
|
||||
{
|
||||
client.AddressStartWithZero = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
client.AddressStartWithZero = false;
|
||||
}
|
||||
|
||||
var addressPrefix = functionCode == "03" ? "3" : "4";
|
||||
var readResult = await client.ReadAsync($"s={stationNumber};x={addressPrefix};{startAddress}", (ushort)length);
|
||||
if (!readResult.IsSuccess)
|
||||
{
|
||||
throw new Exception($"读取寄存器失败: {readResult.Message}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log($"s={stationNumber};x={addressPrefix};{startAddress},长度{length},返回值:{string.Join(',', readResult.Content)}");
|
||||
}
|
||||
|
||||
var bytes = readResult.Content;
|
||||
foreach (var item in group)
|
||||
{
|
||||
var offset = (item.Address - startAddress) * 2;
|
||||
if (offset + item.RegisterCount * 2 <= bytes.Length)
|
||||
{
|
||||
var value = ConvertRegisterValue(bytes, offset, item.RegisterCount, item.Point.DataType, item.Point.ByteOrder, item.Point.Magnification);
|
||||
|
||||
// 按位读取处理
|
||||
if (item.Point.IsBitRead == "1")
|
||||
{
|
||||
int intValue = (int)value;
|
||||
bool bitValue = (intValue & (1 << item.Point.BitIndex)) != 0;
|
||||
value = bitValue ? 1 : 0;
|
||||
}
|
||||
results[item.Point.Id] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int GetRegisterCount(string dataType)
|
||||
{
|
||||
switch (dataType?.ToLower())
|
||||
{
|
||||
case "bool":
|
||||
case "byte":
|
||||
case "short":
|
||||
case "ushort":
|
||||
return 1;
|
||||
case "int":
|
||||
case "uint":
|
||||
case "float":
|
||||
return 2;
|
||||
case "long":
|
||||
case "ulong":
|
||||
case "double":
|
||||
return 4;
|
||||
default:
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
private object ConvertRegisterValue(byte[] bytes, int offset, int registerCount, string dataType, string byteOrder, float Magnification)
|
||||
{
|
||||
var data = new byte[registerCount * 2];
|
||||
Array.Copy(bytes, offset, data, 0, data.Length);
|
||||
|
||||
data = ReorderBytes(data, byteOrder);
|
||||
|
||||
switch (dataType?.ToLower())
|
||||
{
|
||||
case "bool":
|
||||
return BitConverter.ToBoolean(data, 0) ? 1 : 0;
|
||||
case "byte":
|
||||
return data[0];
|
||||
case "short":
|
||||
return BitConverter.ToInt16(data, 0) * Magnification;
|
||||
case "ushort":
|
||||
return BitConverter.ToUInt16(data, 0) * Magnification;
|
||||
case "int":
|
||||
return BitConverter.ToInt32(data, 0) * Magnification;
|
||||
case "uint":
|
||||
return BitConverter.ToUInt32(data, 0) * Magnification;
|
||||
case "long":
|
||||
return BitConverter.ToInt64(data, 0) * Magnification;
|
||||
case "ulong":
|
||||
return BitConverter.ToUInt64(data, 0) * Magnification;
|
||||
case "float":
|
||||
return BitConverter.ToSingle(data, 0) * Magnification;
|
||||
case "double":
|
||||
return BitConverter.ToDouble(data, 0) * Magnification;
|
||||
default:
|
||||
return BitConverter.ToUInt16(data, 0) * Magnification;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按照指定的Modbus字节顺序重新排列字节数组
|
||||
/// </summary>
|
||||
/// <param name="bytes">原始字节数组</param>
|
||||
/// <param name="byteOrder">字节顺序类型:ABCD, BADC, CDAB, DCBA</param>
|
||||
/// <returns>重新排列后的字节数组</returns>
|
||||
public byte[] ReorderBytes(byte[] bytes, string byteOrder)
|
||||
{
|
||||
if (bytes == null || bytes.Length == 0)
|
||||
return Array.Empty<byte>();
|
||||
|
||||
// 根据不同的字节顺序进行处理
|
||||
switch (byteOrder?.ToUpper())
|
||||
{
|
||||
case "ABCD":
|
||||
return ReverseDWords(bytes); // 原始顺序,无需转换
|
||||
|
||||
case "BADC":
|
||||
return SwapDWords(bytes); // 交换每四个字节中的前两个和后两个
|
||||
|
||||
case "CDAB":
|
||||
return SwapWords(bytes); // 交换每两个字节
|
||||
|
||||
case "DCBA":
|
||||
return bytes; // 完全反转每四个字节
|
||||
|
||||
default:
|
||||
throw new ArgumentException($"不支持的字节顺序: {byteOrder}", nameof(byteOrder));
|
||||
}
|
||||
}
|
||||
|
||||
// 交换每两个字节 (BADC)
|
||||
private byte[] SwapWords(byte[] bytes)
|
||||
{
|
||||
var result = new byte[bytes.Length];
|
||||
for (int i = 0; i < bytes.Length; i += 2)
|
||||
{
|
||||
if (i + 1 < bytes.Length)
|
||||
{
|
||||
result[i] = bytes[i + 1]; // 高字节与低字节交换
|
||||
result[i + 1] = bytes[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
result[i] = bytes[i]; // 剩余单个字节保持不变
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// 交换每四个字节中的前两个和后两个 (CDAB)
|
||||
private byte[] SwapDWords(byte[] bytes)
|
||||
{
|
||||
var result = new byte[bytes.Length];
|
||||
for (int i = 0; i < bytes.Length; i += 4)
|
||||
{
|
||||
if (i + 3 < bytes.Length)
|
||||
{
|
||||
result[i] = bytes[i + 2]; // 第三个字节放到第一个位置
|
||||
result[i + 1] = bytes[i + 3]; // 第四个字节放到第二个位置
|
||||
result[i + 2] = bytes[i]; // 第一个字节放到第三个位置
|
||||
result[i + 3] = bytes[i + 1]; // 第二个字节放到第四个位置
|
||||
}
|
||||
else if (i + 1 < bytes.Length)
|
||||
{
|
||||
// 不足四个字节但至少有两个字节时,交换这两个字节
|
||||
result[i] = bytes[i + 1];
|
||||
result[i + 1] = bytes[i];
|
||||
if (i + 2 < bytes.Length)
|
||||
result[i + 2] = bytes[i + 2]; // 剩余单个字节保持不变
|
||||
}
|
||||
else
|
||||
{
|
||||
result[i] = bytes[i]; // 剩余单个字节保持不变
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// 完全反转每四个字节 (DCBA)
|
||||
private byte[] ReverseDWords(byte[] bytes)
|
||||
{
|
||||
var result = new byte[bytes.Length];
|
||||
for (int i = 0; i < bytes.Length; i += 4)
|
||||
{
|
||||
if (i + 3 < bytes.Length)
|
||||
{
|
||||
result[i] = bytes[i + 3]; // 第四个字节放到第一个位置
|
||||
result[i + 1] = bytes[i + 2]; // 第三个字节放到第二个位置
|
||||
result[i + 2] = bytes[i + 1]; // 第二个字节放到第三个位置
|
||||
result[i + 3] = bytes[i]; // 第一个字节放到第四个位置
|
||||
}
|
||||
else if (i + 1 < bytes.Length)
|
||||
{
|
||||
// 不足四个字节但至少有两个字节时,交换这两个字节
|
||||
result[i] = bytes[i + 1];
|
||||
result[i + 1] = bytes[i];
|
||||
if (i + 2 < bytes.Length)
|
||||
result[i + 2] = bytes[i + 2]; // 剩余单个字节保持不变
|
||||
}
|
||||
else
|
||||
{
|
||||
result[i] = bytes[i]; // 剩余单个字节保持不变
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<List<ModbusPoint>> MergeAddresses(List<ModbusPoint> points, int maxCount)
|
||||
{
|
||||
var result = new List<List<ModbusPoint>>();
|
||||
if (points.Count == 0) return result;
|
||||
|
||||
var orderedPoints = points.OrderBy(p => ushort.Parse(p.Address)).ToList();
|
||||
var currentGroup = new List<ModbusPoint> { orderedPoints[0] };
|
||||
|
||||
for (int i = 1; i < orderedPoints.Count; i++)
|
||||
{
|
||||
var prevAddress = ushort.Parse(orderedPoints[i - 1].Address);
|
||||
var currAddress = ushort.Parse(orderedPoints[i].Address);
|
||||
|
||||
if (currAddress - prevAddress <= 1 && currentGroup.Count < maxCount)
|
||||
{
|
||||
currentGroup.Add(orderedPoints[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Add(currentGroup);
|
||||
currentGroup = new List<ModbusPoint> { orderedPoints[i] };
|
||||
}
|
||||
}
|
||||
|
||||
if (currentGroup.Count > 0)
|
||||
{
|
||||
result.Add(currentGroup);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<List<T>> MergeRegisterGroups<T>(List<T> items, int maxRegisters) where T : class
|
||||
{
|
||||
var result = new List<List<T>>();
|
||||
if (items.Count == 0) return result;
|
||||
|
||||
var orderedItems = items.OrderBy(x => (x as dynamic).Address).ToList();
|
||||
var currentGroup = new List<T> { orderedItems[0] };
|
||||
var currentRegisters = (int)(orderedItems[0] as dynamic).RegisterCount;
|
||||
|
||||
for (int i = 1; i < orderedItems.Count; i++)
|
||||
{
|
||||
var item = orderedItems[i];
|
||||
var address = (ushort)(item as dynamic).Address;
|
||||
var registerCount = (int)(item as dynamic).RegisterCount;
|
||||
var lastItem = currentGroup.Last();
|
||||
var lastAddress = (ushort)(lastItem as dynamic).Address;
|
||||
var lastRegisterCount = (int)(lastItem as dynamic).RegisterCount;
|
||||
|
||||
var endAddress = lastAddress + lastRegisterCount - 1;
|
||||
var gap = address - endAddress - 1;
|
||||
|
||||
if (gap <= 1 && currentRegisters + registerCount + gap <= maxRegisters)
|
||||
{
|
||||
currentGroup.Add(item);
|
||||
currentRegisters += registerCount + Math.Max(0, gap);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Add(currentGroup);
|
||||
currentGroup = new List<T> { item };
|
||||
currentRegisters = registerCount;
|
||||
}
|
||||
}
|
||||
|
||||
if (currentGroup.Count > 0)
|
||||
{
|
||||
result.Add(currentGroup);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task RefreshDevicesAsync()
|
||||
{
|
||||
var devices = await LoadDevicesAsync();
|
||||
UpdateFrequencyGroups(devices);
|
||||
StartTimers();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_disposed) return;
|
||||
_disposed = true;
|
||||
|
||||
lock (_lock)
|
||||
{
|
||||
foreach (var timer in _timers.Values)
|
||||
{
|
||||
timer.Dispose();
|
||||
}
|
||||
_timers.Clear();
|
||||
|
||||
foreach (var poolItem in _connectionPool.Values)
|
||||
{
|
||||
foreach (var client in poolItem.Clients)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.ConnectClose();
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 忽略关闭错误
|
||||
}
|
||||
}
|
||||
poolItem.Semaphore.Dispose();
|
||||
}
|
||||
_connectionPool.Clear();
|
||||
}
|
||||
|
||||
Log("Modbus采集器已释放");
|
||||
}
|
||||
}
|
||||
|
||||
// 用于释放信号量的辅助类
|
||||
public class SemaphoreReleaser : IDisposable
|
||||
{
|
||||
private readonly SemaphoreSlim _semaphore;
|
||||
|
||||
public SemaphoreReleaser(SemaphoreSlim semaphore)
|
||||
{
|
||||
_semaphore = semaphore;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_semaphore.Release();
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataAcquisition.Model
|
||||
{
|
||||
public class DeviceInfo
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string DeviceNoHost { get; set; }
|
||||
public string DeviceNoFollow { get; set; }
|
||||
public string DeviceName { get; set; }
|
||||
public string IpAddress { get; set; }
|
||||
public int Port { get; set; } = 502;
|
||||
public byte Station { get; set; } = 1;
|
||||
public int AcquisitionFrequency { get; set; } = 1000;
|
||||
public List<ModbusPoint> Points { get; set; } = new List<ModbusPoint>();
|
||||
|
||||
public int MaxConnections = 1;
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataAcquisition.Model
|
||||
{
|
||||
public class ModbusPoint
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string EnglishName { get; set; }
|
||||
public string Address { get; set; } = "0";
|
||||
public string FunctionCode { get; set; } = "03";
|
||||
public string Pattern { get; set; } = "R";
|
||||
public string DataType { get; set; } = "ushort";
|
||||
public string ByteOrder { get; set; } = "ABCD";
|
||||
public float Magnification { get; set; } = 1.0f;
|
||||
|
||||
// 新增字段:是否按位读取
|
||||
public string IsBitRead { get; set; } = "0";
|
||||
// 新增字段:位索引(0 - 7)
|
||||
public int BitIndex { get; set; }
|
||||
|
||||
public string StartAddressFromZero { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
using log4net.Config;
|
||||
using log4net;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using System.Text;
|
||||
using log4net.Repository;
|
||||
|
||||
namespace DataAcquisition
|
||||
{
|
||||
internal class Program
|
||||
{
|
||||
static ILoggerRepository LoggerRepository;
|
||||
|
||||
static ILog log;
|
||||
|
||||
static IConfigurationRoot configuration;
|
||||
|
||||
static async Task Main(string[] args)
|
||||
{
|
||||
LoggerRepository = LogManager.CreateRepository("DataAcquisition");
|
||||
XmlConfigurator.ConfigureAndWatch(LoggerRepository, new FileInfo("App.config"));
|
||||
log = LogManager.GetLogger(LoggerRepository.Name, typeof(Program));
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
|
||||
// 授权示例 调用一次即可 call only once
|
||||
if (!HslCommunication.Authorization.SetAuthorizationCode("d8868ab9-4494-4056-98c6-b669e2434e25"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
configuration = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile(path: "appsettings.json", optional: true, reloadOnChange: true)
|
||||
.Build();
|
||||
|
||||
var connectionString = configuration.GetConnectionString("ConnectionString");
|
||||
using (var collector = new ModbusDataCollector(connectionString))
|
||||
{
|
||||
// 订阅日志事件
|
||||
collector.LogMessage += (sender, message) => { Console.WriteLine(message); log.Info(message); };
|
||||
|
||||
// 初始化并启动采集
|
||||
await collector.InitializeAsync();
|
||||
|
||||
// 模拟运行一段时间后刷新配置
|
||||
await Task.Delay(TimeSpan.FromMinutes(30));
|
||||
Console.WriteLine("正在刷新设备配置...");
|
||||
await collector.RefreshDevicesAsync();
|
||||
|
||||
Console.WriteLine("按任意键退出...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
//Console.WriteLine("启动服务");
|
||||
//log.Info("启动服务");
|
||||
|
||||
//Console.ReadKey();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Any CPU</Platform>
|
||||
<PublishDir>bin\Release\net6.0\publish\</PublishDir>
|
||||
<PublishProtocol>FileSystem</PublishProtocol>
|
||||
<_TargetId>Folder</_TargetId>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<History>True|2025-06-09T02:27:00.8967484Z||;</History>
|
||||
<LastFailureDetails />
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"ConnectionStrings": {
|
||||
"ConStringEncrypt": "false",
|
||||
"ConnectionString": "server=127.0.0.1;port=3306;userid=root;password=Unity3du#d112233;database=suzhou_iot_db;"
|
||||
//"ConnectionString": "server=172.16.1.162;port=33061;userid=root;password=p@ssw0rd;database=suzhou_iot_db;"
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
|
||||
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
|
||||
|
||||
</configSections>
|
||||
<log4net>
|
||||
<root>
|
||||
<level value="ALL" />
|
||||
<appender-ref ref="SysAppender" />
|
||||
</root>
|
||||
<logger name="WebLogger">
|
||||
<level value="DEBUG" />
|
||||
</logger>
|
||||
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
|
||||
<param name="File" value="App_Data/" />
|
||||
<param name="AppendToFile" value="true" />
|
||||
<param name="RollingStyle" value="Date" />
|
||||
<param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />
|
||||
<param name="StaticLogFileName" value="false" />
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
<param name="Header" value=" ------------------------------------------------
" />
|
||||
<param name="Footer" value=" ------------------------------------------------
" />
|
||||
</layout>
|
||||
</appender>
|
||||
<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
</log4net>
|
||||
</configuration>
|
|
@ -1,85 +0,0 @@
|
|||
------------------------------------------------
|
||||
2025-06-05 18:04:56,130 [1] INFO DataAcquisition.Program - [2025-06-05 18:04:56.127] 从数据库加载了 6 个设备
|
||||
2025-06-05 18:04:56,142 [1] INFO DataAcquisition.Program - [2025-06-05 18:04:56.142] 创建新的采集定时器: 10000ms, 设备数: 6
|
||||
2025-06-05 18:04:56,143 [1] INFO DataAcquisition.Program - [2025-06-05 18:04:56.142] 启动定时器: 10000ms, 设备数: 6
|
||||
2025-06-05 18:05:06,146 [4] INFO DataAcquisition.Program - [2025-06-05 18:05:06.146] 开始采集频率组: 10000ms, 设备数: 6
|
||||
2025-06-05 18:05:06,180 [9] INFO DataAcquisition.Program - [2025-06-05 18:05:06.180] 创建新的Modbus客户端: L-3两联供空气源热泵主机(127.0.0.1:502)
|
||||
2025-06-05 18:05:06,210 [6] INFO DataAcquisition.Program - [2025-06-05 18:05:06.210] DO,s=1;128,长度2,返回值:False,False
|
||||
2025-06-05 18:05:06,210 [7] INFO DataAcquisition.Program - [2025-06-05 18:05:06.210] DI,s=1;22,长度6,返回值:False,False,False,False,False,False
|
||||
2025-06-05 18:05:06,213 [11] INFO DataAcquisition.Program - [2025-06-05 18:05:06.213] DI,s=1;42,长度5,返回值:False,False,False,False,False
|
||||
2025-06-05 18:05:06,215 [9] INFO DataAcquisition.Program - [2025-06-05 18:05:06.215] DO,s=1;118,长度2,返回值:False,False
|
||||
2025-06-05 18:05:06,216 [11] INFO DataAcquisition.Program - [2025-06-05 18:05:06.216] DI,s=1;32,长度5,返回值:False,False,False,False,False
|
||||
2025-06-05 18:05:06,217 [4] INFO DataAcquisition.Program - [2025-06-05 18:05:06.217] DO,s=1;103,长度1,返回值:False
|
||||
2025-06-05 18:05:06,223 [4] INFO DataAcquisition.Program - [2025-06-05 18:05:06.223] DO,s=1;115,长度3,返回值:False,False,False
|
||||
2025-06-05 18:05:06,226 [9] INFO DataAcquisition.Program - [2025-06-05 18:05:06.225] DI,s=1;10,长度6,返回值:False,False,False,False,False,False
|
||||
2025-06-05 18:05:06,280 [12] INFO DataAcquisition.Program - [2025-06-05 18:05:06.280] s=1;x=4;1,长度4,返回值:0,0,0,0,0,0,0,0
|
||||
2025-06-05 18:05:06,280 [6] INFO DataAcquisition.Program - [2025-06-05 18:05:06.280] s=1;x=4;29,长度4,返回值:15,146,0,0,34,249,0,0
|
||||
2025-06-05 18:05:06,282 [9] INFO DataAcquisition.Program - [2025-06-05 18:05:06.282] s=1;x=4;133,长度2,返回值:0,0,0,0
|
||||
2025-06-05 18:05:06,283 [6] INFO DataAcquisition.Program - [2025-06-05 18:05:06.283] s=1;x=4;129,长度2,返回值:0,0,0,0
|
||||
2025-06-05 18:05:06,285 [16] INFO DataAcquisition.Program - [2025-06-05 18:05:06.284] s=1;x=4;613,长度2,返回值:0,0,0,0
|
||||
2025-06-05 18:05:06,285 [6] INFO DataAcquisition.Program - [2025-06-05 18:05:06.285] s=1;x=4;609,长度2,返回值:0,0,0,0
|
||||
2025-06-05 18:05:06,286 [4] INFO DataAcquisition.Program - [2025-06-05 18:05:06.286] DO,s=1;106,长度1,返回值:False
|
||||
2025-06-05 18:05:06,287 [16] INFO DataAcquisition.Program - [2025-06-05 18:05:06.286] DO,s=1;136,长度3,返回值:False,False,False
|
||||
2025-06-05 18:05:06,287 [11] INFO DataAcquisition.Program - [2025-06-05 18:05:06.287] DO,s=1;125,长度3,返回值:False,False,False
|
||||
2025-06-05 18:05:06,288 [15] INFO DataAcquisition.Program - [2025-06-05 18:05:06.288] DI,s=1;57,长度5,返回值:False,False,False,False,False
|
||||
2025-06-05 18:05:06,289 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.289] DO,s=1;130,长度3,返回值:False,False,False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.290] DI,s=1;47,长度5,返回值:False,True,True,False,False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀手/自动切换(128)(01): False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀手动控制(129)(01): False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀开到位(42)(02): False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀关到位(43)(02): False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀实际控制命令输出(44)(02): False
|
||||
2025-06-05 18:05:06,292 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀开故障(45)(02): False
|
||||
2025-06-05 18:05:06,293 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.292] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀关故障(46)(02): False
|
||||
2025-06-05 18:05:06,294 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.293] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀手/自动切换(118)(01): False
|
||||
2025-06-05 18:05:06,295 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.294] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀手动控制(119)(01): False
|
||||
2025-06-05 18:05:06,296 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.295] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀开到位(32)(02): False
|
||||
2025-06-05 18:05:06,296 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.296] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀关到位(33)(02): False
|
||||
2025-06-05 18:05:06,297 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.296] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀实际控制命令输出(34)(02): False
|
||||
2025-06-05 18:05:06,298 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.297] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀开故障(35)(02): False
|
||||
2025-06-05 18:05:06,299 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.298] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀关故障(36)(02): False
|
||||
2025-06-05 18:05:06,299 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.299] 设备 L-1两联供空气源热泵主机(1) 点位 系统启停控制(103)(01): False
|
||||
2025-06-05 18:05:06,299 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.299] 设备 L-1两联供空气源热泵主机(1) 点位 单元维护(115)(01): False
|
||||
2025-06-05 18:05:06,299 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.299] 设备 L-1两联供空气源热泵主机(1) 点位 主机手/自动切换(116)(01): False
|
||||
2025-06-05 18:05:06,300 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.299] 设备 L-1两联供空气源热泵主机(1) 点位 主机手动控制(117)(01): False
|
||||
2025-06-05 18:05:06,300 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.300] 设备 L-1两联供空气源热泵主机(1) 点位 主机运行状态(10)(02): False
|
||||
2025-06-05 18:05:06,300 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.300] 设备 L-1两联供空气源热泵主机(1) 点位 主机故障状态(11)(02): False
|
||||
2025-06-05 18:05:06,300 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.300] 设备 L-1两联供空气源热泵主机(1) 点位 主机本地/远程状态(12)(02): False
|
||||
2025-06-05 18:05:06,301 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.300] 设备 L-1两联供空气源热泵主机(1) 点位 主机控制与反馈不一致报警(13)(02): False
|
||||
2025-06-05 18:05:06,301 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.301] 设备 L-1两联供空气源热泵主机(1) 点位 主机综合故障报警(14)(02): False
|
||||
2025-06-05 18:05:06,301 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.301] 设备 L-1两联供空气源热泵主机(1) 点位 单元准备完毕(15)(02): False
|
||||
2025-06-05 18:05:06,302 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.301] 设备 L-1两联供空气源热泵主机(1) 点位 出水温度(1)(04): 0
|
||||
2025-06-05 18:05:06,302 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.302] 设备 L-1两联供空气源热泵主机(1) 点位 进水温度(3)(04): 0
|
||||
2025-06-05 18:05:06,303 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.302] 设备 L-1两联供空气源热泵主机(1) 点位 COP(129)(04): 0
|
||||
2025-06-05 18:05:06,303 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.303] 设备 L-1两联供空气源热泵主机(1) 点位 压缩机运行百分比(609)(04): 0
|
||||
2025-06-05 18:05:06,304 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.303] 设备 L-3两联供空气源热泵主机(2) 点位 主机运行状态(22)(02): False
|
||||
2025-06-05 18:05:06,304 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.304] 设备 L-3两联供空气源热泵主机(2) 点位 主机故障状态(23)(02): False
|
||||
2025-06-05 18:05:06,304 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.304] 设备 L-3两联供空气源热泵主机(2) 点位 主机本地/远程状态(24)(02): False
|
||||
2025-06-05 18:05:06,305 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.304] 设备 L-3两联供空气源热泵主机(2) 点位 主机控制与反馈不一致报警(25)(02): False
|
||||
2025-06-05 18:05:06,306 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.305] 设备 L-3两联供空气源热泵主机(2) 点位 主机综合故障报警(26)(02): False
|
||||
2025-06-05 18:05:06,306 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.306] 设备 L-3两联供空气源热泵主机(2) 点位 单元准备完毕(27)(02): False
|
||||
2025-06-05 18:05:06,307 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.306] 设备 L-3两联供空气源热泵主机(2) 点位 出水温度(29)(04): 3986
|
||||
2025-06-05 18:05:06,307 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.307] 设备 L-3两联供空气源热泵主机(2) 点位 进水温度(31)(04): 8953
|
||||
2025-06-05 18:05:06,307 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.307] 设备 L-3两联供空气源热泵主机(2) 点位 COP(133)(04): 0
|
||||
2025-06-05 18:05:06,308 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.307] 设备 L-3两联供空气源热泵主机(2) 点位 压缩机运行百分比(613)(04): 0
|
||||
2025-06-05 18:05:06,308 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.308] 设备 L-3两联供空气源热泵主机(2) 点位 系统启停控制(106)(01): False
|
||||
2025-06-05 18:05:06,309 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.308] 设备 L-3两联供空气源热泵主机(2) 点位 单元维护(125)(01): False
|
||||
2025-06-05 18:05:06,309 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.309] 设备 L-3两联供空气源热泵主机(2) 点位 主机手/自动切换(126)(01): False
|
||||
2025-06-05 18:05:06,309 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.309] 设备 L-3两联供空气源热泵主机(2) 点位 主机手动控制(127)(01): False
|
||||
2025-06-05 18:05:06,311 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.309] 设备 RY-1热源循环泵(8) 点位 热源循环泵手/自动切换(136)(01): False
|
||||
2025-06-05 18:05:06,312 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.311] 设备 RY-1热源循环泵(8) 点位 热源循环泵维护按钮(137)(01): False
|
||||
2025-06-05 18:05:06,312 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.312] 设备 RY-1热源循环泵(8) 点位 热源循环泵手动启停控制(138)(01): False
|
||||
2025-06-05 18:05:06,312 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.312] 设备 RY-1热源循环泵(8) 点位 热源循环泵运行状态(57)(02): False
|
||||
2025-06-05 18:05:06,312 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.312] 设备 RY-1热源循环泵(8) 点位 热源循环泵热继电器故障状态(58)(02): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RY-1热源循环泵(8) 点位 热源循环泵控制反馈不一致报警(59)(02): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RY-1热源循环泵(8) 点位 热源循环泵本地/远程状态(60)(02): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RY-1热源循环泵(8) 点位 热源循环泵综合故障(61)(02): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RJ-1热水循环泵(7) 点位 热水循环泵手/自动切换(130)(01): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RJ-1热水循环泵(7) 点位 热水循环泵维护按钮(131)(01): False
|
||||
2025-06-05 18:05:06,314 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RJ-1热水循环泵(7) 点位 热水循环泵手动启停控制(132)(01): False
|
||||
2025-06-05 18:05:06,314 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.314] 设备 RJ-1热水循环泵(7) 点位 热水循环泵运行状态(47)(02): False
|
||||
2025-06-05 18:05:06,315 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.314] 设备 RJ-1热水循环泵(7) 点位 热水循环泵热继电器故障状态(48)(02): True
|
||||
2025-06-05 18:05:06,315 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.315] 设备 RJ-1热水循环泵(7) 点位 热水循环泵控制反馈不一致报警(49)(02): True
|
||||
2025-06-05 18:05:06,315 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.315] 设备 RJ-1热水循环泵(7) 点位 热水循环泵本地/远程状态(50)(02): False
|
||||
2025-06-05 18:05:06,316 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.316] 设备 RJ-1热水循环泵(7) 点位 热水循环泵综合故障(51)(02): False
|
||||
------------------------------------------------
|
|
@ -1,71 +0,0 @@
|
|||
------------------------------------------------
|
||||
2025-06-05 13:12:05,920 [1] INFO DataAcquisition.Program - [2025-06-05 13:12:05.917] 从数据库加载了 6 个设备
|
||||
2025-06-05 13:12:05,935 [1] INFO DataAcquisition.Program - [2025-06-05 13:12:05.935] 创建新的采集定时器: 10000ms, 设备数: 6
|
||||
2025-06-05 13:12:05,936 [1] INFO DataAcquisition.Program - [2025-06-05 13:12:05.936] 启动定时器: 10000ms, 设备数: 6
|
||||
2025-06-05 13:12:15,942 [3] INFO DataAcquisition.Program - [2025-06-05 13:12:15.942] 开始采集频率组: 10000ms, 设备数: 6
|
||||
2025-06-05 13:12:15,980 [13] INFO DataAcquisition.Program - [2025-06-05 13:12:15.980] 创建新的Modbus客户端: RJ-1热水循环泵(127.0.0.1:502)
|
||||
|
||||
2025-06-05 13:12:16,091 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.091] 设备 RJ-1热水循环泵(7) 点位 热水循环泵手/自动切换(130)(01): False 1
|
||||
2025-06-05 13:12:16,091 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.091] 设备 RJ-1热水循环泵(7) 点位 热水循环泵维护按钮(131)(01): False
|
||||
2025-06-05 13:12:16,091 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.091] 设备 RJ-1热水循环泵(7) 点位 热水循环泵手动启停控制(132)(01): False
|
||||
2025-06-05 13:12:16,091 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.091] 设备 RJ-1热水循环泵(7) 点位 热水循环泵运行状态(47)(02): False
|
||||
2025-06-05 13:12:16,091 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.091] 设备 RJ-1热水循环泵(7) 点位 热水循环泵热继电器故障状态(48)(02): False
|
||||
2025-06-05 13:12:16,091 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.091] 设备 RJ-1热水循环泵(7) 点位 热水循环泵控制反馈不一致报警(49)(02): False
|
||||
2025-06-05 13:12:16,093 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.091] 设备 RJ-1热水循环泵(7) 点位 热水循环泵本地/远程状态(50)(02): False
|
||||
2025-06-05 13:12:16,095 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.093] 设备 RJ-1热水循环泵(7) 点位 热水循环泵综合故障(51)(02): False
|
||||
|
||||
2025-06-05 13:12:16,096 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.095] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀手/自动切换(128)(01): False
|
||||
2025-06-05 13:12:16,099 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.096] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀手动控制(129)(01): False
|
||||
2025-06-05 13:12:16,101 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.099] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀开到位(42)(02): False
|
||||
2025-06-05 13:12:16,102 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.101] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀关到位(43)(02): False
|
||||
2025-06-05 13:12:16,102 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.102] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀实际控制命令输出(44)(02): False
|
||||
2025-06-05 13:12:16,104 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.102] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀开故障(45)(02): False
|
||||
2025-06-05 13:12:16,105 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.104] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀关故障(46)(02): False
|
||||
|
||||
2025-06-05 13:12:16,105 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.105] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀手/自动切换(118)(01): False
|
||||
2025-06-05 13:12:16,107 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.105] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀手动控制(119)(01): False
|
||||
2025-06-05 13:12:16,107 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.107] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀开到位(32)(02): False
|
||||
2025-06-05 13:12:16,109 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.107] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀关到位(33)(02): False
|
||||
2025-06-05 13:12:16,109 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.109] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀实际控制命令输出(34)(02): False
|
||||
2025-06-05 13:12:16,111 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.109] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀开故障(35)(02): False
|
||||
2025-06-05 13:12:16,113 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.111] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀关故障(36)(02): False
|
||||
|
||||
2025-06-05 13:12:16,113 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.113] 设备 RY-1热源循环泵(8) 点位 热源循环泵手/自动切换(136)(01): False
|
||||
2025-06-05 13:12:16,115 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.113] 设备 RY-1热源循环泵(8) 点位 热源循环泵维护按钮(137)(01): False
|
||||
2025-06-05 13:12:16,117 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.115] 设备 RY-1热源循环泵(8) 点位 热源循环泵手动启停控制(138)(01): False
|
||||
2025-06-05 13:12:16,118 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.117] 设备 RY-1热源循环泵(8) 点位 热源循环泵运行状态(57)(02): False
|
||||
2025-06-05 13:12:16,120 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.118] 设备 RY-1热源循环泵(8) 点位 热源循环泵热继电器故障状态(58)(02): False
|
||||
2025-06-05 13:12:16,120 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.120] 设备 RY-1热源循环泵(8) 点位 热源循环泵控制反馈不一致报警(59)(02): False
|
||||
2025-06-05 13:12:16,121 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.120] 设备 RY-1热源循环泵(8) 点位 热源循环泵本地/远程状态(60)(02): False
|
||||
2025-06-05 13:12:16,122 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.121] 设备 RY-1热源循环泵(8) 点位 热源循环泵综合故障(61)(02): False
|
||||
|
||||
2025-06-05 13:12:16,123 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.122] 设备 L-1两联供空气源热泵主机(1) 点位 系统启停控制(103)(01): False
|
||||
2025-06-05 13:12:16,123 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.123] 设备 L-1两联供空气源热泵主机(1) 点位 单元维护(115)(01): False
|
||||
2025-06-05 13:12:16,124 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.123] 设备 L-1两联供空气源热泵主机(1) 点位 主机手/自动切换(116)(01): False
|
||||
2025-06-05 13:12:16,124 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.124] 设备 L-1两联供空气源热泵主机(1) 点位 主机手动控制(117)(01): False
|
||||
2025-06-05 13:12:16,126 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.124] 设备 L-1两联供空气源热泵主机(1) 点位 主机运行状态(10)(02): False
|
||||
2025-06-05 13:12:16,128 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.126] 设备 L-1两联供空气源热泵主机(1) 点位 主机故障状态(11)(02): False
|
||||
2025-06-05 13:12:16,128 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.128] 设备 L-1两联供空气源热泵主机(1) 点位 主机本地/远程状态(12)(02): False
|
||||
2025-06-05 13:12:16,129 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.128] 设备 L-1两联供空气源热泵主机(1) 点位 主机控制与反馈不一致报警(13)(02): False
|
||||
2025-06-05 13:12:16,131 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.129] 设备 L-1两联供空气源热泵主机(1) 点位 主机综合故障报警(14)(02): False
|
||||
2025-06-05 13:12:16,131 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.131] 设备 L-1两联供空气源热泵主机(1) 点位 单元准备完毕(15)(02): False
|
||||
2025-06-05 13:12:16,132 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.132] 设备 L-1两联供空气源热泵主机(1) 点位 出水温度(1)(04): 0
|
||||
2025-06-05 13:12:16,133 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.132] 设备 L-1两联供空气源热泵主机(1) 点位 进水温度(3)(04): 0
|
||||
2025-06-05 13:12:16,133 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.133] 设备 L-1两联供空气源热泵主机(1) 点位 COP(129)(04): 0
|
||||
2025-06-05 13:12:16,134 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.133] 设备 L-1两联供空气源热泵主机(1) 点位 压缩机运行百分比(609)(04): 0
|
||||
|
||||
2025-06-05 13:12:16,134 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.134] 设备 L-3两联供空气源热泵主机(2) 点位 主机运行状态(22)(02): False
|
||||
2025-06-05 13:12:16,134 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.134] 设备 L-3两联供空气源热泵主机(2) 点位 主机故障状态(23)(02): False
|
||||
2025-06-05 13:12:16,135 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.134] 设备 L-3两联供空气源热泵主机(2) 点位 主机本地/远程状态(24)(02): False
|
||||
2025-06-05 13:12:16,136 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.135] 设备 L-3两联供空气源热泵主机(2) 点位 主机控制与反馈不一致报警(25)(02): False
|
||||
2025-06-05 13:12:16,136 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.136] 设备 L-3两联供空气源热泵主机(2) 点位 主机综合故障报警(26)(02): False
|
||||
2025-06-05 13:12:16,137 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.136] 设备 L-3两联供空气源热泵主机(2) 点位 单元准备完毕(27)(02): False
|
||||
2025-06-05 13:12:16,137 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.137] 设备 L-3两联供空气源热泵主机(2) 点位 出水温度(29)(04): 0
|
||||
2025-06-05 13:12:16,138 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.137] 设备 L-3两联供空气源热泵主机(2) 点位 进水温度(31)(04): 0
|
||||
2025-06-05 13:12:16,138 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.138] 设备 L-3两联供空气源热泵主机(2) 点位 COP(133)(04): 0
|
||||
2025-06-05 13:12:16,139 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.138] 设备 L-3两联供空气源热泵主机(2) 点位 压缩机运行百分比(613)(04): 0
|
||||
2025-06-05 13:12:16,141 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.139] 设备 L-3两联供空气源热泵主机(2) 点位 系统启停控制(106)(01): False
|
||||
2025-06-05 13:12:16,142 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.141] 设备 L-3两联供空气源热泵主机(2) 点位 单元维护(125)(01): False
|
||||
2025-06-05 13:12:16,143 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.142] 设备 L-3两联供空气源热泵主机(2) 点位 主机手/自动切换(126)(01): False
|
||||
2025-06-05 13:12:16,144 [5] INFO DataAcquisition.Program - [2025-06-05 13:12:16.143] 设备 L-3两联供空气源热泵主机(2) 点位 主机手动控制(127)(01): False
|
||||
------------------------------------------------
|
|
@ -1,85 +0,0 @@
|
|||
------------------------------------------------
|
||||
2025-06-05 18:04:56,130 [1] INFO DataAcquisition.Program - [2025-06-05 18:04:56.127] 从数据库加载了 6 个设备
|
||||
2025-06-05 18:04:56,142 [1] INFO DataAcquisition.Program - [2025-06-05 18:04:56.142] 创建新的采集定时器: 10000ms, 设备数: 6
|
||||
2025-06-05 18:04:56,143 [1] INFO DataAcquisition.Program - [2025-06-05 18:04:56.142] 启动定时器: 10000ms, 设备数: 6
|
||||
2025-06-05 18:05:06,146 [4] INFO DataAcquisition.Program - [2025-06-05 18:05:06.146] 开始采集频率组: 10000ms, 设备数: 6
|
||||
2025-06-05 18:05:06,180 [9] INFO DataAcquisition.Program - [2025-06-05 18:05:06.180] 创建新的Modbus客户端: L-3两联供空气源热泵主机(127.0.0.1:502)
|
||||
2025-06-05 18:05:06,210 [6] INFO DataAcquisition.Program - [2025-06-05 18:05:06.210] DO,s=1;128,长度2,返回值:False,False
|
||||
2025-06-05 18:05:06,210 [7] INFO DataAcquisition.Program - [2025-06-05 18:05:06.210] DI,s=1;22,长度6,返回值:False,False,False,False,False,False
|
||||
2025-06-05 18:05:06,213 [11] INFO DataAcquisition.Program - [2025-06-05 18:05:06.213] DI,s=1;42,长度5,返回值:False,False,False,False,False
|
||||
2025-06-05 18:05:06,215 [9] INFO DataAcquisition.Program - [2025-06-05 18:05:06.215] DO,s=1;118,长度2,返回值:False,False
|
||||
2025-06-05 18:05:06,216 [11] INFO DataAcquisition.Program - [2025-06-05 18:05:06.216] DI,s=1;32,长度5,返回值:False,False,False,False,False
|
||||
2025-06-05 18:05:06,217 [4] INFO DataAcquisition.Program - [2025-06-05 18:05:06.217] DO,s=1;103,长度1,返回值:False
|
||||
2025-06-05 18:05:06,223 [4] INFO DataAcquisition.Program - [2025-06-05 18:05:06.223] DO,s=1;115,长度3,返回值:False,False,False
|
||||
2025-06-05 18:05:06,226 [9] INFO DataAcquisition.Program - [2025-06-05 18:05:06.225] DI,s=1;10,长度6,返回值:False,False,False,False,False,False
|
||||
2025-06-05 18:05:06,280 [12] INFO DataAcquisition.Program - [2025-06-05 18:05:06.280] s=1;x=4;1,长度4,返回值:0,0,0,0,0,0,0,0
|
||||
2025-06-05 18:05:06,280 [6] INFO DataAcquisition.Program - [2025-06-05 18:05:06.280] s=1;x=4;29,长度4,返回值:15,146,0,0,34,249,0,0
|
||||
2025-06-05 18:05:06,282 [9] INFO DataAcquisition.Program - [2025-06-05 18:05:06.282] s=1;x=4;133,长度2,返回值:0,0,0,0
|
||||
2025-06-05 18:05:06,283 [6] INFO DataAcquisition.Program - [2025-06-05 18:05:06.283] s=1;x=4;129,长度2,返回值:0,0,0,0
|
||||
2025-06-05 18:05:06,285 [16] INFO DataAcquisition.Program - [2025-06-05 18:05:06.284] s=1;x=4;613,长度2,返回值:0,0,0,0
|
||||
2025-06-05 18:05:06,285 [6] INFO DataAcquisition.Program - [2025-06-05 18:05:06.285] s=1;x=4;609,长度2,返回值:0,0,0,0
|
||||
2025-06-05 18:05:06,286 [4] INFO DataAcquisition.Program - [2025-06-05 18:05:06.286] DO,s=1;106,长度1,返回值:False
|
||||
2025-06-05 18:05:06,287 [16] INFO DataAcquisition.Program - [2025-06-05 18:05:06.286] DO,s=1;136,长度3,返回值:False,False,False
|
||||
2025-06-05 18:05:06,287 [11] INFO DataAcquisition.Program - [2025-06-05 18:05:06.287] DO,s=1;125,长度3,返回值:False,False,False
|
||||
2025-06-05 18:05:06,288 [15] INFO DataAcquisition.Program - [2025-06-05 18:05:06.288] DI,s=1;57,长度5,返回值:False,False,False,False,False
|
||||
2025-06-05 18:05:06,289 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.289] DO,s=1;130,长度3,返回值:False,False,False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.290] DI,s=1;47,长度5,返回值:False,True,True,False,False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀手/自动切换(128)(01): False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀手动控制(129)(01): False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀开到位(42)(02): False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀关到位(43)(02): False
|
||||
2025-06-05 18:05:06,291 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀实际控制命令输出(44)(02): False
|
||||
2025-06-05 18:05:06,292 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.291] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀开故障(45)(02): False
|
||||
2025-06-05 18:05:06,293 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.292] 设备 L-3两联供空气源热泵水阀(6) 点位 水阀关故障(46)(02): False
|
||||
2025-06-05 18:05:06,294 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.293] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀手/自动切换(118)(01): False
|
||||
2025-06-05 18:05:06,295 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.294] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀手动控制(119)(01): False
|
||||
2025-06-05 18:05:06,296 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.295] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀开到位(32)(02): False
|
||||
2025-06-05 18:05:06,296 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.296] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀关到位(33)(02): False
|
||||
2025-06-05 18:05:06,297 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.296] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀实际控制命令输出(34)(02): False
|
||||
2025-06-05 18:05:06,298 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.297] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀开故障(35)(02): False
|
||||
2025-06-05 18:05:06,299 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.298] 设备 L-1两联供空气源热泵水阀(5) 点位 水阀关故障(36)(02): False
|
||||
2025-06-05 18:05:06,299 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.299] 设备 L-1两联供空气源热泵主机(1) 点位 系统启停控制(103)(01): False
|
||||
2025-06-05 18:05:06,299 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.299] 设备 L-1两联供空气源热泵主机(1) 点位 单元维护(115)(01): False
|
||||
2025-06-05 18:05:06,299 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.299] 设备 L-1两联供空气源热泵主机(1) 点位 主机手/自动切换(116)(01): False
|
||||
2025-06-05 18:05:06,300 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.299] 设备 L-1两联供空气源热泵主机(1) 点位 主机手动控制(117)(01): False
|
||||
2025-06-05 18:05:06,300 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.300] 设备 L-1两联供空气源热泵主机(1) 点位 主机运行状态(10)(02): False
|
||||
2025-06-05 18:05:06,300 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.300] 设备 L-1两联供空气源热泵主机(1) 点位 主机故障状态(11)(02): False
|
||||
2025-06-05 18:05:06,300 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.300] 设备 L-1两联供空气源热泵主机(1) 点位 主机本地/远程状态(12)(02): False
|
||||
2025-06-05 18:05:06,301 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.300] 设备 L-1两联供空气源热泵主机(1) 点位 主机控制与反馈不一致报警(13)(02): False
|
||||
2025-06-05 18:05:06,301 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.301] 设备 L-1两联供空气源热泵主机(1) 点位 主机综合故障报警(14)(02): False
|
||||
2025-06-05 18:05:06,301 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.301] 设备 L-1两联供空气源热泵主机(1) 点位 单元准备完毕(15)(02): False
|
||||
2025-06-05 18:05:06,302 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.301] 设备 L-1两联供空气源热泵主机(1) 点位 出水温度(1)(04): 0
|
||||
2025-06-05 18:05:06,302 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.302] 设备 L-1两联供空气源热泵主机(1) 点位 进水温度(3)(04): 0
|
||||
2025-06-05 18:05:06,303 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.302] 设备 L-1两联供空气源热泵主机(1) 点位 COP(129)(04): 0
|
||||
2025-06-05 18:05:06,303 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.303] 设备 L-1两联供空气源热泵主机(1) 点位 压缩机运行百分比(609)(04): 0
|
||||
2025-06-05 18:05:06,304 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.303] 设备 L-3两联供空气源热泵主机(2) 点位 主机运行状态(22)(02): False
|
||||
2025-06-05 18:05:06,304 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.304] 设备 L-3两联供空气源热泵主机(2) 点位 主机故障状态(23)(02): False
|
||||
2025-06-05 18:05:06,304 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.304] 设备 L-3两联供空气源热泵主机(2) 点位 主机本地/远程状态(24)(02): False
|
||||
2025-06-05 18:05:06,305 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.304] 设备 L-3两联供空气源热泵主机(2) 点位 主机控制与反馈不一致报警(25)(02): False
|
||||
2025-06-05 18:05:06,306 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.305] 设备 L-3两联供空气源热泵主机(2) 点位 主机综合故障报警(26)(02): False
|
||||
2025-06-05 18:05:06,306 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.306] 设备 L-3两联供空气源热泵主机(2) 点位 单元准备完毕(27)(02): False
|
||||
2025-06-05 18:05:06,307 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.306] 设备 L-3两联供空气源热泵主机(2) 点位 出水温度(29)(04): 3986
|
||||
2025-06-05 18:05:06,307 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.307] 设备 L-3两联供空气源热泵主机(2) 点位 进水温度(31)(04): 8953
|
||||
2025-06-05 18:05:06,307 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.307] 设备 L-3两联供空气源热泵主机(2) 点位 COP(133)(04): 0
|
||||
2025-06-05 18:05:06,308 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.307] 设备 L-3两联供空气源热泵主机(2) 点位 压缩机运行百分比(613)(04): 0
|
||||
2025-06-05 18:05:06,308 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.308] 设备 L-3两联供空气源热泵主机(2) 点位 系统启停控制(106)(01): False
|
||||
2025-06-05 18:05:06,309 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.308] 设备 L-3两联供空气源热泵主机(2) 点位 单元维护(125)(01): False
|
||||
2025-06-05 18:05:06,309 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.309] 设备 L-3两联供空气源热泵主机(2) 点位 主机手/自动切换(126)(01): False
|
||||
2025-06-05 18:05:06,309 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.309] 设备 L-3两联供空气源热泵主机(2) 点位 主机手动控制(127)(01): False
|
||||
2025-06-05 18:05:06,311 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.309] 设备 RY-1热源循环泵(8) 点位 热源循环泵手/自动切换(136)(01): False
|
||||
2025-06-05 18:05:06,312 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.311] 设备 RY-1热源循环泵(8) 点位 热源循环泵维护按钮(137)(01): False
|
||||
2025-06-05 18:05:06,312 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.312] 设备 RY-1热源循环泵(8) 点位 热源循环泵手动启停控制(138)(01): False
|
||||
2025-06-05 18:05:06,312 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.312] 设备 RY-1热源循环泵(8) 点位 热源循环泵运行状态(57)(02): False
|
||||
2025-06-05 18:05:06,312 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.312] 设备 RY-1热源循环泵(8) 点位 热源循环泵热继电器故障状态(58)(02): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RY-1热源循环泵(8) 点位 热源循环泵控制反馈不一致报警(59)(02): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RY-1热源循环泵(8) 点位 热源循环泵本地/远程状态(60)(02): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RY-1热源循环泵(8) 点位 热源循环泵综合故障(61)(02): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RJ-1热水循环泵(7) 点位 热水循环泵手/自动切换(130)(01): False
|
||||
2025-06-05 18:05:06,313 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RJ-1热水循环泵(7) 点位 热水循环泵维护按钮(131)(01): False
|
||||
2025-06-05 18:05:06,314 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.313] 设备 RJ-1热水循环泵(7) 点位 热水循环泵手动启停控制(132)(01): False
|
||||
2025-06-05 18:05:06,314 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.314] 设备 RJ-1热水循环泵(7) 点位 热水循环泵运行状态(47)(02): False
|
||||
2025-06-05 18:05:06,315 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.314] 设备 RJ-1热水循环泵(7) 点位 热水循环泵热继电器故障状态(48)(02): True
|
||||
2025-06-05 18:05:06,315 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.315] 设备 RJ-1热水循环泵(7) 点位 热水循环泵控制反馈不一致报警(49)(02): True
|
||||
2025-06-05 18:05:06,315 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.315] 设备 RJ-1热水循环泵(7) 点位 热水循环泵本地/远程状态(50)(02): False
|
||||
2025-06-05 18:05:06,316 [13] INFO DataAcquisition.Program - [2025-06-05 18:05:06.316] 设备 RJ-1热水循环泵(7) 点位 热水循环泵综合故障(51)(02): False
|
||||
------------------------------------------------
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -1,34 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
|
||||
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
|
||||
|
||||
</configSections>
|
||||
<log4net>
|
||||
<root>
|
||||
<level value="ALL" />
|
||||
<appender-ref ref="SysAppender" />
|
||||
</root>
|
||||
<logger name="WebLogger">
|
||||
<level value="DEBUG" />
|
||||
</logger>
|
||||
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
|
||||
<param name="File" value="App_Data/" />
|
||||
<param name="AppendToFile" value="true" />
|
||||
<param name="RollingStyle" value="Date" />
|
||||
<param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />
|
||||
<param name="StaticLogFileName" value="false" />
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
<param name="Header" value=" ------------------------------------------------
" />
|
||||
<param name="Footer" value=" ------------------------------------------------
" />
|
||||
</layout>
|
||||
</appender>
|
||||
<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
</log4net>
|
||||
</configuration>
|
Binary file not shown.
Binary file not shown.
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net6.0",
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "6.0.0"
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"ConnectionStrings": {
|
||||
"ConStringEncrypt": "false",
|
||||
"ConnectionString": "server=127.0.0.1;port=3306;userid=root;password=Unity3du#d112233;database=suzhou_iot_db;"
|
||||
//"ConnectionString": "server=172.16.1.162;port=33061;userid=root;password=p@ssw0rd;database=suzhou_iot_db;"
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,34 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
|
||||
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
|
||||
|
||||
</configSections>
|
||||
<log4net>
|
||||
<root>
|
||||
<level value="ALL" />
|
||||
<appender-ref ref="SysAppender" />
|
||||
</root>
|
||||
<logger name="WebLogger">
|
||||
<level value="DEBUG" />
|
||||
</logger>
|
||||
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
|
||||
<param name="File" value="App_Data/" />
|
||||
<param name="AppendToFile" value="true" />
|
||||
<param name="RollingStyle" value="Date" />
|
||||
<param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />
|
||||
<param name="StaticLogFileName" value="false" />
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
<param name="Header" value=" ------------------------------------------------
" />
|
||||
<param name="Footer" value=" ------------------------------------------------
" />
|
||||
</layout>
|
||||
</appender>
|
||||
<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
</log4net>
|
||||
</configuration>
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -1,34 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
|
||||
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
|
||||
|
||||
</configSections>
|
||||
<log4net>
|
||||
<root>
|
||||
<level value="ALL" />
|
||||
<appender-ref ref="SysAppender" />
|
||||
</root>
|
||||
<logger name="WebLogger">
|
||||
<level value="DEBUG" />
|
||||
</logger>
|
||||
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
|
||||
<param name="File" value="App_Data/" />
|
||||
<param name="AppendToFile" value="true" />
|
||||
<param name="RollingStyle" value="Date" />
|
||||
<param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />
|
||||
<param name="StaticLogFileName" value="false" />
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
<param name="Header" value=" ------------------------------------------------
" />
|
||||
<param name="Footer" value=" ------------------------------------------------
" />
|
||||
</layout>
|
||||
</appender>
|
||||
<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
|
||||
<layout type="log4net.Layout.PatternLayout,log4net">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
</log4net>
|
||||
</configuration>
|
Binary file not shown.
Binary file not shown.
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net6.0",
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "6.0.0"
|
||||
},
|
||||
"configProperties": {
|
||||
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue