Skip to content

Commit 5e4c998

Browse files
Version 2.7
Possibility to store Log-Data
1 parent 8b02bdb commit 5e4c998

File tree

13 files changed

+2579
-118
lines changed

13 files changed

+2579
-118
lines changed

EasyModbus/EasyModbus.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
<Compile Include="ModbusClient.cs" />
5353
<Compile Include="ModbusServer.cs" />
5454
<Compile Include="Properties\AssemblyInfo.cs" />
55+
<Compile Include="StoreLogData.cs" />
5556
</ItemGroup>
5657
<ItemGroup />
5758
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

EasyModbus/ModbusClient-PC017.cs

Lines changed: 1816 additions & 0 deletions
Large diffs are not rendered by default.

EasyModbus/ModbusClient.cs

Lines changed: 417 additions & 31 deletions
Large diffs are not rendered by default.

EasyModbus/ModbusServer.cs

Lines changed: 176 additions & 59 deletions
Large diffs are not rendered by default.

EasyModbus/StoreLogData.cs

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace EasyModbus
7+
{
8+
/// <summary>
9+
/// Store Log-Data in a File
10+
/// </summary>
11+
public sealed class StoreLogData
12+
{
13+
private String filename = null;
14+
private static volatile StoreLogData instance;
15+
private static object syncObject = new Object();
16+
17+
/// <summary>
18+
/// Private constructor; Ensures the access of the class only via "instance"
19+
/// </summary>
20+
private StoreLogData()
21+
{
22+
}
23+
24+
/// <summary>
25+
/// Returns the instance of the class (singleton)
26+
/// </summary>
27+
/// <returns>instance (Singleton)</returns>
28+
public static StoreLogData Instance
29+
{
30+
get
31+
{
32+
if (instance == null)
33+
{
34+
lock (syncObject)
35+
{
36+
if (instance == null)
37+
instance = new StoreLogData();
38+
}
39+
}
40+
41+
return instance;
42+
}
43+
}
44+
45+
/// <summary>
46+
/// Store message in Log-File
47+
/// </summary>
48+
/// <param name="message">Message to append to the Log-File</param>
49+
public void Store(String message)
50+
{
51+
if (this.filename == null)
52+
return;
53+
54+
using (System.IO.StreamWriter file =
55+
new System.IO.StreamWriter(Filename, true))
56+
{
57+
file.WriteLine(message);
58+
}
59+
}
60+
61+
/// <summary>
62+
/// Store message in Log-File including Timestamp
63+
/// </summary>
64+
/// <param name="message">Message to append to the Log-File</param>
65+
/// <param name="timestamp">Timestamp to add to the same Row</param>
66+
public void Store(String message, DateTime timestamp)
67+
{
68+
using (System.IO.StreamWriter file =
69+
new System.IO.StreamWriter(Filename, true))
70+
{
71+
file.WriteLine(timestamp.ToString("dd.MM.yyyy H:mm:ss.ff ") + message);
72+
}
73+
}
74+
75+
/// <summary>
76+
/// Gets or Sets the Filename to Store Strings in a File
77+
/// </summary>
78+
public string Filename
79+
{
80+
get
81+
{
82+
return filename;
83+
}
84+
set
85+
{
86+
filename = value;
87+
}
88+
}
89+
}
90+
}

