@@ -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