-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDataCollector.cs
122 lines (80 loc) · 3.46 KB
/
DataCollector.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using ModbusGateWay.Modbus;
using ModbusGateWay.Models;
using System.IO.Ports;
namespace ModbusGateWay
{
public class DataCollector
{
public ILoggerFactory LoggerFactory { get; }
public IConfiguration Configuration { get; }
private Dictionary<string, ModbusMaster> ModbusMasters { get; }
private readonly ILogger<DataCollector> _log;
public string AddNewComPort(ComPortProps portProps)
{
var deviceCOMPort = new DeviceCOM(LoggerFactory.CreateLogger<DeviceCOM>(), portProps);
if (deviceCOMPort == null) return "Can't create Serial port.";
if (!deviceCOMPort.OpenPort()) return deviceCOMPort.LastExceptionText;
var modbusMaster = new ModbusMaster(deviceCOMPort);
ModbusMasters.Add(portProps.PortName, modbusMaster);
return "";
}
public bool AddNewTCPPort(TCPPortProps portProps)
{
var deviceCOMPort = new DeviceTCP(LoggerFactory.CreateLogger<DeviceTCP>(), portProps);
if (deviceCOMPort == null) return false;
if (!deviceCOMPort.OpenPort()) return false;
var modbusMaster = new ModbusMaster(deviceCOMPort);
if (modbusMaster == null) return false;
ModbusMasters.Add(portProps.PortName, modbusMaster);
return true;
}
public DataCollector(ILoggerFactory loggerFactory, IConfiguration configuration)
{
LoggerFactory = loggerFactory;
Configuration = configuration;
ModbusMasters = new Dictionary<string, ModbusMaster>();
_log = LoggerFactory.CreateLogger<DataCollector>();
}
public IEnumerable<string> GetAvailableComPort()
{
return SerialPort.GetPortNames();
}
public IEnumerable<string> GetOpenedPort()
{
return ModbusMasters.Keys;
}
public async Task<IEnumerable<int>> GetAsInteger(string portName, ModbusRequest request)
{
var master = ModbusMasters[portName];
var message = new ModbusMessage(request);
var responce = await master.SendMessage(message);
if (responce != null) return responce.GetAsInt();
return new int[0];
}
public async Task<IEnumerable<float>> GetAsFloat(string portName, ModbusRequest request)
{
var master = ModbusMasters[portName];
var message = new ModbusMessage(request);
var responce = await master.SendMessage(message);
if (responce != null) return responce.GetAsFloat();
return new float[0];
}
public async Task<IEnumerable<bool>> GetAsBool(string portName, ModbusRequest request)
{
var master = ModbusMasters[portName];
var message = new ModbusMessage(request);
_log.LogInformation(message.ToString());
var responce = await master.SendMessage(message);
_log.LogInformation(responce?.ToString());
if (responce != null) return responce.GetAsBool();
return new bool[0];
}
public async Task<bool> ExecutCommand(string portName, ModbusCommand command)
{
var master = ModbusMasters[portName];
var message = new ModbusMessage(command);
var responce = await master.SendMessage(message);
return responce == null ? false : responce.Error == 0;
}
}
}