EasyModbusAdvancedClient/AddConnectionForm.cs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ public AddConnectionForm(EasyModbusManager easyModbusManager, int indexToEdit)
4646
connectionProperties.CyclicFlag = easyModbusManager.connectionPropertiesList[indexToEdit].CyclicFlag;
4747
connectionProperties.ModbusTCPAddress = easyModbusManager.connectionPropertiesList[indexToEdit].ModbusTCPAddress;
4848
connectionProperties.Port = easyModbusManager.connectionPropertiesList[indexToEdit].Port;
49+
connectionProperties.ComPort = easyModbusManager.connectionPropertiesList[indexToEdit].ComPort;
50+
connectionProperties.SlaveID = easyModbusManager.connectionPropertiesList[indexToEdit].SlaveID;
51+
connectionProperties.ModbusTypeProperty = easyModbusManager.connectionPropertiesList[indexToEdit].ModbusTypeProperty;
52+
connectionProperties.modbusClient = easyModbusManager.connectionPropertiesList[indexToEdit].modbusClient;
4953
propertyGrid1.SelectedObject = connectionProperties;
5054
editMode = true;
5155
this.indexToEdit = indexToEdit;
@@ -61,7 +65,19 @@ void Button1Click(object sender, EventArgs e)
6165
try
6266
{
6367
if (!editMode)
68+
{
6469
easyModbusManager.AddConnection(connectionProperties);
70+
if (connectionProperties.ModbusTypeProperty == ModbusType.ModbusTCP)
71+
{
72+
connectionProperties.modbusClient = new EasyModbus.ModbusClient();
73+
connectionProperties.modbusClient.UnitIdentifier = (byte)connectionProperties.SlaveID;
74+
}
75+
else
76+
{
77+
connectionProperties.modbusClient = new EasyModbus.ModbusClient(connectionProperties.ComPort);
78+
connectionProperties.modbusClient.UnitIdentifier = (byte)connectionProperties.SlaveID;
79+
}
80+
}
6581
else
6682
easyModbusManager.EditConnection(connectionProperties, indexToEdit);
6783
}
@@ -129,6 +145,28 @@ public int Port
129145
get { return port; }
130146
set { port = value; }
131147
}
148+
149+
string comPort = "COM1";
150+
[Browsable(true)]
151+
[Category("Connection properties")]
152+
[Description("Serial COM-Port")]
153+
[DisplayName("Serial COM-Port")]
154+
public string ComPort
155+
{
156+
get { return comPort; }
157+
set { comPort = value; }
158+
}
159+
160+
int slaveID = 1;
161+
[Browsable(true)]
162+
[Category("Connection properties")]
163+
[Description("Slave ID")]
164+
[DisplayName("Slave ID")]
165+
public int SlaveID
166+
{
167+
get { return slaveID; }
168+
set { slaveID = value; }
169+
}
132170

133171

134172
bool cyclicFlag = false;
@@ -161,7 +199,7 @@ public System.Collections.Generic.List<FunctionProperties> FunctionPropertiesLis
161199
set { functionPropertiesList = value; }
162200
}
163201

164-
public EasyModbus.ModbusClient modbusClient = new EasyModbus.ModbusClient();
202+
public EasyModbus.ModbusClient modbusClient;
165203
public System.Threading.Timer timer;
166204
}
167205
}

EasyModbusAdvancedClient/EasyModbusAdvancedClient.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@
5656
<Compile Include="..\EasyModbus\ModbusServer.cs">
5757
<Link>ModbusServer.cs</Link>
5858
</Compile>
59+
<Compile Include="..\EasyModbus\StoreLogData.cs">
60+
<Link>StoreLogData.cs</Link>
61+
</Compile>
5962
<Compile Include="AddConnectionForm.cs">
6063
<SubType>Form</SubType>
6164
</Compile>

