Skip to content

Commit 3e6184b

Browse files
committed
Added register value filter to register scanner.
1 parent e4ac86f commit 3e6184b

File tree

2 files changed

+194
-1
lines changed

2 files changed

+194
-1
lines changed

src/modbusmechanic/RegisterScannerFrame.form

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,53 @@
389389
</Component>
390390
</SubComponents>
391391
</Container>
392+
<Container class="javax.swing.JPanel" name="jPanel8">
393+
394+
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
395+
<SubComponents>
396+
<Component class="javax.swing.JLabel" name="jLabel8">
397+
<Properties>
398+
<Property name="text" type="java.lang.String" value="Search for register value:"/>
399+
</Properties>
400+
</Component>
401+
<Component class="javax.swing.JTextField" name="filterField">
402+
<Properties>
403+
<Property name="columns" type="int" value="5"/>
404+
</Properties>
405+
<Events>
406+
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="filterFieldActionPerformed"/>
407+
<EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="filterFieldKeyReleased"/>
408+
</Events>
409+
</Component>
410+
<Component class="javax.swing.JCheckBox" name="u16FilterEnabled">
411+
<Properties>
412+
<Property name="selected" type="boolean" value="true"/>
413+
<Property name="text" type="java.lang.String" value="Match U16"/>
414+
</Properties>
415+
<Events>
416+
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="u16FilterEnabledActionPerformed"/>
417+
</Events>
418+
</Component>
419+
<Component class="javax.swing.JCheckBox" name="u32FilterEnabled">
420+
<Properties>
421+
<Property name="selected" type="boolean" value="true"/>
422+
<Property name="text" type="java.lang.String" value="Match U32"/>
423+
</Properties>
424+
<Events>
425+
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="u32FilterEnabledActionPerformed"/>
426+
</Events>
427+
</Component>
428+
<Component class="javax.swing.JCheckBox" name="floatFilterEnabled">
429+
<Properties>
430+
<Property name="selected" type="boolean" value="true"/>
431+
<Property name="text" type="java.lang.String" value="Match Float"/>
432+
</Properties>
433+
<Events>
434+
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="floatFilterEnabledActionPerformed"/>
435+
</Events>
436+
</Component>
437+
</SubComponents>
438+
</Container>
392439
<Container class="javax.swing.JPanel" name="jPanel4">
393440

394441
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>

src/modbusmechanic/RegisterScannerFrame.java

