Skip to content

Commit 4aeab3d

Browse files
author
JHirniak
committed
Finishing up on Modbus Registers editor backend logic. New commands, improved logic handling.
1 parent 5b72337 commit 4aeab3d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+5770
-2062
lines changed

Serial Monitor/App.config

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@
109109
<setting name="PRG_BOL_LimitExecution1ms" serializeAs="String">
110110
<value>False</value>
111111
</setting>
112+
<setting name="THM_COL_MouseOverForeColor" serializeAs="String">
113+
<value>LightGray</value>
114+
</setting>
115+
<setting name="THM_COL_MouseDownForeColor" serializeAs="String">
116+
<value>DimGray</value>
117+
</setting>
112118
</Serial_Monitor.Properties.Settings>
113119
</userSettings>
114120
</configuration>

Serial Monitor/Classes/EnumManager.cs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
using System.Threading.Tasks;
1010
using static Serial_Monitor.Classes.Enums.ModbusEnums;
1111

12-
namespace Serial_Monitor.Classes
13-
{
12+
namespace Serial_Monitor.Classes {
1413
public static class EnumManager {
1514

1615
#region Modbus Data Size
@@ -145,20 +144,44 @@ public static DataSelection ModbusStringToDataSelection(string Input) {
145144
else if (Input == "mbTypeRegInput") {
146145
return DataSelection.ModbusDataInputRegisters;
147146
}
147+
else if (Input == "C") {
148+
return DataSelection.ModbusDataCoils;
149+
}
150+
else if (Input == "D") {
151+
return DataSelection.ModbusDataDiscreteInputs;
152+
}
153+
else if (Input == "H") {
154+
return DataSelection.ModbusDataHoldingRegisters;
155+
}
156+
else if (Input == "I") {
157+
return DataSelection.ModbusDataInputRegisters;
158+
}
148159
return DataSelection.ModbusDataCoils;
149160
}
150-
public static StringPair ModbusDataSelectionToString(DataSelection Input) {
161+
public static StringPair ModbusDataSelectionToString(DataSelection Input, bool UseShortenCode = false) {
151162
if (Input == DataSelection.ModbusDataCoils) {
152-
return new StringPair("Coils", "mbTypeCoils");
163+
if (UseShortenCode == false) {
164+
return new StringPair("Coils", "mbTypeCoils");
165+
}
166+
return new StringPair("Coils", "C");
153167
}
154168
else if (Input == DataSelection.ModbusDataDiscreteInputs) {
155-
return new StringPair("Discrete", "mbTypeDiscrete");
169+
if (UseShortenCode == false) {
170+
return new StringPair("Discrete", "mbTypeDiscrete");
171+
}
172+
return new StringPair("Discrete", "D");
156173
}
157174
else if (Input == DataSelection.ModbusDataHoldingRegisters) {
158-
return new StringPair("Holding Registers", "mbTypeRegHolding");
175+
if (UseShortenCode == false) {
176+
return new StringPair("Holding Registers", "mbTypeRegHolding");
177+
}
178+
return new StringPair("Holding Registers", "H");
159179
}
160180
else if (Input == DataSelection.ModbusDataInputRegisters) {
161-
return new StringPair("Input Registers", "mbTypeRegInput");
181+
if (UseShortenCode == false) {
182+
return new StringPair("Input Registers", "mbTypeRegInput");
183+
}
184+
return new StringPair("Input Registers", "I");
162185
}
163186
return new StringPair("Coils", "mbTypeCoils");
164187
}

Serial Monitor/Classes/Enums/FormatEnums.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,10 @@ public enum LineFormatting {
2626
CR = 0x02,
2727
CRLF = 0x03
2828
}
29+
public enum SignedState {
30+
Unsigned = 0x00,
31+
Signed = 0x01,
32+
Toogle = 0x02
33+
}
2934
}
3035
}

Serial Monitor/Classes/Modbus/ModbusCoil.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
using System;
1+
using Serial_Monitor.Classes.Structures;
2+
using System;
23
using System.Collections.Generic;
34
using System.Linq;
45
using System.Text;
56
using System.Threading.Tasks;
67

78
namespace Serial_Monitor.Classes.Modbus
89
{
9-
public class ModbusCoil {
10+
public class ModbusCoil: ModbusObject {
1011
SerialManager? parentManager = null;
1112
public SerialManager? ParentManager {
1213
get { return parentManager; }
@@ -32,16 +33,17 @@ public bool Value {
3233
SystemManager.RegisterValueChanged(parentManager, this, Index, typeData);
3334
}
3435
}
35-
string name = "";
36-
public string Name {
37-
get { return name; }
38-
set {
39-
name = value;
40-
}
41-
}
4236
bool userChanged = false;
4337
public bool UserChanged {
4438
get { return userChanged; }
4539
}
40+
public void Set(StringPair Input) {
41+
if (Input.A.ToLower() == "name") {
42+
Name = Input.B;
43+
}
44+
else if (Input.A.ToLower() == "value") {
45+
Value = (Input.B == "1" ? true : false);
46+
}
47+
}
4648
}
4749
}

Serial Monitor/Classes/Modbus/ModbusEditor.cs

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Linq;
99
using System.Text;
1010
using System.Threading.Tasks;
11+
using static Serial_Monitor.Classes.Enums.FormatEnums;
1112
using static Serial_Monitor.Classes.Enums.ModbusEnums;
1213
using ListControl = ODModules.ListControl;
1314

@@ -274,6 +275,44 @@ public static void ChangeSizeList(object? sender, ListControl lstMonitor) {
274275
}
275276
lstMonitor.Invalidate();
276277
}
278+
public static void ChangeSignedList(ListControl lstMonitor, SignedState State) {
279+
int SelectedCount = lstMonitor.SelectionCount;
280+
if (SelectedCount <= 0) { return; }
281+
foreach (ListItem Li in lstMonitor.CurrentItems) {
282+
if (Li.SubItems.Count >= ModbusEditor.Indx_Value) {
283+
if (Li.Selected == true) {
284+
if (Li.Tag == null) { continue; }
285+
if (Li.Tag.GetType() == typeof(ModbusRegister)) {
286+
ModbusRegister Reg = (ModbusRegister)Li.Tag;
287+
if (Reg.Format == DataFormat.Float) {
288+
Reg.Signed = false;
289+
}
290+
else if (Reg.Format == DataFormat.Double) {
291+
Reg.Signed = false;
292+
}
293+
else {
294+
switch (State) {
295+
case SignedState.Unsigned:
296+
Reg.Signed = false; break;
297+
case SignedState.Signed:
298+
Reg.Signed = true; break;
299+
case SignedState.Toogle:
300+
Reg.Signed = !Reg.Signed; break;
301+
}
302+
}
303+
Li[Indx_Signed].Checked = Reg.Signed;
304+
Li[Indx_Value].Text = Reg.FormattedValue;
305+
RetroactivelyApplyFormatChanges(Reg.Address, lstMonitor);
306+
}
307+
SelectedCount--;
308+
}
309+
if (SelectedCount <= 0) {
310+
break;
311+
}
312+
}
313+
}
314+
lstMonitor.Invalidate();
315+
}
277316
#endregion
278317
#region Format Editing Support
279318
public static void CheckItem(object DropDownList, DataFormat CheckOn) {
@@ -431,7 +470,7 @@ public static void CopyRegistersAsText(ListControl ListEditor, bool ClearSelecti
431470
public static void CopyRegisters(ListControl ListEditor, ModbusClipboardFlags Flags, bool ClearSelection = true) {
432471
if (ListEditor.CurrentItems == null) { return; }
433472
List<ModbusDataObject> list = new List<ModbusDataObject>();
434-
for (int i = 0; i < ListEditor.CurrentItems.Count; i++) {
473+
for (int i = 0; i < ListEditor.CurrentItems.Count; i++) {
435474
if (ListEditor.CurrentItems[i].Selected == true) {
436475
if (ListEditor.CurrentItems[i].SubItems.Count == 5) {
437476
object? objCmd = ListEditor.CurrentItems[i].Tag;
@@ -536,7 +575,7 @@ private static void PasteRegisterNames(ListControl ListEditor) {
536575
if (objCmd == null) { continue; }
537576
if (objCmd.GetType() == typeof(ModbusRegister)) {
538577
ModbusRegister Reg = (ModbusRegister)objCmd;
539-
Reg.Name = CopiedItems[j].Replace("\r","");
578+
Reg.Name = CopiedItems[j].Replace("\r", "");
540579
ListEditor.CurrentItems[k][1].Text = Reg.Name;
541580
SystemManager.RegisterNameChanged(Reg.ParentManager, Reg, Reg.Address, Reg.ComponentType);
542581
}
@@ -571,5 +610,33 @@ private static bool FlagSet(ModbusClipboardFlags DataObj, ModbusClipboardFlags F
571610
return false;
572611
}
573612
}
613+
614+
615+
public static void ChangeAppearance(object? sender, ListControl lstMonitor) {
616+
int SelectedCount = lstMonitor.SelectionCount;
617+
if (SelectedCount <= 0) { return; }
618+
foreach (ListItem Li in lstMonitor.CurrentItems) {
619+
if (Li.SubItems.Count >= Indx_Value) {
620+
if (Li.Selected == true) {
621+
if (Li.Tag == null) { continue; }
622+
if (Li.Tag.GetType() == typeof(ModbusObject)) {
623+
ModbusObject Reg = (ModbusObject)Li.Tag;
624+
if (Reg.UseBackColor == true) {
625+
Li[Indx_Display].BackColor = Reg.BackColor;
626+
}
627+
if (Reg.UseForeColor == true) {
628+
Li[Indx_Display].ForeColor = Reg.ForeColor;
629+
}
630+
}
631+
SelectedCount--;
632+
}
633+
if (SelectedCount <= 0) {
634+
break;
635+
}
636+
}
637+
}
638+
lstMonitor.Invalidate();
639+
}
574640
}
641+
575642
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace Serial_Monitor.Classes.Modbus {
8+
public class ModbusObject {
9+
string name = "";
10+
public string Name {
11+
get { return name; }
12+
set { name = value; }
13+
}
14+
Color backColor = Color.White;
15+
public Color BackColor {
16+
get { return backColor; }
17+
set { backColor = value; }
18+
}
19+
Color foreColor = Color.Black;
20+
public Color ForeColor {
21+
get { return foreColor; }
22+
set { foreColor = value; }
23+
}
24+
bool useBackColor = false;
25+
public bool UseBackColor {
26+
get { return useBackColor; }
27+
set { useBackColor = value; }
28+
}
29+
bool useForeColor = false;
30+
public bool UseForeColor {
31+
get { return useForeColor; }
32+
set { useForeColor = value; }
33+
}
34+
}
35+
}

Serial Monitor/Classes/Modbus/ModbusRegister.cs

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Serial_Monitor.Classes.Enums;
2+
using Serial_Monitor.Classes.Structures;
23
using System;
34
using System.Collections.Generic;
45
using System.Data;
@@ -8,11 +9,10 @@
89
using System.Text;
910
using System.Threading.Tasks;
1011
using System.Windows.Forms;
11-
12-
1312
namespace Serial_Monitor.Classes.Modbus {
1413

15-
public class ModbusRegister {
14+
public class ModbusRegister: ModbusObject {
15+
const bool TEST = false;
1616
int Index = 0;
1717
SerialManager? parentManager = null;
1818
public SerialManager? ParentManager {
@@ -50,11 +50,7 @@ public string FormattedValue {
5050
SystemManager.RegisterValueChanged(parentManager, this, Index, typeData);
5151
}
5252
}
53-
string name = "";
54-
public string Name {
55-
get { return name; }
56-
set { name = value; }
57-
}
53+
5854
bool userChanged = false;
5955
public bool UserChanged {
6056
get { return userChanged; }
@@ -222,17 +218,17 @@ public void PushValue(long Input, bool AllowTransmit) {
222218
if ((AllowTransmit) && (parentManager.IsMaster)) {
223219
SystemManager.SendModbusCommand(parentManager, typeData, "Write Register " + Index.ToString() + " = " + Value.ToString());
224220
}
225-
#if DEBUG
221+
#if TEST
226222
Debug.Print("Size: 16, Input: " + Input.ToString() + ", Set: " + regValue.ToString());
227-
#endif
223+
#endif
228224
}
229225
else if (dataSize == ModbusEnums.DataSize.Bits32) {
230-
#if DEBUG
231-
Debug.Print("Size: 32, Input: " + Input.ToString());
226+
#if TEST
227+
Debug.Print("Size: 32, Input: " + Input.ToString());
232228
#endif
233229
regValue = (short)(0xFFFF & Input);
234-
#if DEBUG
235-
Debug.Print("Size: 16, Set: " + regValue.ToString());
230+
#if TEST
231+
Debug.Print("Size: 16, Set: " + regValue.ToString());
236232
#endif
237233
if (Index + 1 < ModbusSupport.MaximumRegisters) {
238234
SetData(Index + 1, 1, Input, typeData, parentManager, AllowTransmit);
@@ -306,16 +302,16 @@ public void ModifyValue() {
306302
}
307303
else {
308304
if (Index + 1 < ModbusSupport.MaximumRegisters - 1) {
309-
#if DEBUG
310-
Debug.Print("Size: 32, Formatter: ");
311-
Debug.Print(" - " + ((ushort)regValue).ToString());
312-
Debug.Print(" - " + AppendData(Index + 1, 1, typeData, parentManager).ToString());
305+
#if TEST
306+
Debug.Print("Size: 32, Formatter: ");
307+
Debug.Print(" - " + ((ushort)regValue).ToString());
308+
Debug.Print(" - " + AppendData(Index + 1, 1, typeData, parentManager).ToString());
313309
#endif
314310
Temp = (long)(ushort)regValue;
315311
Temp |= AppendData(Index + 1, 1, typeData, parentManager);
316-
#if DEBUG
317-
Debug.Print(" Results In: " + Temp.ToString());
318-
#endif
312+
#if TEST
313+
Debug.Print(" Results In: " + Temp.ToString());
314+
#endif
319315
}
320316
}
321317
formattedValue = Formatters.LongToString(Temp, format, dataSize, signed);
@@ -370,5 +366,26 @@ private static void SetData(int NextIndex, int Shift, long Value, DataSelection
370366
parentManager.HoldingRegisters[NextIndex].PushValue((long)Output, AllowTransmit);
371367
}
372368
}
369+
public void Set(StringPair Input) {
370+
if (Input.A.ToLower() == "name") {
371+
Name = Input.B;
372+
}
373+
else if (Input.A.ToLower() == "value") {
374+
short Temp = 0;
375+
short.TryParse(Input.B, out Temp);
376+
Value = Temp;
377+
}
378+
else if (Input.A.ToLower() == "format") {
379+
Format = EnumManager.StringToDataFormat(Input.B);
380+
}
381+
else if (Input.A.ToLower() == "size") {
382+
int Temp = 0;
383+
int.TryParse(Input.B, out Temp);
384+
Size = EnumManager.IntegerToDataSize(Temp);
385+
}
386+
else if (Input.A.ToLower() == "signed") {
387+
Signed = (Input.B == "1" ? true : false);
388+
}
389+
}
373390
}
374391
}

0 commit comments

Comments
 (0)