Какая-то смотрелка, чего там происходит в девайсине
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
using Modbus.Device;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO.Ports;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace charger_gui
|
||||
{
|
||||
class UpdateWorker
|
||||
{
|
||||
const int SLAVE_ADDRESS = 1;
|
||||
|
||||
private MainWindowViewModel model;
|
||||
private Thread workingThread;
|
||||
|
||||
public UpdateWorker(MainWindowViewModel model)
|
||||
{
|
||||
this.model = model;
|
||||
isWorking = false;
|
||||
shouldRestart = false;
|
||||
workingThread = new Thread(Work);
|
||||
model.isConnected = false;
|
||||
}
|
||||
|
||||
private bool isWorking;
|
||||
private bool shouldRestart;
|
||||
private string portName;
|
||||
|
||||
public void SetPort(string name)
|
||||
{
|
||||
if (portName != name)
|
||||
{
|
||||
portName = name;
|
||||
if (!isWorking)
|
||||
{
|
||||
isWorking = true;
|
||||
workingThread.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
shouldRestart = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Work()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var serialPort = new SerialPort(portName))
|
||||
{
|
||||
serialPort.BaudRate = 115200;
|
||||
serialPort.DataBits = 8;
|
||||
serialPort.Parity = Parity.None;
|
||||
serialPort.StopBits = StopBits.One;
|
||||
serialPort.Open();
|
||||
|
||||
// create modbus master
|
||||
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
|
||||
while (!shouldRestart)
|
||||
{
|
||||
var r1 = master.ReadHoldingRegisters(SLAVE_ADDRESS, 0, 4);
|
||||
model.iAcc = ToFloat(r1[0], r1[1]);
|
||||
model.iLamp = ToFloat(r1[2], r1[3]);
|
||||
var r2 = master.ReadHoldingRegisters(SLAVE_ADDRESS, 6, 4);
|
||||
model.uAcc = ToFloat(r2[0], r2[1]);
|
||||
model.uLamp = ToFloat(r2[2], r2[3]);
|
||||
// ничего не упало, коннект есть значит
|
||||
model.isConnected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
model.isConnected = false;
|
||||
Thread.Sleep(100);
|
||||
// will continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private float ToFloat(ushort v1, ushort v2)
|
||||
{
|
||||
byte[] t = new byte[4];
|
||||
t[0] = (byte)(v1 & 0xFF);
|
||||
t[1] = (byte)((v1 >> 8) & 0xFF);
|
||||
t[2] = (byte)(v2 & 0xFF);
|
||||
t[3] = (byte)((v2 >> 8) & 0xFF);
|
||||
return System.BitConverter.ToSingle(t, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user