Lines changed: 147 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public class RegisterScannerFrame extends javax.swing.JFrame {
3333
ProgressMonitor pm = null;
3434
DefaultTableModel model = null;
3535
Object[] registers = null;
36+
int intFilterValue = 0;
37+
double doubleFilterValue = 0;
38+
boolean intFilter = false;
39+
boolean doubleFilter = false;
3640
/**
3741
* Creates new form RegisterScannerFrame
3842
*/
@@ -91,6 +95,12 @@ private void initComponents() {
9195
hideZeroValCheckbox = new javax.swing.JCheckBox();
9296
byteSwapCheckbox = new javax.swing.JCheckBox();
9397
wordSwapCheckbox = new javax.swing.JCheckBox();
98+
jPanel8 = new javax.swing.JPanel();
99+
jLabel8 = new javax.swing.JLabel();
100+
filterField = new javax.swing.JTextField();
101+
u16FilterEnabled = new javax.swing.JCheckBox();
102+
u32FilterEnabled = new javax.swing.JCheckBox();
103+
floatFilterEnabled = new javax.swing.JCheckBox();
94104
jPanel4 = new javax.swing.JPanel();
95105
jButton1 = new javax.swing.JButton();
96106
jPanel6 = new javax.swing.JPanel();
@@ -295,6 +305,51 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
295305

296306
jPanel1.add(jPanel7);
297307

308+
jLabel8.setText("Search for register value:");
309+
jPanel8.add(jLabel8);
310+
311+
filterField.setColumns(5);
312+
filterField.addActionListener(new java.awt.event.ActionListener() {
313+
public void actionPerformed(java.awt.event.ActionEvent evt) {
314+
filterFieldActionPerformed(evt);
315+
}
316+
});
317+
filterField.addKeyListener(new java.awt.event.KeyAdapter() {
318+
public void keyReleased(java.awt.event.KeyEvent evt) {
319+
filterFieldKeyReleased(evt);
320+
}
321+
});
322+
jPanel8.add(filterField);
323+
324+
u16FilterEnabled.setSelected(true);
325+
u16FilterEnabled.setText("Match U16");
326+
u16FilterEnabled.addActionListener(new java.awt.event.ActionListener() {
327+
public void actionPerformed(java.awt.event.ActionEvent evt) {
328+
u16FilterEnabledActionPerformed(evt);
329+
}
330+
});
331+
jPanel8.add(u16FilterEnabled);
332+
333+
u32FilterEnabled.setSelected(true);
334+
u32FilterEnabled.setText("Match U32");
335+
u32FilterEnabled.addActionListener(new java.awt.event.ActionListener() {
336+
public void actionPerformed(java.awt.event.ActionEvent evt) {
337+
u32FilterEnabledActionPerformed(evt);
338+
}
339+
});
340+
jPanel8.add(u32FilterEnabled);
341+
342+
floatFilterEnabled.setSelected(true);
343+
floatFilterEnabled.setText("Match Float");
344+
floatFilterEnabled.addActionListener(new java.awt.event.ActionListener() {
345+
public void actionPerformed(java.awt.event.ActionEvent evt) {
346+
floatFilterEnabledActionPerformed(evt);
347+
}
348+
});
349+
jPanel8.add(floatFilterEnabled);
350+
351+
jPanel1.add(jPanel8);
352+
298353
jButton1.setText("Scan");
299354
jButton1.addActionListener(new java.awt.event.ActionListener() {
300355
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -531,6 +586,7 @@ public void run()
531586
}
532587
public void updateTable()
533588
{
589+
long startTime = System.currentTimeMillis();
534590
model = new DefaultTableModel();
535591
model.addColumn("Register");
536592
model.addColumn("Value as U16");
@@ -552,9 +608,16 @@ public void updateTable()
552608
bothZeros = false;
553609
}
554610
String i16val = "" + (currentElement[0]*256 + currentElement[1]);
611+
boolean int16FilterMatch = false;
612+
if (u16FilterEnabled.isSelected() && intFilter && currentElement[0]*256 + currentElement[1] == intFilterValue)
613+
{
614+
int16FilterMatch = true;
615+
}
555616
String i32val = "";
556617
String floatval = "";
557618
String asciival = new String(currentElement);
619+
boolean int32FilterMatch = false;
620+
boolean doubleFilterMatch = false;
558621
if (i+1 < 65536 && registers[i+1] != null)
559622
{
560623
byte[] nextElement = (byte[])registers[i+1];
@@ -574,15 +637,39 @@ public void updateTable()
574637
buf = ModbusMechanic.byteSwap(buf);
575638
}
576639
i32val = "" + ModbusMechanic.bytesToInt32(buf);
640+
if (u32FilterEnabled.isSelected() && intFilter && ModbusMechanic.bytesToInt32(buf) == intFilterValue)
641+
{
642+
int32FilterMatch = true;
643+
}
577644
floatval = "" + DataUtils.toFloat(buf);
645+
if (floatFilterEnabled.isSelected() && doubleFilter && DataUtils.toFloat(buf) == (float)doubleFilterValue)
646+
{
647+
doubleFilterMatch = true;
648+
}
578649
}
579650
if (!(bothZeros && hideZeroValCheckbox.isSelected()))
580651
{
581-
model.addRow(new Object[] {"" + i, i16val, i32val, floatval, asciival});
652+
boolean hideRow = false;
653+
if (intFilter || doubleFilter)
654+
{
655+
hideRow = true;
656+
if (int16FilterMatch || int32FilterMatch || doubleFilterMatch)
657+
{
658+
hideRow = false;
659+
}
660+
}
661+
if (!hideRow)
662+
{
663+
model.addRow(new Object[] {"" + i, i16val, i32val, floatval, asciival});
664+
}
582665
}
583666
}
584667
}
585668
registerTable.setModel(model);
669+
if (ModbusMechanic.debug)
670+
{
671+
System.out.println("Table update completed in " + (System.currentTimeMillis() - startTime) + "ms");
672+
}
586673
}
587674
private void displayTtySerialActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_displayTtySerialActionPerformed
588675