EasyModbusAdvancedClient/EasyModbusManager.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public void AddConnection(ConnectionProperties connectionProperties)
3737
if (connectionProperties.ConnectionName == connectionProperty.ConnectionName)
3838
{
3939
throw new Exception("Duplicate connection Name detected");
40-
return;
4140
}
4241
}
4342
connectionPropertiesList.Add(connectionProperties);
@@ -91,7 +90,7 @@ public void EditFunctionProperty(FunctionProperties functionProperty, int connec
9190
public void GetValues(ConnectionProperties connectionProperties, int functionPropertyID)
9291
{
9392

94-
modbusClient = connectionProperties.modbusClient;
93+
modbusClient = connectionProperties.modbusClient;
9594
if (!modbusClient.Connected)
9695
{
9796
modbusClient.IPAddress = connectionProperties.ModbusTCPAddress;

EasyModbusAdvancedClient/MainForm.cs

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,11 @@ private void UpdateListBox(object sender)
9595
treeView1.Nodes.Add(rootNode);
9696
foreach (ConnectionProperties connectionProperty in easyModbusManager.connectionPropertiesList)
9797
{
98-
TreeNode treeNode = new TreeNode("Connection: " + connectionProperty.ConnectionName +"; IP-Address: "+connectionProperty.ModbusTCPAddress + "; Port: "+connectionProperty.Port);
98+
TreeNode treeNode = null;
99+
if (connectionProperty.ModbusTypeProperty == ModbusType.ModbusTCP)
100+
treeNode = new TreeNode("Modbus-TCP Connection: " + connectionProperty.ConnectionName +"; IP-Address: "+connectionProperty.ModbusTCPAddress + "; Port: "+connectionProperty.Port);
101+
else
102+
treeNode = new TreeNode("Modbus-RTU Connection: " + connectionProperty.ConnectionName +"; COM-Port: "+connectionProperty.ComPort);
99103
foreach (FunctionProperties functionProperty in connectionProperty.FunctionPropertiesList)
100104
{
101105
treeNode.Nodes.Add("Function code: " + functionProperty.FunctionCode + "; Starting Address: "+functionProperty.StartingAdress + "; Quantity: "+functionProperty.Quantity);
@@ -571,33 +575,32 @@ void StartSingleJobToolStripMenuItemClick(object sender, EventArgs e)
571575
}
572576

573577
private bool locked;
578+
object locker = new object();
574579
private void GetValuesThread(object obj)
575580
{
581+
if (locked)
582+
System.Threading.Thread.Sleep(100);
576583
if (!locked)
577-
lock (this)
578-
{
579-
locked = true;
580-
GetValuesThreadObject getValuesThreadObject = (GetValuesThreadObject)obj;
581-
try
582-
{
583-
if (getValuesThreadObject.functionPropertyIndex != 0)
584-
easyModbusManager.GetValues(getValuesThreadObject.connectionProperty, getValuesThreadObject.functionPropertyIndex);
585-
else
586-
easyModbusManager.GetValues(getValuesThreadObject.connectionProperty);
587-
}
588-
catch (Exception exc)
589-
{
590-
getValuesThreadObject.connectionProperty.timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
591-
getValuesThreadObject.connectionProperty.modbusClient.Disconnect();
592-
MessageBox.Show(exc.Message, "Exception Reading values", MessageBoxButtons.OK, MessageBoxIcon.Error);
584+
locked = true;
585+
lock (locker) {
586+
587+
GetValuesThreadObject getValuesThreadObject = (GetValuesThreadObject)obj;
588+
try {
589+
if (getValuesThreadObject.functionPropertyIndex != 0)
590+
easyModbusManager.GetValues(getValuesThreadObject.connectionProperty, getValuesThreadObject.functionPropertyIndex);
591+
else
592+
easyModbusManager.GetValues(getValuesThreadObject.connectionProperty);
593+
} catch (Exception exc) {
594+
getValuesThreadObject.connectionProperty.timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
595+
getValuesThreadObject.connectionProperty.modbusClient.Disconnect();
596+
MessageBox.Show(exc.Message, "Exception Reading values", MessageBoxButtons.OK, MessageBoxIcon.Error);
593597

594-
}
595-
finally
596-
{
597-
UpdateNodesConnectedStatus();
598-
}
599-
locked = false;
600-
}
598+
} finally {
599+
UpdateNodesConnectedStatus();
600+
locked = false;
601+
}
602+
locked = false;
603+
}
601604
}
602605

603606
void StartAllJobsToolStripMenuItemClick(object sender, EventArgs e)

EasyModbusClientExample/EasyModbusClientExample.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@
5959
<Compile Include="..\EasyModbus\ModbusServer.cs">
6060
<Link>ModbusServer.cs</Link>
6161
</Compile>
62+
<Compile Include="..\EasyModbus\StoreLogData.cs">
63+
<Link>StoreLogData.cs</Link>
64+
</Compile>
6265
<Compile Include="MainForm.cs">
6366
<SubType>Form</SubType>
6467
</Compile>

0 commit comments

Comments
 (0)