diff --git a/MainWindow.xaml b/MainWindow.xaml
index e80dcd6..3d0ebd7 100644
--- a/MainWindow.xaml
+++ b/MainWindow.xaml
@@ -110,7 +110,7 @@
-
+
@@ -161,7 +161,7 @@
-
+
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index 4e237e1..1295904 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -817,21 +817,21 @@ namespace FAtoPA.Net
private void btnDelSIID_Click(object sender, RoutedEventArgs e)
{
- //int selectedindex = FSMTable.SelectedIndex;
- //if (selectedindex >= 0)
- //{
- // FSMData selected = (FSMData)FSMTable.Items[selectedindex];
- // MessageBoxResult result = MessageBox.Show("Delete SIID " + selected.ToString() + " ?", "Delete SIID", MessageBoxButton.YesNo);
- // if (result == MessageBoxResult.Yes)
- // {
- // FsmTableMember.Remove(selected);
- // database.RemoveFSMDatabySIID(selected.SIID);
- // FSMSIID.Remove(selected.SIID);
- // }
- //}
- //else MessageBox.Show("Select a row in table to delete");
-
-
+ if (FSMTable != null)
+ {
+ var selected = FSMTable.SelectedItem as FSMData;
+ if (selected != null)
+ {
+ MessageBoxResult result = MessageBox.Show($"Are you sure want to delete SIID={selected.SIID}, Label={selected.Label}, Type={selected.Type} ?", "Delete SIID", MessageBoxButton.YesNo);
+ if (result == MessageBoxResult.Yes)
+ {
+ FsmTableMember.Remove(selected);
+ database.RemoveFSMDatabySIID(selected.SIID);
+ FSMSIID.Remove(selected.SIID);
+ }
+ }
+ else MessageBox.Show("Select a row in table to delete");
+ }
}
private void btnClearSIID_Click(object sender, RoutedEventArgs e)
@@ -919,37 +919,21 @@ namespace FAtoPA.Net
private void btnDelModbus_Click(object sender, RoutedEventArgs e)
{
- String ssid = "";
- String reg = "";
- if (ModbusSIIDComboBox.SelectedItem != null)
+ if (ModbusTable != null)
{
- ssid = (string)ModbusSIIDComboBox.SelectedItem;
- }
- else
- {
- MessageBox.Show("Invalid SIID"); return;
- }
- if (ModbusRegister.SelectedItem != null)
- {
- reg = (String)ModbusRegister.SelectedItem;
- }
- else
- {
- MessageBox.Show("Invalid Register"); return;
- }
- MessageBoxResult result = MessageBox.Show("Delete SIID " + ssid + " Link with Register " + reg + " ?", "Delete Modbus Linkage", MessageBoxButton.YesNo);
- if (result == MessageBoxResult.Yes)
- {
- if (database != null)
+ var selected = ModbusTable.SelectedItem as ModbusData;
+ if (selected != null)
{
- if (database.RemoveModbusDatabySIID(ssid))
+ MessageBoxResult xx = MessageBox.Show($"Are you sure want to delete SIID={selected.SIID}, Register={selected.Register} ?", "Delete SIID", MessageBoxButton.YesNo);
+ if (xx == MessageBoxResult.Yes)
{
- ModbusTable.ItemsSource = database.GetModbusDatas();
+ database.RemoveModbusDatabySIID(selected.SIID);
+ ModbusTableMember.Remove(selected);
}
- else MessageBox.Show("Failed to delete from database");
}
- else MessageBox.Show("Database is null");
+ else MessageBox.Show("Select a row in Table to delete");
}
+
}
private void btnClearModbus_Click(object sender, RoutedEventArgs e)
@@ -957,15 +941,8 @@ namespace FAtoPA.Net
MessageBoxResult result = MessageBox.Show("Clear all Modbus Linkage ?", "Clear Modbus Linkage", MessageBoxButton.YesNo);
if (result == MessageBoxResult.Yes)
{
- if (database != null)
- {
- if (database.ClearModbusTable())
- {
- ModbusTable.ItemsSource = database.GetModbusDatas();
- }
- else MessageBox.Show("Failed to clear database");
- }
- else MessageBox.Show("Database is null");
+ database.ClearModbusTable();
+ ModbusTableMember.Clear();
}
}
@@ -1017,45 +994,19 @@ namespace FAtoPA.Net
private void btnDelVX_Click(object sender, RoutedEventArgs e)
{
- String ssid = "";
- int id = 0;
- int cin = 0;
- if (VXSIIDComboBox.SelectedItem != null)
+ if (VXTable != null)
{
- ssid = (string)VXSIIDComboBox.SelectedItem;
- }
- else
- {
- MessageBox.Show("Invalid SIID"); return;
- }
- if (VXFrame.SelectedItem != null)
- {
- id = (int)VXFrame.SelectedItem;
- }
- else
- {
- MessageBox.Show("Invalid ID"); return;
- }
- if (VXCIN.SelectedItem != null)
- {
- cin = (int)VXCIN.SelectedItem;
- }
- else
- {
- MessageBox.Show("Invalid CIN"); return;
- }
- MessageBoxResult result = MessageBox.Show("Delete SIID " + ssid + " Link with Frame " + id + " CIN " + cin + " ?", "Delete VX Linkage", MessageBoxButton.YesNo);
- if (result == MessageBoxResult.Yes)
- {
- if (database != null)
+ var selected = VXTable.SelectedItem as VXData;
+ if (selected != null)
{
- if (database.RemoveVXDatabySIID(ssid))
+ var result = MessageBox.Show($"Delete SIID={selected.SIID}, ID={selected.FrameID}, CIN={selected.CIN} ?", "Delete SIID", MessageBoxButton.YesNo);
+ if (result == MessageBoxResult.Yes)
{
- VXTable.ItemsSource = database.GetVXDatas();
+ database.RemoveVXDatabySIID(selected.SIID);
+ VXTableMember.Remove(selected);
}
- else MessageBox.Show("Failed to delete from database");
}
- else MessageBox.Show("Database is null");
+ else MessageBox.Show("Select a row in Table to delete");
}
}
@@ -1064,15 +1015,8 @@ namespace FAtoPA.Net
MessageBoxResult result = MessageBox.Show("Clear all VX Linkage ?", "Clear VX Linkage", MessageBoxButton.YesNo);
if (result == MessageBoxResult.Yes)
{
- if (database != null)
- {
- if (database.ClearVXTable())
- {
- VXTable.ItemsSource = database.GetVXDatas();
- }
- else MessageBox.Show("Failed to clear database");
- }
- else MessageBox.Show("Database is null");
+ database.ClearVXTable();
+ VXTableMember.Clear();
}
}
@@ -1234,6 +1178,7 @@ namespace FAtoPA.Net
l.Margin = new Thickness(5, 0, 5, 0);
l.TextWrapping = TextWrapping.Wrap;
UpdateLabel(l, client);
+ l.Tag = client;
connectedlist.Items.Add(l);
}
@@ -1266,20 +1211,24 @@ namespace FAtoPA.Net
public void TXRXStatusUpdate(ModbusClientRecord client)
{
- foreach (var item in connectedlist.Items)
- {
- TextBlock l = (TextBlock)item;
- if (l.Tag == client)
+ connectedlist.Dispatcher.Invoke(() => {
+ foreach (var item in connectedlist.Items)
{
- UpdateLabel(l, client);
- return;
+ TextBlock l = (TextBlock)item;
+ if (l.Tag == client)
+ {
+ UpdateLabel(l, client);
+ return;
+ }
}
- }
+ });
+
}
private void UpdateLabel(TextBlock l, ModbusClientRecord client)
{
- l.Text = client.remoteEP + " TX: " + client.TXBytes + " RX: " + client.RXBytes + "TXOK: " + client.TXResponse + " RXOK: " + client.RXValidRequest;
+
+ l.Text = client.remoteEP + "/TX: " + client.TXBytes + "/RX: " + client.RXBytes + "/TXOK: " + client.TXResponse + "/RXOK: " + client.RXValidRequest+"/RXFAIL: "+client.RXInvalidRequest;
}
}
diff --git a/ModbusSlave.cs b/ModbusSlave.cs
index c44b049..92da833 100644
--- a/ModbusSlave.cs
+++ b/ModbusSlave.cs
@@ -364,10 +364,7 @@ namespace FAtoPA
if (readcount >= 12)
{
- Debug.WriteLine($"Read from {key}, size={readcount}");
- String cmdString = BitConverter.ToString(cmd);
- Debug.WriteLine($"cmd={cmdString}");
-
+
client.RXBytes += (uint)readcount;
UInt16 transactionID = GetTransactionID(cmd);
UInt16 protocolID = GetProtocolID(cmd);
@@ -375,9 +372,7 @@ namespace FAtoPA
Byte unitID = GetUnitID(cmd);
Byte functionCode = GetFunctionCode(cmd);
byte[] payload = GetModbusPayload(cmd);
- Debug.WriteLine($"TransactionID={transactionID}, ProtocolID={protocolID}, Length={length}, UnitID={unitID}, FunctionCode={functionCode}, Payload={payload.Length}");
- String payloadstring = BitConverter.ToString(payload);
- Debug.WriteLine($"Payload={payloadstring}");
+
if (protocolID == 0 && length == payload.Length + 2 && unitID == 1)
{
if (functionCode == 3)
@@ -495,6 +490,7 @@ namespace FAtoPA
client.TXBytes += (uint)response.Length;
client.TXResponse++;
}
+ if (_event != null) _event.TXRXStatusUpdate(client);
}
else if (readcount == 0) break; // connection closed