@@ -601,6 +688,59 @@ private void hideZeroValCheckboxActionPerformed(java.awt.event.ActionEvent evt)
601688
updateTable();
602689
}//GEN-LAST:event_hideZeroValCheckboxActionPerformed
603690

691+
private void filterFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_filterFieldActionPerformed
692+
// TODO add your handling code here:
693+
}//GEN-LAST:event_filterFieldActionPerformed
694+
695+
private void filterFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filterFieldKeyReleased
696+
intFilter = false;
697+
doubleFilter = false;
698+
if (ModbusMechanic.debug)
699+
{
700+
System.out.println("Got filter key event");
701+
}
702+
if (!filterField.getText().equals(""))
703+
{
704+
try
705+
{
706+
intFilterValue = Integer.parseInt(filterField.getText());
707+
intFilter = true;
708+
}
709+
catch (Exception e)
710+
{
711+
if (ModbusMechanic.debug)
712+
{
713+
e.printStackTrace();
714+
}
715+
}
716+
try
717+
{
718+
doubleFilterValue = Double.parseDouble(filterField.getText());
719+
doubleFilter = true;
720+
}
721+
catch (Exception e)
722+
{
723+
if (ModbusMechanic.debug)
724+
{
725+
e.printStackTrace();
726+
}
727+
}
728+
}
729+
updateTable();
730+
}//GEN-LAST:event_filterFieldKeyReleased
731+
732+
private void u16FilterEnabledActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_u16FilterEnabledActionPerformed
733+
updateTable();
734+
}//GEN-LAST:event_u16FilterEnabledActionPerformed
735+
736+
private void u32FilterEnabledActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_u32FilterEnabledActionPerformed
737+
updateTable();
738+
}//GEN-LAST:event_u32FilterEnabledActionPerformed
739+
740+
private void floatFilterEnabledActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_floatFilterEnabledActionPerformed
741+
updateTable();
742+
}//GEN-LAST:event_floatFilterEnabledActionPerformed
743+
604744
/**
605745
* @param args the command line arguments
606746
*/
@@ -646,6 +786,8 @@ public void run() {
646786
private javax.swing.JTextField destHostField;
647787
private javax.swing.JCheckBox displayTtySerial;
648788
private javax.swing.JTextField endRegisterField;
789+
private javax.swing.JTextField filterField;
790+
private javax.swing.JCheckBox floatFilterEnabled;
649791
private javax.swing.JComboBox<String> functionSelector;
650792
private javax.swing.JCheckBox hideZeroValCheckbox;
651793
private javax.swing.JButton jButton1;
@@ -663,6 +805,7 @@ public void run() {
663805
private javax.swing.JLabel jLabel5;
664806
private javax.swing.JLabel jLabel6;
665807
private javax.swing.JLabel jLabel7;
808+
private javax.swing.JLabel jLabel8;
666809
private javax.swing.JLabel jLabel9;
667810
private javax.swing.JLayeredPane jLayeredPane1;
668811
private javax.swing.JPanel jPanel1;
@@ -672,6 +815,7 @@ public void run() {
672815
private javax.swing.JPanel jPanel5;
673816
private javax.swing.JPanel jPanel6;
674817
private javax.swing.JPanel jPanel7;
818+
private javax.swing.JPanel jPanel8;
675819
private javax.swing.JScrollPane jScrollPane1;
676820
private javax.swing.JPanel modbusPanel;
677821
private javax.swing.JComboBox<String> paritySelector;
@@ -684,6 +828,8 @@ public void run() {
684828
private javax.swing.JTextField startRegisterField;
685829
private javax.swing.JTextField stopBitsField;
686830
private javax.swing.JRadioButton tcpMsgButton;
831+
private javax.swing.JCheckBox u16FilterEnabled;
832+
private javax.swing.JCheckBox u32FilterEnabled;
687833
private javax.swing.JCheckBox wordSwapCheckbox;
688834
// End of variables declaration//GEN-END:variables
689835
}

0 commit comments

Comments
 (0)