diff --git a/charger-gui/MainWindow.xaml b/charger-gui/MainWindow.xaml
index fd02aa5..a6936e3 100644
--- a/charger-gui/MainWindow.xaml
+++ b/charger-gui/MainWindow.xaml
@@ -39,29 +39,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/charger-gui/MainWindow.xaml.cs b/charger-gui/MainWindow.xaml.cs
index 9f8e026..3da0169 100644
--- a/charger-gui/MainWindow.xaml.cs
+++ b/charger-gui/MainWindow.xaml.cs
@@ -79,5 +79,20 @@ namespace charger_gui
model.CurrentOperation = new ChargeOperation(log, model);
model.CurrentOperation.Start();
}
+ private void TrainButton_Click(object sender, RoutedEventArgs e)
+ {
+ if (model.CurrentOperation != null)
+ {
+ model.CurrentOperation.Cancel();
+ }
+ model.CurrentOperation = new TrainOperation(log, model, model.TrainDuration);
+ model.CurrentOperation.Start();
+ }
+
+ protected override void OnClosed(EventArgs e)
+ {
+ base.OnClosed(e);
+ Application.Current.Shutdown();
+ }
}
}
diff --git a/charger-gui/MainWindowViewModel.cs b/charger-gui/MainWindowViewModel.cs
index 73ae1ff..5cf1d3a 100644
--- a/charger-gui/MainWindowViewModel.cs
+++ b/charger-gui/MainWindowViewModel.cs
@@ -1,10 +1,7 @@
using charger_gui.operations;
-using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO.Ports;
-using System.Linq;
-using System.Text;
using System.Windows.Media;
namespace charger_gui
@@ -38,73 +35,59 @@ namespace charger_gui
}
}
- private float u1Acc;
- public float U1Acc
+ private float u2;
+ public float U2
{
get
{
- return u1Acc;
+ return u2;
}
set
{
- u1Acc = value;
- OnPropertyChanged("U1Acc");
+ u2 = value;
+ OnPropertyChanged("U2");
}
}
- private float u2Acc;
- public float U2Acc
+ private float u3;
+ public float U3
{
get
{
- return u2Acc;
+ return u3;
}
set
{
- u2Acc = value;
- OnPropertyChanged("U2Acc");
+ u3 = value;
+ OnPropertyChanged("U3");
}
}
- private float iLamp;
- public float ILamp
+ private float u4;
+ public float U4
{
get
{
- return iLamp;
+ return u4;
}
set
{
- iLamp = value;
- OnPropertyChanged("ILamp");
+ u4 = value;
+ OnPropertyChanged("U4");
}
}
- private float u1Lamp;
- public float U1Lamp
+ private float u5;
+ public float U5
{
get
{
- return u1Lamp;
+ return u5;
}
set
{
- u1Lamp = value;
- OnPropertyChanged("U1Lamp");
- }
- }
-
- private float u2Lamp;
- public float U2Lamp
- {
- get
- {
- return u2Lamp;
- }
- set
- {
- u2Lamp = value;
- OnPropertyChanged("U2Lamp");
+ u5 = value;
+ OnPropertyChanged("U5");
}
}
@@ -190,7 +173,10 @@ namespace charger_gui
currentOperation.StatusChanged -= OnCurrentOperationStatusChanged;
}
currentOperation = value;
- currentOperation.StatusChanged += OnCurrentOperationStatusChanged;
+ if (currentOperation != null)
+ {
+ currentOperation.StatusChanged += OnCurrentOperationStatusChanged;
+ }
OnPropertyChanged("OperationStatus");
}
}
@@ -209,6 +195,8 @@ namespace charger_gui
}
}
+ public int TrainDuration { get; set; }
+
private void FillPorts()
{
ports = new List(SerialPort.GetPortNames());
diff --git a/charger-gui/UpdateWorker.cs b/charger-gui/UpdateWorker.cs
index 14aed1f..a815e28 100644
--- a/charger-gui/UpdateWorker.cs
+++ b/charger-gui/UpdateWorker.cs
@@ -67,14 +67,13 @@ namespace charger_gui
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
while (!shouldRestart)
{
- var r1 = master.ReadHoldingRegisters(SLAVE_ADDRESS, 0, 4);
+ var r1 = master.ReadHoldingRegisters(SLAVE_ADDRESS, 0, 2);
model.IAcc = ToFloat(r1[0], r1[1]);
- model.ILamp = ToFloat(r1[2], r1[3]);
var r2 = master.ReadHoldingRegisters(SLAVE_ADDRESS, 6, 8);
- model.U1Acc = ToFloat(r2[0], r2[1]);
- model.U2Acc = ToFloat(r2[2], r2[3]);
- model.U1Lamp = ToFloat(r2[4], r2[5]);
- model.U2Lamp = ToFloat(r2[6], r2[7]);
+ model.U2 = ToFloat(r2[0], r2[1]);
+ model.U3 = ToFloat(r2[2], r2[3]);
+ model.U4 = ToFloat(r2[4], r2[5]);
+ model.U5 = ToFloat(r2[6], r2[7]);
master.WriteSingleRegister(SLAVE_ADDRESS, CHARGE_REGISTER, (ushort)(model.IsCharging ? 1 : 0));
master.WriteSingleRegister(SLAVE_ADDRESS, LAMP_REGISTER, (ushort)(model.IsLampOn ? 1 : 0));
// ничего не упало, коннект есть значит
diff --git a/charger-gui/charger-gui.csproj b/charger-gui/charger-gui.csproj
index e9b4428..9a3deb7 100644
--- a/charger-gui/charger-gui.csproj
+++ b/charger-gui/charger-gui.csproj
@@ -13,6 +13,22 @@
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
4
true
+ C:\Work\charger\charger-gui\publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+ true
AnyCPU
@@ -33,6 +49,18 @@
prompt
4
+
+ BEEA544097F13D7DCC301EAB82DAD11595FA2626
+
+
+ charger-gui_TemporaryKey.pfx
+
+
+ true
+
+
+ true
+
packages\NModbus4.2.1.0\lib\net40\NModbus4.dll
@@ -58,6 +86,7 @@
+
@@ -93,11 +122,19 @@
ResXFileCodeGenerator
Resources.Designer.cs
+
SettingsSingleFileGenerator
Settings.Designer.cs
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
\ No newline at end of file
diff --git a/charger-gui/charger-gui.csproj.user b/charger-gui/charger-gui.csproj.user
new file mode 100644
index 0000000..9d9e44c
--- /dev/null
+++ b/charger-gui/charger-gui.csproj.user
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+ ru-RU
+ false
+
+
\ No newline at end of file
diff --git a/charger-gui/charger-gui_TemporaryKey.pfx b/charger-gui/charger-gui_TemporaryKey.pfx
new file mode 100644
index 0000000..f8c9c96
Binary files /dev/null and b/charger-gui/charger-gui_TemporaryKey.pfx differ
diff --git a/charger-gui/operations/ChargeOperation.cs b/charger-gui/operations/ChargeOperation.cs
index 91b6734..64efe09 100644
--- a/charger-gui/operations/ChargeOperation.cs
+++ b/charger-gui/operations/ChargeOperation.cs
@@ -32,18 +32,19 @@ namespace charger_gui.operations
model.IsCharging = true;
model.IsLampOn = false;
Thread.Sleep(500);
- while (model.U2Acc < MAX_VOLTAGE)
+ while (model.U3 < MAX_VOLTAGE)
{
Thread.Sleep(1000);
passed = (int)((DateTime.Now - start).TotalSeconds);
OnStatusChanged();
- log.Log("Charging " + passed + "s " + model.U2Acc.ToString("F4"));
- if (model.U1Acc < 10f)
+ log.Log("Charging " + passed + "s " + model.U3.ToString("F4"));
+ if (model.U2 < 10f)
{
- log.Log("Charging error: NO POWER. " + model.U1Acc.ToString("F4"));
+ log.Log("Charging error: NO POWER. " + model.U2.ToString("F4"));
}
}
log.Log("Charging complete in " + passed + " seconds");
+ model.IsCharging = false;
isComplete = true;
OnStatusChanged();
}
diff --git a/charger-gui/operations/DischargeOperation.cs b/charger-gui/operations/DischargeOperation.cs
index 26a8b56..bffd6d5 100644
--- a/charger-gui/operations/DischargeOperation.cs
+++ b/charger-gui/operations/DischargeOperation.cs
@@ -32,14 +32,15 @@ namespace charger_gui.operations
model.IsCharging = false;
model.IsLampOn = true;
Thread.Sleep(500);
- while (model.U2Acc > MIN_VOLTAGE)
+ while (model.U3 > MIN_VOLTAGE)
{
Thread.Sleep(1000);
passed = (int)((DateTime.Now - start).TotalSeconds);
OnStatusChanged();
- log.Log("Discharging " + passed + "s " + model.U2Acc.ToString("F4"));
+ log.Log("Discharging " + passed + "s " + model.U3.ToString("F4"));
}
log.Log("Discharging complete in " + passed + " seconds");
+ model.IsLampOn = false;
isComplete = true;
OnStatusChanged();
}
diff --git a/charger-gui/operations/TrainOperation.cs b/charger-gui/operations/TrainOperation.cs
new file mode 100644
index 0000000..861d229
--- /dev/null
+++ b/charger-gui/operations/TrainOperation.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+
+namespace charger_gui.operations
+{
+ class TrainOperation : AutomaticOperation
+ {
+ const float MAX_VOLTAGE = 14.5f;
+
+ private int passed;
+ private bool isComplete = false;
+ private int duration;
+ public override string Status
+ {
+ get
+ {
+ if (isComplete) return "Training complete in " + passed + " seconds";
+ else return "Training, passed " + passed + " seconds (of " + duration + ")";
+ }
+ }
+
+ public TrainOperation(Logger log, MainWindowViewModel model, int duration) : base(log, model)
+ {
+ this.duration = duration;
+ }
+
+ protected override void Work()
+ {
+ log.Log("Training started");
+ var start = DateTime.Now;
+ while (passed < duration)
+ {
+ model.IsCharging = true;
+ model.IsLampOn = false;
+ Thread.Sleep(1000);
+ model.IsCharging = false;
+ model.IsLampOn = false;
+ Thread.Sleep(50);
+ model.IsCharging = false;
+ model.IsLampOn = true;
+ Thread.Sleep(1000);
+ model.IsCharging = false;
+ model.IsLampOn = false;
+ Thread.Sleep(50);
+ passed = (int)((DateTime.Now - start).TotalSeconds);
+ OnStatusChanged();
+ log.Log("Training" + passed + "s " + model.U3.ToString("F4"));
+ if (model.U2 < 10f)
+ {
+ log.Log("Training error: NO POWER. " + model.U2.ToString("F4"));
+ }
+ }
+ log.Log("Training complete in " + passed + " seconds");
+ model.IsCharging = false;
+ model.IsLampOn = false;
+ isComplete = true;
+ OnStatusChanged();
+ }
+ }
+}