Index: conf/configure.json
===================================================================
--- conf/configure.json	(revision ee40af8c7236a7dfcaa6c11663f44402ec053bb2)
+++ conf/configure.json	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -1,1 +1,1 @@
-{"ip_port": [["10.1.33.141", 9001], ["10.1.33.141", 9011]], "mainHeight": 934, "mainWidth": 1920, "mainSplitterRight": 1456, "mainSplitterLeft": 458}
+{"ip_port": [["10.1.33.141", 9001], ["10.1.33.141", 9011]], "mainHeight": 934, "mainWidth": 1920, "mainSplitterRight": 1455, "mainSplitterLeft": 459}
Index: log/GPPD.log
===================================================================
--- log/GPPD.log	(revision ee40af8c7236a7dfcaa6c11663f44402ec053bb2)
+++ log/GPPD.log	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -372877,2 +372877,774 @@
 2020-04-14 17:14:44,927 - INFO - status change to running
 2020-04-14 17:14:44,928 - INFO - status is running now
+2020-04-15 16:44:54,894 - INFO - Status is waiting
+2020-04-15 16:44:54,895 - INFO - status is waiting now
+2020-04-15 16:44:54,895 - INFO - NEON connected
+2020-04-15 16:44:54,896 - INFO - Creating heartbeat thread
+2020-04-15 16:44:54,896 - INFO - Creating Command Thread...
+2020-04-15 16:44:54,896 - INFO - Creating Canvas data Thread...
+2020-04-15 16:44:54,897 - INFO - Status change to unconfigured
+2020-04-15 16:44:54,897 - INFO - status is unconfigured now
+2020-04-15 16:44:55,010 - INFO - Start heartbeat successfully
+2020-04-15 16:44:55,011 - INFO - Start Command Thread successfully
+2020-04-15 16:44:55,219 - INFO - Received command: start
+2020-04-15 16:44:55,219 - INFO - unconfigured status cannot receive abort command
+2020-04-15 16:44:56,029 - INFO - Received command: configure
+2020-04-15 16:44:56,031 - INFO - status change to configuring
+2020-04-15 16:44:56,032 - INFO - NEON connected
+2020-04-15 16:44:56,044 - INFO - status change to ready
+2020-04-15 16:44:56,045 - INFO - status is ready now
+2020-04-15 16:44:58,033 - INFO - Received command: start
+2020-04-15 16:44:58,912 - INFO - Start Canvas Data Thread successfully
+2020-04-15 16:44:58,912 - INFO - Start Listen Module Tof Counts successfully
+2020-04-15 16:44:58,913 - INFO - status change to running
+2020-04-15 16:44:58,914 - INFO - status is running now
+2020-04-16 10:10:53,206 - INFO - Status is waiting
+2020-04-16 10:10:53,207 - INFO - status is waiting now
+2020-04-16 10:10:53,207 - INFO - NEON connected
+2020-04-16 10:10:53,208 - INFO - Creating heartbeat thread
+2020-04-16 10:10:53,208 - INFO - Creating Command Thread...
+2020-04-16 10:10:53,208 - INFO - Creating Canvas data Thread...
+2020-04-16 10:10:53,209 - INFO - Status change to unconfigured
+2020-04-16 10:10:53,209 - INFO - status is unconfigured now
+2020-04-16 10:10:53,321 - INFO - Start heartbeat successfully
+2020-04-16 10:10:53,322 - INFO - Start Command Thread successfully
+2020-04-16 10:12:15,300 - INFO - Status is waiting
+2020-04-16 10:12:15,301 - INFO - status is waiting now
+2020-04-16 10:12:15,301 - INFO - NEON connected
+2020-04-16 10:12:15,302 - INFO - Creating heartbeat thread
+2020-04-16 10:12:15,302 - INFO - Creating Command Thread...
+2020-04-16 10:12:15,302 - INFO - Creating Canvas data Thread...
+2020-04-16 10:12:15,303 - INFO - Status change to unconfigured
+2020-04-16 10:12:15,303 - INFO - status is unconfigured now
+2020-04-16 10:12:15,415 - INFO - Start heartbeat successfully
+2020-04-16 10:12:15,416 - INFO - Start Command Thread successfully
+2020-04-16 10:13:02,312 - INFO - Status is waiting
+2020-04-16 10:13:02,313 - INFO - status is waiting now
+2020-04-16 10:13:02,314 - INFO - NEON connected
+2020-04-16 10:13:02,314 - INFO - Creating heartbeat thread
+2020-04-16 10:13:02,314 - INFO - Creating Command Thread...
+2020-04-16 10:13:02,315 - INFO - Creating Canvas data Thread...
+2020-04-16 10:13:02,315 - INFO - Status change to unconfigured
+2020-04-16 10:13:02,316 - INFO - status is unconfigured now
+2020-04-16 10:13:02,429 - INFO - Start heartbeat successfully
+2020-04-16 10:13:02,430 - INFO - Start Command Thread successfully
+2020-04-16 10:13:23,507 - INFO - Received command: configure
+2020-04-16 10:13:23,509 - INFO - status change to configuring
+2020-04-16 10:13:23,510 - INFO - NEON connected
+2020-04-16 10:13:23,522 - INFO - status change to ready
+2020-04-16 10:13:23,523 - INFO - status is ready now
+2020-04-16 10:13:27,517 - INFO - Received command: start
+2020-04-16 10:13:28,382 - INFO - Start Canvas Data Thread successfully
+2020-04-16 10:13:28,382 - INFO - Start Listen Module Tof Counts successfully
+2020-04-16 10:13:28,383 - INFO - status change to running
+2020-04-16 10:13:28,383 - INFO - status is running now
+2020-04-16 10:19:15,129 - INFO - Status is waiting
+2020-04-16 10:19:15,130 - INFO - status is waiting now
+2020-04-16 10:19:15,131 - INFO - NEON connected
+2020-04-16 10:19:15,131 - INFO - Creating heartbeat thread
+2020-04-16 10:19:15,131 - INFO - Creating Command Thread...
+2020-04-16 10:19:15,132 - INFO - Creating Canvas data Thread...
+2020-04-16 10:19:15,132 - INFO - Status change to unconfigured
+2020-04-16 10:19:15,132 - INFO - status is unconfigured now
+2020-04-16 10:19:15,245 - INFO - Start heartbeat successfully
+2020-04-16 10:19:15,246 - INFO - Start Command Thread successfully
+2020-04-16 10:19:15,351 - INFO - Received command: start
+2020-04-16 10:19:15,351 - INFO - unconfigured status cannot receive abort command
+2020-04-16 10:19:26,295 - INFO - Received command: configure
+2020-04-16 10:19:26,296 - INFO - status change to configuring
+2020-04-16 10:19:26,297 - INFO - NEON connected
+2020-04-16 10:19:26,309 - INFO - status change to ready
+2020-04-16 10:19:26,310 - INFO - status is ready now
+2020-04-16 10:19:28,300 - INFO - Received command: start
+2020-04-16 10:19:29,099 - INFO - Start Canvas Data Thread successfully
+2020-04-16 10:19:29,099 - INFO - Start Listen Module Tof Counts successfully
+2020-04-16 10:19:29,100 - INFO - status change to running
+2020-04-16 10:19:29,100 - INFO - status is running now
+2020-04-16 10:20:08,942 - INFO - Status is waiting
+2020-04-16 10:20:08,943 - INFO - status is waiting now
+2020-04-16 10:20:08,943 - INFO - NEON connected
+2020-04-16 10:20:08,944 - INFO - Creating heartbeat thread
+2020-04-16 10:20:08,944 - INFO - Creating Command Thread...
+2020-04-16 10:20:08,944 - INFO - Creating Canvas data Thread...
+2020-04-16 10:20:08,945 - INFO - Status change to unconfigured
+2020-04-16 10:20:08,945 - INFO - status is unconfigured now
+2020-04-16 10:20:09,058 - INFO - Start heartbeat successfully
+2020-04-16 10:20:09,060 - INFO - Start Command Thread successfully
+2020-04-16 10:20:09,136 - INFO - Received command: start
+2020-04-16 10:20:09,136 - INFO - unconfigured status cannot receive abort command
+2020-04-16 10:20:14,087 - INFO - Received command: configure
+2020-04-16 10:20:14,092 - INFO - status change to configuring
+2020-04-16 10:20:14,093 - INFO - NEON connected
+2020-04-16 10:20:14,106 - INFO - status change to ready
+2020-04-16 10:20:14,107 - INFO - status is ready now
+2020-04-16 10:20:15,089 - INFO - Received command: start
+2020-04-16 10:20:15,854 - INFO - Start Canvas Data Thread successfully
+2020-04-16 10:20:15,855 - INFO - Start Listen Module Tof Counts successfully
+2020-04-16 10:20:15,856 - INFO - status change to running
+2020-04-16 10:20:15,856 - INFO - status is running now
+2020-04-16 10:21:15,227 - INFO - Status is waiting
+2020-04-16 10:21:15,229 - INFO - status is waiting now
+2020-04-16 10:21:15,229 - INFO - NEON connected
+2020-04-16 10:21:15,230 - INFO - Creating heartbeat thread
+2020-04-16 10:21:15,230 - INFO - Creating Command Thread...
+2020-04-16 10:21:15,231 - INFO - Creating Canvas data Thread...
+2020-04-16 10:21:15,231 - INFO - Status change to unconfigured
+2020-04-16 10:21:15,231 - INFO - status is unconfigured now
+2020-04-16 10:21:15,346 - INFO - Start heartbeat successfully
+2020-04-16 10:21:15,346 - INFO - Start Command Thread successfully
+2020-04-16 10:21:15,552 - INFO - Received command: start
+2020-04-16 10:21:15,555 - INFO - unconfigured status cannot receive abort command
+2020-04-16 10:21:17,364 - INFO - Received command: configure
+2020-04-16 10:21:17,367 - INFO - status change to configuring
+2020-04-16 10:21:17,368 - INFO - NEON connected
+2020-04-16 10:21:17,381 - INFO - status change to ready
+2020-04-16 10:21:17,382 - INFO - status is ready now
+2020-04-16 10:21:19,370 - INFO - Received command: start
+2020-04-16 10:21:20,251 - INFO - Start Canvas Data Thread successfully
+2020-04-16 10:21:20,252 - INFO - Start Listen Module Tof Counts successfully
+2020-04-16 10:21:20,253 - INFO - status change to running
+2020-04-16 10:21:20,253 - INFO - status is running now
+2020-04-16 10:22:15,633 - INFO - Status is waiting
+2020-04-16 10:22:15,634 - INFO - status is waiting now
+2020-04-16 10:22:15,634 - INFO - NEON connected
+2020-04-16 10:22:15,634 - INFO - Creating heartbeat thread
+2020-04-16 10:22:15,635 - INFO - Creating Command Thread...
+2020-04-16 10:22:15,635 - INFO - Creating Canvas data Thread...
+2020-04-16 10:22:15,636 - INFO - Status change to unconfigured
+2020-04-16 10:22:15,636 - INFO - status is unconfigured now
+2020-04-16 10:22:15,749 - INFO - Start heartbeat successfully
+2020-04-16 10:22:15,750 - INFO - Start Command Thread successfully
+2020-04-16 10:22:15,928 - INFO - Received command: start
+2020-04-16 10:22:15,931 - INFO - unconfigured status cannot receive abort command
+2020-04-16 10:22:18,774 - INFO - Received command: configure
+2020-04-16 10:22:18,776 - INFO - status change to configuring
+2020-04-16 10:22:18,777 - INFO - NEON connected
+2020-04-16 10:22:18,787 - INFO - status change to ready
+2020-04-16 10:22:18,788 - INFO - status is ready now
+2020-04-16 10:22:20,781 - INFO - Received command: start
+2020-04-16 10:22:21,682 - INFO - Start Canvas Data Thread successfully
+2020-04-16 10:22:21,683 - INFO - Start Listen Module Tof Counts successfully
+2020-04-16 10:22:21,684 - INFO - status change to running
+2020-04-16 10:22:21,684 - INFO - status is running now
+2020-04-16 10:44:37,196 - INFO - Status is waiting
+2020-04-16 10:44:37,197 - INFO - status is waiting now
+2020-04-16 10:44:37,197 - INFO - NEON connected
+2020-04-16 10:44:37,198 - INFO - Creating heartbeat thread
+2020-04-16 10:44:37,198 - INFO - Creating Command Thread...
+2020-04-16 10:44:37,198 - INFO - Creating Canvas data Thread...
+2020-04-16 10:44:37,199 - INFO - Status change to unconfigured
+2020-04-16 10:44:37,199 - INFO - status is unconfigured now
+2020-04-16 10:44:37,312 - INFO - Start heartbeat successfully
+2020-04-16 10:44:37,313 - INFO - Start Command Thread successfully
+2020-04-16 10:44:37,480 - INFO - Received command: start
+2020-04-16 10:44:37,481 - INFO - unconfigured status cannot receive abort command
+2020-04-16 10:44:40,333 - INFO - Received command: configure
+2020-04-16 10:44:40,334 - INFO - status change to configuring
+2020-04-16 10:44:40,335 - INFO - NEON connected
+2020-04-16 10:44:40,349 - INFO - status change to ready
+2020-04-16 10:44:40,349 - INFO - status is ready now
+2020-04-16 10:44:41,336 - INFO - Received command: start
+2020-04-16 10:44:42,200 - INFO - Start Canvas Data Thread successfully
+2020-04-16 10:44:42,201 - INFO - Start Listen Module Tof Counts successfully
+2020-04-16 10:44:42,202 - INFO - status change to running
+2020-04-16 10:44:42,202 - INFO - status is running now
+2020-04-16 10:46:45,561 - INFO - Status is waiting
+2020-04-16 10:46:45,562 - INFO - status is waiting now
+2020-04-16 10:46:45,563 - INFO - NEON connected
+2020-04-16 10:46:45,563 - INFO - Creating heartbeat thread
+2020-04-16 10:46:45,563 - INFO - Creating Command Thread...
+2020-04-16 10:46:45,564 - INFO - Creating Canvas data Thread...
+2020-04-16 10:46:45,564 - INFO - Status change to unconfigured
+2020-04-16 10:46:45,565 - INFO - status is unconfigured now
+2020-04-16 10:46:45,677 - INFO - Start heartbeat successfully
+2020-04-16 10:46:45,678 - INFO - Start Command Thread successfully
+2020-04-16 10:46:45,846 - INFO - Received command: start
+2020-04-16 10:46:45,849 - INFO - unconfigured status cannot receive abort command
+2020-04-16 10:46:51,712 - INFO - Received command: configure
+2020-04-16 10:46:51,713 - INFO - status change to configuring
+2020-04-16 10:46:51,714 - INFO - NEON connected
+2020-04-16 10:46:51,724 - INFO - status change to ready
+2020-04-16 10:46:51,724 - INFO - status is ready now
+2020-04-16 10:46:52,715 - INFO - Received command: start
+2020-04-16 10:46:53,560 - INFO - Start Canvas Data Thread successfully
+2020-04-16 10:46:53,561 - INFO - Start Listen Module Tof Counts successfully
+2020-04-16 10:46:53,561 - INFO - status change to running
+2020-04-16 10:46:53,562 - INFO - status is running now
+2020-05-28 14:56:17,610 - INFO - Status is waiting
+2020-05-28 14:56:17,627 - INFO - status is waiting now
+2020-05-28 14:56:17,627 - INFO - NEON connected
+2020-05-28 14:56:17,627 - INFO - Creating heartbeat thread
+2020-05-28 14:56:17,628 - INFO - Creating Command Thread...
+2020-05-28 14:56:17,636 - INFO - Creating Canvas data Thread...
+2020-05-28 14:56:17,636 - INFO - Status change to unconfigured
+2020-05-28 14:56:17,636 - INFO - status is unconfigured now
+2020-05-28 14:56:17,748 - INFO - Start heartbeat successfully
+2020-05-28 14:56:17,749 - INFO - Start Command Thread successfully
+2020-05-28 14:56:52,866 - INFO - Received command: configure
+2020-05-28 14:56:52,868 - INFO - status change to configuring
+2020-05-28 14:56:52,869 - INFO - NEON connected
+2020-05-28 14:56:52,882 - INFO - status change to ready
+2020-05-28 14:56:52,882 - INFO - status is ready now
+2020-05-28 14:56:57,882 - INFO - Received command: start
+2020-05-28 14:56:58,751 - INFO - Start Canvas Data Thread successfully
+2020-05-28 14:56:58,752 - INFO - Start Listen Module Tof Counts successfully
+2020-05-28 14:56:58,753 - INFO - status change to running
+2020-05-28 14:56:58,753 - INFO - status is running now
+2020-06-04 12:11:01,456 - INFO - Status is waiting
+2020-06-04 12:11:01,457 - INFO - status is waiting now
+2020-06-04 12:11:01,457 - INFO - NEON connected
+2020-06-04 12:11:01,458 - INFO - Creating heartbeat thread
+2020-06-04 12:11:01,458 - INFO - Creating Command Thread...
+2020-06-04 12:11:01,458 - INFO - Creating Canvas data Thread...
+2020-06-04 12:11:01,459 - INFO - Status change to unconfigured
+2020-06-04 12:11:01,459 - INFO - status is unconfigured now
+2020-06-04 12:11:01,572 - INFO - Start heartbeat successfully
+2020-06-04 12:11:01,573 - INFO - Start Command Thread successfully
+2020-06-04 12:14:40,714 - INFO - Status is waiting
+2020-06-04 12:14:40,715 - INFO - status is waiting now
+2020-06-04 12:14:40,716 - INFO - NEON connected
+2020-06-04 12:14:40,716 - INFO - Creating heartbeat thread
+2020-06-04 12:14:40,716 - INFO - Creating Command Thread...
+2020-06-04 12:14:40,717 - INFO - Creating Canvas data Thread...
+2020-06-04 12:14:40,717 - INFO - Status change to unconfigured
+2020-06-04 12:14:40,718 - INFO - status is unconfigured now
+2020-06-04 12:14:40,832 - INFO - Start heartbeat successfully
+2020-06-04 12:14:40,832 - INFO - Start Command Thread successfully
+2020-06-04 12:14:41,007 - INFO - Received command: configure
+2020-06-04 12:14:41,013 - INFO - status change to configuring
+2020-06-04 12:14:41,013 - INFO - NEON connected
+2020-06-04 12:14:41,025 - INFO - status change to ready
+2020-06-04 12:14:41,025 - INFO - status is ready now
+2020-06-04 12:15:44,079 - INFO - Received command: start
+2020-06-04 12:15:44,918 - INFO - Start Canvas Data Thread successfully
+2020-06-04 12:15:44,919 - INFO - Start Listen Module Tof Counts successfully
+2020-06-04 12:15:44,919 - INFO - status change to running
+2020-06-04 12:15:44,920 - INFO - status is running now
+2020-06-04 12:23:00,022 - INFO - Status is waiting
+2020-06-04 12:23:00,022 - INFO - status is waiting now
+2020-06-04 12:23:00,022 - INFO - NEON connected
+2020-06-04 12:23:00,023 - INFO - Creating heartbeat thread
+2020-06-04 12:23:00,023 - INFO - Creating Command Thread...
+2020-06-04 12:23:00,023 - INFO - Creating Canvas data Thread...
+2020-06-04 12:23:00,023 - INFO - Status change to unconfigured
+2020-06-04 12:23:00,024 - INFO - status is unconfigured now
+2020-06-04 12:23:00,135 - INFO - Start heartbeat successfully
+2020-06-04 12:23:00,135 - INFO - Start Command Thread successfully
+2020-06-04 12:23:00,305 - INFO - Received command: start
+2020-06-04 12:23:00,305 - INFO - unconfigured status cannot receive abort command
+2020-06-04 12:23:08,174 - INFO - Received command: configure
+2020-06-04 12:23:08,175 - INFO - status change to configuring
+2020-06-04 12:23:08,176 - INFO - NEON connected
+2020-06-04 12:23:08,189 - INFO - status change to ready
+2020-06-04 12:23:08,190 - INFO - status is ready now
+2020-06-04 12:23:10,180 - INFO - Received command: start
+2020-06-04 12:23:11,061 - INFO - Start Canvas Data Thread successfully
+2020-06-04 12:23:11,063 - INFO - Start Listen Module Tof Counts successfully
+2020-06-04 12:23:11,064 - INFO - status change to running
+2020-06-04 12:23:11,064 - INFO - status is running now
+2020-06-04 12:25:20,075 - INFO - Status is waiting
+2020-06-04 12:25:20,076 - INFO - status is waiting now
+2020-06-04 12:25:20,076 - INFO - NEON connected
+2020-06-04 12:25:20,076 - INFO - Creating heartbeat thread
+2020-06-04 12:25:20,077 - INFO - Creating Command Thread...
+2020-06-04 12:25:20,077 - INFO - Creating Canvas data Thread...
+2020-06-04 12:25:20,078 - INFO - Status change to unconfigured
+2020-06-04 12:25:20,078 - INFO - status is unconfigured now
+2020-06-04 12:25:20,191 - INFO - Start heartbeat successfully
+2020-06-04 12:25:20,191 - INFO - Start Command Thread successfully
+2020-06-04 12:25:20,356 - INFO - Received command: start
+2020-06-04 12:25:20,358 - INFO - unconfigured status cannot receive abort command
+2020-06-04 12:25:26,222 - INFO - Received command: configure
+2020-06-04 12:25:26,223 - INFO - status change to configuring
+2020-06-04 12:25:26,224 - INFO - NEON connected
+2020-06-04 12:25:26,236 - INFO - status change to ready
+2020-06-04 12:25:26,237 - INFO - status is ready now
+2020-06-04 12:25:27,225 - INFO - Received command: start
+2020-06-04 12:25:28,087 - INFO - Start Canvas Data Thread successfully
+2020-06-04 12:25:28,088 - INFO - Start Listen Module Tof Counts successfully
+2020-06-04 12:25:28,088 - INFO - status change to running
+2020-06-04 12:25:28,088 - INFO - status is running now
+2020-06-04 12:28:01,275 - INFO - Status is waiting
+2020-06-04 12:28:01,276 - INFO - status is waiting now
+2020-06-04 12:28:01,276 - INFO - NEON connected
+2020-06-04 12:28:01,276 - INFO - Creating heartbeat thread
+2020-06-04 12:28:01,276 - INFO - Creating Command Thread...
+2020-06-04 12:28:01,277 - INFO - Creating Canvas data Thread...
+2020-06-04 12:28:01,277 - INFO - Status change to unconfigured
+2020-06-04 12:28:01,277 - INFO - status is unconfigured now
+2020-06-04 12:28:01,389 - INFO - Start heartbeat successfully
+2020-06-04 12:28:01,390 - INFO - Start Command Thread successfully
+2020-06-04 12:28:01,564 - INFO - Received command: start
+2020-06-04 12:28:01,564 - INFO - unconfigured status cannot receive abort command
+2020-06-04 12:28:08,427 - INFO - Received command: configure
+2020-06-04 12:28:08,428 - INFO - status change to configuring
+2020-06-04 12:28:08,428 - INFO - NEON connected
+2020-06-04 12:28:08,440 - INFO - status change to ready
+2020-06-04 12:28:08,441 - INFO - status is ready now
+2020-06-04 12:28:09,429 - INFO - Received command: start
+2020-06-04 12:28:10,365 - INFO - Start Canvas Data Thread successfully
+2020-06-04 12:28:10,366 - INFO - Start Listen Module Tof Counts successfully
+2020-06-04 12:28:10,366 - INFO - status change to running
+2020-06-04 12:28:10,367 - INFO - status is running now
+2020-06-04 12:29:59,947 - INFO - Status is waiting
+2020-06-04 12:29:59,948 - INFO - status is waiting now
+2020-06-04 12:29:59,949 - INFO - NEON connected
+2020-06-04 12:29:59,949 - INFO - Creating heartbeat thread
+2020-06-04 12:29:59,949 - INFO - Creating Command Thread...
+2020-06-04 12:29:59,949 - INFO - Creating Canvas data Thread...
+2020-06-04 12:29:59,950 - INFO - Status change to unconfigured
+2020-06-04 12:29:59,950 - INFO - status is unconfigured now
+2020-06-04 12:30:00,063 - INFO - Start heartbeat successfully
+2020-06-04 12:30:00,064 - INFO - Start Command Thread successfully
+2020-06-04 12:30:00,217 - INFO - Received command: start
+2020-06-04 12:30:00,217 - INFO - unconfigured status cannot receive abort command
+2020-06-04 12:30:07,098 - INFO - Received command: configure
+2020-06-04 12:30:07,100 - INFO - status change to configuring
+2020-06-04 12:30:07,101 - INFO - NEON connected
+2020-06-04 12:30:07,112 - INFO - status change to ready
+2020-06-04 12:30:07,113 - INFO - status is ready now
+2020-06-04 12:30:09,103 - INFO - Received command: start
+2020-06-04 12:30:09,973 - INFO - Start Canvas Data Thread successfully
+2020-06-04 12:30:09,974 - INFO - Start Listen Module Tof Counts successfully
+2020-06-04 12:30:09,975 - INFO - status change to running
+2020-06-04 12:30:09,975 - INFO - status is running now
+2020-06-04 12:38:08,824 - INFO - Status is waiting
+2020-06-04 12:38:08,825 - INFO - status is waiting now
+2020-06-04 12:38:08,826 - INFO - NEON connected
+2020-06-04 12:38:08,826 - INFO - Creating heartbeat thread
+2020-06-04 12:38:08,826 - INFO - Creating Command Thread...
+2020-06-04 12:38:08,826 - INFO - Creating Canvas data Thread...
+2020-06-04 12:38:08,827 - INFO - Status change to unconfigured
+2020-06-04 12:38:08,827 - INFO - status is unconfigured now
+2020-06-04 12:38:08,939 - INFO - Start heartbeat successfully
+2020-06-04 12:38:08,939 - INFO - Start Command Thread successfully
+2020-06-04 12:38:09,100 - INFO - Received command: start
+2020-06-04 12:38:09,104 - INFO - unconfigured status cannot receive abort command
+2020-06-04 12:38:16,983 - INFO - Received command: configure
+2020-06-04 12:38:16,985 - INFO - status change to configuring
+2020-06-04 12:38:16,986 - INFO - NEON connected
+2020-06-04 12:38:16,999 - INFO - status change to ready
+2020-06-04 12:38:16,999 - INFO - status is ready now
+2020-06-04 12:38:18,989 - INFO - Received command: start
+2020-06-04 12:38:19,850 - INFO - Start Canvas Data Thread successfully
+2020-06-04 12:38:19,851 - INFO - Start Listen Module Tof Counts successfully
+2020-06-04 12:38:19,851 - INFO - status change to running
+2020-06-04 12:38:19,852 - INFO - status is running now
+2020-06-04 12:39:47,305 - INFO - Status is waiting
+2020-06-04 12:39:47,306 - INFO - status is waiting now
+2020-06-04 12:39:47,306 - INFO - NEON connected
+2020-06-04 12:39:47,307 - INFO - Creating heartbeat thread
+2020-06-04 12:39:47,307 - INFO - Creating Command Thread...
+2020-06-04 12:39:47,307 - INFO - Creating Canvas data Thread...
+2020-06-04 12:39:47,307 - INFO - Status change to unconfigured
+2020-06-04 12:39:47,308 - INFO - status is unconfigured now
+2020-06-04 12:39:47,419 - INFO - Start heartbeat successfully
+2020-06-04 12:39:47,421 - INFO - Start Command Thread successfully
+2020-06-04 12:39:47,584 - INFO - Received command: start
+2020-06-04 12:39:47,585 - INFO - unconfigured status cannot receive abort command
+2020-06-04 12:39:54,453 - INFO - Received command: configure
+2020-06-04 12:39:54,454 - INFO - status change to configuring
+2020-06-04 12:39:54,455 - INFO - NEON connected
+2020-06-04 12:39:54,465 - INFO - status change to ready
+2020-06-04 12:39:54,465 - INFO - status is ready now
+2020-06-04 12:39:55,456 - INFO - Received command: start
+2020-06-04 12:39:56,301 - INFO - Start Canvas Data Thread successfully
+2020-06-04 12:39:56,302 - INFO - Start Listen Module Tof Counts successfully
+2020-06-04 12:39:56,303 - INFO - status change to running
+2020-06-04 12:39:56,303 - INFO - status is running now
+2020-06-22 14:17:26,541 - INFO - Status is waiting
+2020-06-22 14:17:26,542 - INFO - status is waiting now
+2020-06-22 14:17:26,542 - INFO - NEON connected
+2020-06-22 14:17:26,542 - INFO - Creating heartbeat thread
+2020-06-22 14:17:26,543 - INFO - Creating Command Thread...
+2020-06-22 14:17:26,543 - INFO - Creating Canvas data Thread...
+2020-06-22 14:17:26,543 - INFO - Status change to unconfigured
+2020-06-22 14:17:26,544 - INFO - status is unconfigured now
+2020-06-22 14:17:26,657 - INFO - Start heartbeat successfully
+2020-06-22 14:17:26,657 - INFO - Start Command Thread successfully
+2020-06-22 14:17:26,815 - INFO - Received command: start
+2020-06-22 14:17:26,816 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:18:03,800 - INFO - Received command: configure
+2020-06-22 14:18:03,801 - INFO - status change to configuring
+2020-06-22 14:18:03,802 - INFO - NEON connected
+2020-06-22 14:18:03,815 - INFO - status change to ready
+2020-06-22 14:18:03,815 - INFO - status is ready now
+2020-06-22 14:18:05,806 - INFO - Received command: start
+2020-06-22 14:18:06,676 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:18:06,677 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:18:06,678 - INFO - status change to running
+2020-06-22 14:18:06,678 - INFO - status is running now
+2020-06-22 14:20:20,421 - INFO - Status is waiting
+2020-06-22 14:20:20,421 - INFO - status is waiting now
+2020-06-22 14:20:20,422 - INFO - NEON connected
+2020-06-22 14:20:20,422 - INFO - Creating heartbeat thread
+2020-06-22 14:20:20,422 - INFO - Creating Command Thread...
+2020-06-22 14:20:20,422 - INFO - Creating Canvas data Thread...
+2020-06-22 14:20:20,422 - INFO - Status change to unconfigured
+2020-06-22 14:20:20,423 - INFO - status is unconfigured now
+2020-06-22 14:20:20,534 - INFO - Start heartbeat successfully
+2020-06-22 14:20:20,535 - INFO - Start Command Thread successfully
+2020-06-22 14:20:20,680 - INFO - Received command: start
+2020-06-22 14:20:20,682 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:20:27,567 - INFO - Received command: configure
+2020-06-22 14:20:27,568 - INFO - status change to configuring
+2020-06-22 14:20:27,569 - INFO - NEON connected
+2020-06-22 14:20:27,581 - INFO - status change to ready
+2020-06-22 14:20:27,582 - INFO - status is ready now
+2020-06-22 14:20:29,574 - INFO - Received command: start
+2020-06-22 14:20:30,429 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:20:30,430 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:20:30,430 - INFO - status change to running
+2020-06-22 14:20:30,431 - INFO - status is running now
+2020-06-22 14:21:21,572 - INFO - Status is waiting
+2020-06-22 14:21:21,574 - INFO - status is waiting now
+2020-06-22 14:21:21,574 - INFO - NEON connected
+2020-06-22 14:21:21,574 - INFO - Creating heartbeat thread
+2020-06-22 14:21:21,575 - INFO - Creating Command Thread...
+2020-06-22 14:21:21,575 - INFO - Creating Canvas data Thread...
+2020-06-22 14:21:21,576 - INFO - Status change to unconfigured
+2020-06-22 14:21:21,576 - INFO - status is unconfigured now
+2020-06-22 14:21:21,690 - INFO - Start heartbeat successfully
+2020-06-22 14:21:21,691 - INFO - Start Command Thread successfully
+2020-06-22 14:21:21,868 - INFO - Received command: start
+2020-06-22 14:21:21,868 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:21:24,713 - INFO - Received command: configure
+2020-06-22 14:21:24,715 - INFO - status change to configuring
+2020-06-22 14:21:24,715 - INFO - NEON connected
+2020-06-22 14:21:24,731 - INFO - status change to ready
+2020-06-22 14:21:24,732 - INFO - status is ready now
+2020-06-22 14:21:25,717 - INFO - Received command: start
+2020-06-22 14:21:26,585 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:21:26,586 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:21:26,587 - INFO - status change to running
+2020-06-22 14:21:26,587 - INFO - status is running now
+2020-06-22 14:22:27,015 - INFO - Status is waiting
+2020-06-22 14:22:27,016 - INFO - status is waiting now
+2020-06-22 14:22:27,016 - INFO - NEON connected
+2020-06-22 14:22:27,017 - INFO - Creating heartbeat thread
+2020-06-22 14:22:27,017 - INFO - Creating Command Thread...
+2020-06-22 14:22:27,017 - INFO - Creating Canvas data Thread...
+2020-06-22 14:22:27,018 - INFO - Status change to unconfigured
+2020-06-22 14:22:27,018 - INFO - status is unconfigured now
+2020-06-22 14:22:27,132 - INFO - Start heartbeat successfully
+2020-06-22 14:22:27,132 - INFO - Start Command Thread successfully
+2020-06-22 14:22:27,279 - INFO - Received command: start
+2020-06-22 14:22:27,281 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:22:32,158 - INFO - Received command: configure
+2020-06-22 14:22:32,159 - INFO - status change to configuring
+2020-06-22 14:22:32,160 - INFO - NEON connected
+2020-06-22 14:22:32,172 - INFO - status change to ready
+2020-06-22 14:22:32,173 - INFO - status is ready now
+2020-06-22 14:22:33,160 - INFO - Received command: start
+2020-06-22 14:22:34,025 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:22:34,026 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:22:34,026 - INFO - status change to running
+2020-06-22 14:22:34,026 - INFO - status is running now
+2020-06-22 14:23:49,826 - INFO - Status is waiting
+2020-06-22 14:23:49,827 - INFO - status is waiting now
+2020-06-22 14:23:49,827 - INFO - NEON connected
+2020-06-22 14:23:49,828 - INFO - Creating heartbeat thread
+2020-06-22 14:23:49,828 - INFO - Creating Command Thread...
+2020-06-22 14:23:49,828 - INFO - Creating Canvas data Thread...
+2020-06-22 14:23:49,829 - INFO - Status change to unconfigured
+2020-06-22 14:23:49,829 - INFO - status is unconfigured now
+2020-06-22 14:23:49,943 - INFO - Start heartbeat successfully
+2020-06-22 14:23:49,944 - INFO - Start Command Thread successfully
+2020-06-22 14:23:50,107 - INFO - Received command: start
+2020-06-22 14:23:50,109 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:24:03,996 - INFO - Received command: configure
+2020-06-22 14:24:03,999 - INFO - status change to configuring
+2020-06-22 14:24:04,001 - INFO - NEON connected
+2020-06-22 14:24:04,015 - INFO - status change to ready
+2020-06-22 14:24:04,016 - INFO - status is ready now
+2020-06-22 14:24:05,000 - INFO - Received command: start
+2020-06-22 14:24:05,860 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:24:05,861 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:24:05,861 - INFO - status change to running
+2020-06-22 14:24:05,862 - INFO - status is running now
+2020-06-22 14:24:53,334 - INFO - Status is waiting
+2020-06-22 14:24:53,336 - INFO - status is waiting now
+2020-06-22 14:24:53,336 - INFO - NEON connected
+2020-06-22 14:24:53,336 - INFO - Creating heartbeat thread
+2020-06-22 14:24:53,337 - INFO - Creating Command Thread...
+2020-06-22 14:24:53,337 - INFO - Creating Canvas data Thread...
+2020-06-22 14:24:53,337 - INFO - Status change to unconfigured
+2020-06-22 14:24:53,338 - INFO - status is unconfigured now
+2020-06-22 14:24:53,451 - INFO - Start heartbeat successfully
+2020-06-22 14:24:53,452 - INFO - Start Command Thread successfully
+2020-06-22 14:24:53,643 - INFO - Received command: start
+2020-06-22 14:24:53,643 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:24:56,474 - INFO - Received command: configure
+2020-06-22 14:24:56,475 - INFO - status change to configuring
+2020-06-22 14:24:56,476 - INFO - NEON connected
+2020-06-22 14:24:56,489 - INFO - status change to ready
+2020-06-22 14:24:56,490 - INFO - status is ready now
+2020-06-22 14:24:57,479 - INFO - Received command: start
+2020-06-22 14:24:58,316 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:24:58,317 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:24:58,318 - INFO - status change to running
+2020-06-22 14:24:58,318 - INFO - status is running now
+2020-06-22 14:27:05,885 - INFO - Status is waiting
+2020-06-22 14:27:05,886 - INFO - status is waiting now
+2020-06-22 14:27:05,886 - INFO - NEON connected
+2020-06-22 14:27:05,886 - INFO - Creating heartbeat thread
+2020-06-22 14:27:05,886 - INFO - Creating Command Thread...
+2020-06-22 14:27:05,887 - INFO - Creating Canvas data Thread...
+2020-06-22 14:27:05,887 - INFO - Status change to unconfigured
+2020-06-22 14:27:05,888 - INFO - status is unconfigured now
+2020-06-22 14:27:06,003 - INFO - Start heartbeat successfully
+2020-06-22 14:27:06,003 - INFO - Start Command Thread successfully
+2020-06-22 14:27:06,162 - INFO - Received command: start
+2020-06-22 14:27:06,163 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:27:10,029 - INFO - Received command: configure
+2020-06-22 14:27:10,031 - INFO - status change to configuring
+2020-06-22 14:27:10,032 - INFO - NEON connected
+2020-06-22 14:27:10,046 - INFO - status change to ready
+2020-06-22 14:27:10,047 - INFO - status is ready now
+2020-06-22 14:27:11,030 - INFO - Received command: start
+2020-06-22 14:27:11,903 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:27:11,903 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:27:11,903 - INFO - status change to running
+2020-06-22 14:27:11,904 - INFO - status is running now
+2020-06-22 14:27:33,835 - INFO - Status is waiting
+2020-06-22 14:27:33,837 - INFO - status is waiting now
+2020-06-22 14:27:33,838 - INFO - NEON connected
+2020-06-22 14:27:33,838 - INFO - Creating heartbeat thread
+2020-06-22 14:27:33,838 - INFO - Creating Command Thread...
+2020-06-22 14:27:33,839 - INFO - Creating Canvas data Thread...
+2020-06-22 14:27:33,840 - INFO - Status change to unconfigured
+2020-06-22 14:27:33,840 - INFO - status is unconfigured now
+2020-06-22 14:27:33,961 - INFO - Start heartbeat successfully
+2020-06-22 14:27:33,962 - INFO - Start Command Thread successfully
+2020-06-22 14:27:34,033 - INFO - Received command: start
+2020-06-22 14:27:34,033 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:27:53,931 - INFO - Status is waiting
+2020-06-22 14:27:53,932 - INFO - status is waiting now
+2020-06-22 14:27:53,933 - INFO - NEON connected
+2020-06-22 14:27:53,933 - INFO - Creating heartbeat thread
+2020-06-22 14:27:53,933 - INFO - Creating Command Thread...
+2020-06-22 14:27:53,934 - INFO - Creating Canvas data Thread...
+2020-06-22 14:27:53,934 - INFO - Status change to unconfigured
+2020-06-22 14:27:53,934 - INFO - status is unconfigured now
+2020-06-22 14:27:54,048 - INFO - Start heartbeat successfully
+2020-06-22 14:27:54,049 - INFO - Start Command Thread successfully
+2020-06-22 14:27:54,222 - INFO - Received command: start
+2020-06-22 14:27:54,223 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:27:57,073 - INFO - Received command: configure
+2020-06-22 14:27:57,074 - INFO - status change to configuring
+2020-06-22 14:27:57,075 - INFO - NEON connected
+2020-06-22 14:27:57,087 - INFO - status change to ready
+2020-06-22 14:27:57,087 - INFO - status is ready now
+2020-06-22 14:27:58,077 - INFO - Received command: start
+2020-06-22 14:27:58,950 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:27:58,950 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:27:58,951 - INFO - status change to running
+2020-06-22 14:27:58,951 - INFO - status is running now
+2020-06-22 14:28:41,814 - INFO - Status is waiting
+2020-06-22 14:28:41,814 - INFO - status is waiting now
+2020-06-22 14:28:41,815 - INFO - NEON connected
+2020-06-22 14:28:41,815 - INFO - Creating heartbeat thread
+2020-06-22 14:28:41,815 - INFO - Creating Command Thread...
+2020-06-22 14:28:41,815 - INFO - Creating Canvas data Thread...
+2020-06-22 14:28:41,816 - INFO - Status change to unconfigured
+2020-06-22 14:28:41,816 - INFO - status is unconfigured now
+2020-06-22 14:28:41,928 - INFO - Start heartbeat successfully
+2020-06-22 14:28:41,928 - INFO - Start Command Thread successfully
+2020-06-22 14:28:42,089 - INFO - Received command: start
+2020-06-22 14:28:42,091 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:29:41,115 - INFO - Received command: configure
+2020-06-22 14:29:41,115 - INFO - status change to configuring
+2020-06-22 14:29:41,116 - INFO - NEON connected
+2020-06-22 14:29:41,128 - INFO - status change to ready
+2020-06-22 14:29:41,129 - INFO - status is ready now
+2020-06-22 14:29:42,121 - INFO - Received command: start
+2020-06-22 14:29:42,969 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:29:42,969 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:29:42,970 - INFO - status change to running
+2020-06-22 14:29:42,970 - INFO - status is running now
+2020-06-22 14:30:04,923 - INFO - Status is waiting
+2020-06-22 14:30:04,924 - INFO - status is waiting now
+2020-06-22 14:30:04,924 - INFO - NEON connected
+2020-06-22 14:30:04,924 - INFO - Creating heartbeat thread
+2020-06-22 14:30:04,924 - INFO - Creating Command Thread...
+2020-06-22 14:30:04,925 - INFO - Creating Canvas data Thread...
+2020-06-22 14:30:04,925 - INFO - Status change to unconfigured
+2020-06-22 14:30:04,925 - INFO - status is unconfigured now
+2020-06-22 14:30:05,039 - INFO - Start heartbeat successfully
+2020-06-22 14:30:05,039 - INFO - Start Command Thread successfully
+2020-06-22 14:30:05,122 - INFO - Received command: start
+2020-06-22 14:30:05,123 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:30:08,064 - INFO - Received command: configure
+2020-06-22 14:30:08,065 - INFO - status change to configuring
+2020-06-22 14:30:08,066 - INFO - NEON connected
+2020-06-22 14:30:08,080 - INFO - status change to ready
+2020-06-22 14:30:08,080 - INFO - status is ready now
+2020-06-22 14:30:09,067 - INFO - Received command: start
+2020-06-22 14:30:09,933 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:30:09,935 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:30:09,936 - INFO - status change to running
+2020-06-22 14:30:09,936 - INFO - status is running now
+2020-06-22 14:32:45,905 - INFO - Status is waiting
+2020-06-22 14:32:45,906 - INFO - status is waiting now
+2020-06-22 14:32:45,906 - INFO - NEON connected
+2020-06-22 14:32:45,906 - INFO - Creating heartbeat thread
+2020-06-22 14:32:45,907 - INFO - Creating Command Thread...
+2020-06-22 14:32:45,907 - INFO - Creating Canvas data Thread...
+2020-06-22 14:32:45,908 - INFO - Status change to unconfigured
+2020-06-22 14:32:45,908 - INFO - status is unconfigured now
+2020-06-22 14:32:46,023 - INFO - Start heartbeat successfully
+2020-06-22 14:32:46,023 - INFO - Start Command Thread successfully
+2020-06-22 14:32:46,170 - INFO - Received command: start
+2020-06-22 14:32:46,171 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:32:56,066 - INFO - Received command: configure
+2020-06-22 14:32:56,067 - INFO - status change to configuring
+2020-06-22 14:32:56,068 - INFO - NEON connected
+2020-06-22 14:32:56,080 - INFO - status change to ready
+2020-06-22 14:32:56,081 - INFO - status is ready now
+2020-06-22 14:32:58,074 - INFO - Received command: start
+2020-06-22 14:32:58,933 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:32:58,933 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:32:58,934 - INFO - status change to running
+2020-06-22 14:32:58,934 - INFO - status is running now
+2020-06-22 14:33:37,609 - INFO - Status is waiting
+2020-06-22 14:33:37,610 - INFO - status is waiting now
+2020-06-22 14:33:37,611 - INFO - NEON connected
+2020-06-22 14:33:37,611 - INFO - Creating heartbeat thread
+2020-06-22 14:33:37,611 - INFO - Creating Command Thread...
+2020-06-22 14:33:37,612 - INFO - Creating Canvas data Thread...
+2020-06-22 14:33:37,612 - INFO - Status change to unconfigured
+2020-06-22 14:33:37,612 - INFO - status is unconfigured now
+2020-06-22 14:33:37,726 - INFO - Start heartbeat successfully
+2020-06-22 14:33:37,727 - INFO - Start Command Thread successfully
+2020-06-22 14:33:37,866 - INFO - Received command: start
+2020-06-22 14:33:37,867 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:33:40,746 - INFO - Received command: configure
+2020-06-22 14:33:40,748 - INFO - status change to configuring
+2020-06-22 14:33:40,748 - INFO - NEON connected
+2020-06-22 14:33:40,761 - INFO - status change to ready
+2020-06-22 14:33:40,762 - INFO - status is ready now
+2020-06-22 14:33:41,750 - INFO - Received command: start
+2020-06-22 14:33:42,635 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:33:42,635 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:33:42,636 - INFO - status change to running
+2020-06-22 14:33:42,636 - INFO - status is running now
+2020-06-22 14:34:15,775 - INFO - Status is waiting
+2020-06-22 14:34:15,776 - INFO - status is waiting now
+2020-06-22 14:34:15,776 - INFO - NEON connected
+2020-06-22 14:34:15,776 - INFO - Creating heartbeat thread
+2020-06-22 14:34:15,777 - INFO - Creating Command Thread...
+2020-06-22 14:34:15,777 - INFO - Creating Canvas data Thread...
+2020-06-22 14:34:15,778 - INFO - Status change to unconfigured
+2020-06-22 14:34:15,778 - INFO - status is unconfigured now
+2020-06-22 14:34:15,891 - INFO - Start heartbeat successfully
+2020-06-22 14:34:15,892 - INFO - Start Command Thread successfully
+2020-06-22 14:34:16,049 - INFO - Received command: start
+2020-06-22 14:34:16,049 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:34:19,917 - INFO - Received command: configure
+2020-06-22 14:34:19,918 - INFO - status change to configuring
+2020-06-22 14:34:19,919 - INFO - NEON connected
+2020-06-22 14:34:19,931 - INFO - status change to ready
+2020-06-22 14:34:19,932 - INFO - status is ready now
+2020-06-22 14:34:20,920 - INFO - Received command: start
+2020-06-22 14:34:21,772 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:34:21,772 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:34:21,773 - INFO - status change to running
+2020-06-22 14:34:21,773 - INFO - status is running now
+2020-06-22 14:36:28,004 - INFO - Status is waiting
+2020-06-22 14:36:28,005 - INFO - status is waiting now
+2020-06-22 14:36:28,005 - INFO - NEON connected
+2020-06-22 14:36:28,005 - INFO - Creating heartbeat thread
+2020-06-22 14:36:28,006 - INFO - Creating Command Thread...
+2020-06-22 14:36:28,006 - INFO - Creating Canvas data Thread...
+2020-06-22 14:36:28,006 - INFO - Status change to unconfigured
+2020-06-22 14:36:28,006 - INFO - status is unconfigured now
+2020-06-22 14:36:28,118 - INFO - Start heartbeat successfully
+2020-06-22 14:36:28,119 - INFO - Start Command Thread successfully
+2020-06-22 14:36:28,254 - INFO - Received command: start
+2020-06-22 14:36:28,256 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:36:31,141 - INFO - Received command: configure
+2020-06-22 14:36:31,142 - INFO - status change to configuring
+2020-06-22 14:36:31,143 - INFO - NEON connected
+2020-06-22 14:36:31,156 - INFO - status change to ready
+2020-06-22 14:36:31,157 - INFO - status is ready now
+2020-06-22 14:36:33,146 - INFO - Received command: start
+2020-06-22 14:36:34,024 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:36:34,025 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:36:34,026 - INFO - status change to running
+2020-06-22 14:36:34,026 - INFO - status is running now
+2020-06-22 14:37:07,549 - INFO - Status is waiting
+2020-06-22 14:37:07,550 - INFO - status is waiting now
+2020-06-22 14:37:07,551 - INFO - NEON connected
+2020-06-22 14:37:07,551 - INFO - Creating heartbeat thread
+2020-06-22 14:37:07,551 - INFO - Creating Command Thread...
+2020-06-22 14:37:07,552 - INFO - Creating Canvas data Thread...
+2020-06-22 14:37:07,553 - INFO - Status change to unconfigured
+2020-06-22 14:37:07,553 - INFO - status is unconfigured now
+2020-06-22 14:37:07,667 - INFO - Start heartbeat successfully
+2020-06-22 14:37:07,668 - INFO - Start Command Thread successfully
+2020-06-22 14:37:07,851 - INFO - Received command: start
+2020-06-22 14:37:07,852 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:37:14,704 - INFO - Received command: configure
+2020-06-22 14:37:14,708 - INFO - status change to configuring
+2020-06-22 14:37:14,709 - INFO - NEON connected
+2020-06-22 14:37:14,721 - INFO - status change to ready
+2020-06-22 14:37:14,722 - INFO - status is ready now
+2020-06-22 14:37:15,706 - INFO - Received command: start
+2020-06-22 14:37:16,587 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:37:16,588 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:37:16,588 - INFO - status change to running
+2020-06-22 14:37:16,589 - INFO - status is running now
+2020-06-22 14:38:35,112 - INFO - Status is waiting
+2020-06-22 14:38:35,112 - INFO - status is waiting now
+2020-06-22 14:38:35,113 - INFO - NEON connected
+2020-06-22 14:38:35,113 - INFO - Creating heartbeat thread
+2020-06-22 14:38:35,113 - INFO - Creating Command Thread...
+2020-06-22 14:38:35,113 - INFO - Creating Canvas data Thread...
+2020-06-22 14:38:35,114 - INFO - Status change to unconfigured
+2020-06-22 14:38:35,114 - INFO - status is unconfigured now
+2020-06-22 14:38:35,227 - INFO - Start heartbeat successfully
+2020-06-22 14:38:35,227 - INFO - Start Command Thread successfully
+2020-06-22 14:38:35,404 - INFO - Received command: start
+2020-06-22 14:38:35,404 - INFO - unconfigured status cannot receive abort command
+2020-06-22 14:38:39,256 - INFO - Received command: configure
+2020-06-22 14:38:39,257 - INFO - status change to configuring
+2020-06-22 14:38:39,258 - INFO - NEON connected
+2020-06-22 14:38:39,270 - INFO - status change to ready
+2020-06-22 14:38:39,270 - INFO - status is ready now
+2020-06-22 14:38:41,261 - INFO - Received command: start
+2020-06-22 14:38:42,156 - INFO - Start Canvas Data Thread successfully
+2020-06-22 14:38:42,157 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 14:38:42,157 - INFO - status change to running
+2020-06-22 14:38:42,157 - INFO - status is running now
+2020-06-22 15:22:04,170 - INFO - Status is waiting
+2020-06-22 15:22:04,171 - INFO - status is waiting now
+2020-06-22 15:22:04,171 - INFO - NEON connected
+2020-06-22 15:22:04,171 - INFO - Creating heartbeat thread
+2020-06-22 15:22:04,172 - INFO - Creating Command Thread...
+2020-06-22 15:22:04,172 - INFO - Creating Canvas data Thread...
+2020-06-22 15:22:04,172 - INFO - Status change to unconfigured
+2020-06-22 15:22:04,173 - INFO - status is unconfigured now
+2020-06-22 15:22:04,288 - INFO - Start heartbeat successfully
+2020-06-22 15:22:04,290 - INFO - Start Command Thread successfully
+2020-06-22 15:22:04,515 - INFO - Received command: start
+2020-06-22 15:22:04,515 - INFO - unconfigured status cannot receive abort command
+2020-06-22 15:22:09,321 - INFO - Received command: configure
+2020-06-22 15:22:09,322 - INFO - status change to configuring
+2020-06-22 15:22:09,323 - INFO - NEON connected
+2020-06-22 15:22:09,336 - INFO - status change to ready
+2020-06-22 15:22:09,337 - INFO - status is ready now
+2020-06-22 15:22:10,324 - INFO - Received command: start
+2020-06-22 15:22:11,310 - INFO - Start Canvas Data Thread successfully
+2020-06-22 15:22:11,311 - INFO - Start Listen Module Tof Counts successfully
+2020-06-22 15:22:11,312 - INFO - status change to running
+2020-06-22 15:22:11,312 - INFO - status is running now
+2020-09-18 09:30:02,741 - INFO - Status is waiting
+2020-09-18 09:30:02,775 - INFO - status is waiting now
+2020-09-18 09:30:02,776 - INFO - NEON connected
+2020-09-18 09:30:02,776 - INFO - Creating heartbeat thread
+2020-09-18 09:30:02,777 - INFO - Creating Command Thread...
+2020-09-18 09:30:02,777 - INFO - Creating Canvas data Thread...
+2020-09-18 09:30:02,778 - INFO - Status change to unconfigured
+2020-09-18 09:30:02,779 - INFO - status is unconfigured now
+2020-09-18 09:30:02,917 - INFO - Start heartbeat successfully
+2020-09-18 09:30:02,918 - INFO - Start Command Thread successfully
Index: main.py
===================================================================
--- main.py	(revision ee40af8c7236a7dfcaa6c11663f44402ec053bb2)
+++ main.py	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -152,5 +152,5 @@
     def setHeartBeat(self, parent):
     	if len(sys.argv) == 1:
-            neonpath="/GPPD/heartbeat/pilot"
+            neonpath="/GPPD/heartbeat/pilot2"
         else:
             neonpath="/GPPD/heartbeat/pilot1"
@@ -165,5 +165,5 @@
     def getCommand(self, parent, gui):
         logging.info("Creating Command Thread...")
-        commandPath = '/GPPD/control/command/pilot'
+        commandPath = '/GPPD/control/command/pilot2'
         #commandPath = '/GPPD/command/pilot'
         self.commandThread = neonReceiver.commandThread(parent, gui, self.readServer, commandPath, 1.0)
Index: model/listenner.py
===================================================================
--- model/listenner.py	(revision ee40af8c7236a7dfcaa6c11663f44402ec053bb2)
+++ model/listenner.py	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -72,5 +72,5 @@
 
         self.proportion = 2.0
-        self.moduleList = [[143,241],[133,231],[123,221],[131,233],[132,232],[322,422],[331,433],[332,432],[333,431],[341,443],[342,442],[343,441],[521,623],[522,622],[523,621],[531,633],[532,632],[533,631],[541,643],[542,642],[543,641]]
+        self.moduleList = [[143,241],[133,231],[123,221],[142,242],[131,233],[141,243],[322,422],[331,433],[332,432],[333,431],[341,443],[342,442],[343,441],[521,623],[531,633],[532,632],[533,631],[541,643],[542,642],[543,641]]
 
     def __del__(self):
@@ -112,12 +112,14 @@
             _module = []
             for i in range(len(self.moduleList)):
-                try:
+                #try:
+                if True:
                     _proportion = 0.0
                     for j in range(len(self.moduleList[i])):
-                        _data = self.redisServer.get('/GPPD/workspace/MantidData/module'+str(self.moduleList[i][j])+'/counts')
+                        _data = self.redisServer.get('/GPPD/earthworm/module'+str(self.moduleList[i][j])+'/detector_counts')
+                        #_data = self.redisServer.get('/GPPD/workspace/MantidData/module'+str(self.moduleList[i][j])+'/counts')
                         if _data is not None:
                             _data = jsonArray.jsonDecoder(_data)
-                            value[i][j] = sum(_data)
-                    if (value[i][0] == 0) and (value[i][0] != 0):
+                            value[i][j] = _data
+                    if (value[i][0] == 0) and (value[i][1] != 0):
                         _proportion =  value[i][0]/value[i][1]
                     elif (value[i][0] != 0) and (value[i][0] == 0):
@@ -125,10 +127,12 @@
                     elif (value[i][0] == 0) and (value[i][0] == 0):
                         _proportion = 0.0
+                    else:
+                        _proportion = float(value[i][0]) / float(value[i][1])
                     if (_proportion > self.proportion) or (_proportion < (1.0/self.proportion)):
                         _module.append(self.moduleList[i][0])        
                         _module.append(self.moduleList[i][1]) 
                         #self.signalListen.emit(self.moduleList[i][0],self.moduleList[i][1])
-                except:
-                    pass
+                #except:
+                #    pass
             try:
                 self.signalListen.emit(_module)
Index: viewer/detector.py
===================================================================
--- viewer/detector.py	(revision ee40af8c7236a7dfcaa6c11663f44402ec053bb2)
+++ viewer/detector.py	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -89,4 +89,5 @@
         self.bankCombo.addItem('I-tof')
         self.bankCombo.addItem('I-d')
+        self.bankCombo.addItem('I-q')
         #self.bankCombo.setCurrentIndex(1)
         self.bankCombo.activated.connect(self.comboSelected)
@@ -254,4 +255,9 @@
         elif comboIndex==2:
             self.canvas2.ax.set_xlabel('d')
+            self.canvas2.show()
+            self.canvas1.hide()
+            self.canvas2.draw()
+        elif comboIndex==3:
+            self.canvas2.ax.set_xlabel('q')
             self.canvas2.show()
             self.canvas1.hide()
@@ -325,5 +331,5 @@
                     self.canvas1.ax.add_patch(self.canvas1.rect)
                     #self.canvas1.ax.axis('equal', adjustable='box')
-                    self.roi=self.canvas1.ax.pcolor(value[0], value[1], value[2], cmap=color3D)
+                    #self.roi=self.canvas1.ax.pcolor(value[0], value[1], value[2], cmap=color3D)
                     self.roi=self.canvas1.ax.pcolormesh(value[0], value[1], value[2], cmap=color3D)
                     self.canvas1.ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(20))
@@ -354,8 +360,6 @@
         # PID 2D Bar
         else:
-            try:
-            #self.canvas2.ax.bar(_x,value,0.5,color='r')
-            #self.canvas2.ax.axis('scaled')
-            #self.canvas2.ax.hist(value[4], color=color2D)
+            #try:
+            if True:
                 if str(value[4]) == 'clear':
                     self.canvas2.ax.clear()
@@ -369,5 +373,16 @@
                     #if self.buttonChange or self.pix == None:
                     self.canvas2.ax.clear()
-                    self.pix, = self.canvas2.ax.plot(value[3], value[4], color=color2D)
+                    comboIndex = self.getComboIndex()
+                    x = []
+                    y = []
+                    if comboIndex == 3:
+                        xLen = len(value[3])
+                        for i in range(xLen):
+                            x.append(2*np.pi/value[3][xLen - i - 1])
+                            y.append(value[4][xLen - i - 1])
+                    else:
+                        x = value[3]
+                        y = value[4]
+                    self.pix, = self.canvas2.ax.plot(x, y, color=color2D)
                     #self.pix, = self.canvas2.ax.plot(value[3], _t, color=color2D)
                     self.canvas2.ax.add_patch(self.canvas2.rect)
@@ -386,4 +401,6 @@
                     elif _comboIndex==2:
                         self.canvas2.ax.set_xlabel('d')
+                    elif _comboIndex==3:
+                        self.canvas2.ax.set_xlabel('q')
                     self.canvas2.ax.set_ylabel('Neutron Distribution')
 
@@ -398,6 +415,6 @@
                     self.canvas2.draw()
                     self.buttonChange = False
-            except:
-                pass
+            #except:
+            #    pass
             #    self.pix = None
                 #self.canvas2.ax.yaxis.set_major_locator(matplotlib.ticker.MultipleLocator(3))
Index: viewer/detector.py.bak
===================================================================
--- viewer/detector.py.bak	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
+++ viewer/detector.py.bak	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -0,0 +1,425 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+from conf.constants import *
+from canvas import *
+from model import listenner
+
+from matplotlib.ticker import MaxNLocator
+import numpy as np
+
+class CSNSDetectorPage(QtGui.QTabWidget):
+
+    def __init__(self, parent):
+        super(CSNSDetectorPage, self).__init__(parent=None)
+        self.parent = parent
+        self.setupUi(self)
+
+    def setupUi(self, Widget):
+
+        self.verticalLayout = QtGui.QVBoxLayout(self)
+        
+        self.first = QtGui.QFrame(self)
+        self.first.setFrameShape(QtGui.QFrame.StyledPanel)
+        self.scrollArea = QtGui.QScrollArea()
+        self.scrollArea.setWidgetResizable(True)
+        self.scrollArea.setWidget(self.first)
+
+        self.second = QtGui.QFrame(self)
+        self.second.setFrameShape(QtGui.QFrame.StyledPanel)
+        self.scrollArea2 = QtGui.QScrollArea()
+        self.scrollArea2.setWidgetResizable(True)
+        self.scrollArea2.setWidget(self.second)
+
+        self.splitter = QtGui.QSplitter(QtCore.Qt.Vertical)
+        self.splitter.addWidget(self.scrollArea)
+        self.splitter.addWidget(self.scrollArea2)
+        self.splitter.setSizes([100, 200])
+
+        self.firstGrid = QtGui.QGridLayout(self.first)
+        self.secondGrid = QtGui.QGridLayout(self.second)
+	
+        #first Grid
+        _width = 15
+        _height = 15
+        self.moduleList=[141,142,143,131,132,133,123,221,233,232,231,243,242,241,322,331,332,333,341,342,343,422,431,432,433,441,442,443,521,531,532,533,541,542,543,623,631,632,633,641,642,643]
+        #self.moduleList=[143,131,132,133,123,221,233,232,231,241,322,331,332,333,341,342,343,422,431,432,433,441,442,443,521,522,523,531,532,533,541,542,543,621,622,623,631,632,633,641,642,643]
+        self.buttonList=[141,142,143, # 0, 1, 2
+                         131,132,133, # 3, 4, 5
+                                 123, #       6
+                                 221, #       7
+                         233,232,231, # 8, 9, 10
+                         243,242,241, # 11,12,13
+                         322,         #14
+                         331,332,333, #15,16,17
+                         341,342,343, #18,19,20
+                         422,         #21
+                         431,432,433, #22,23,24
+                         441,442,443, #25,26,27
+                         521,         #28
+                         531,532,533, #29,30,31
+                         541,542,543, #32,33,34
+                                 623, #35
+                         631,632,633, #36,37,38
+                         641,642,643] #39,40,41
+        for i in range(len(self.buttonList)):
+            self.buttonList[i] = BankButton(self,'img/module_off.png', _width, _height)
+        
+        self.camera = BankButton(self,'img/camera.png', _width, _height)
+        self.sample = BankButton(self,'img/sample.png', _width, _height)
+        self.monitor = BankButton(self,'img/monitor.png', _width, _height)
+        
+        self.blank5 = BankButton(self,'blank.png', _width, _height)
+        self.blank9 = BankButton(self,'blank.png', _width, _height)
+	
+        self.RadioGroup = QtGui.QButtonGroup()
+        for i in range(len(self.buttonList)):
+            self.RadioGroup.addButton(self.buttonList[i])
+        self.RadioGroup.buttonClicked.connect(self.buttonClicked)
+
+        self.blank1 = QtGui.QLabel("                               ---------------------------------------------->", self.first)
+        self.blank1.setMinimumWidth(460)
+        self.blank2 = QtGui.QLabel(self.first)
+        self.blank2.setMinimumWidth(460)
+	
+        #second Grid
+        self.moduleLabel = QtGui.QLabel("module:633   ", self.second)
+        self.bankCombo = QtGui.QComboBox()
+        self.bankCombo.addItem('XY')
+        self.bankCombo.addItem('I-tof')
+        self.bankCombo.addItem('I-d')
+        #self.bankCombo.setCurrentIndex(1)
+        self.bankCombo.activated.connect(self.comboSelected)
+
+        self.logCombo = QtGui.QComboBox()
+        self.logCombo.addItem('linear')
+        self.logCombo.addItem('logarithmic')
+        self.logCombo.activated.connect(self.comboLogChange)
+        
+        _xsize = 16
+        _ysize = 8
+        self.canvas1 = zoomCanvas(
+            self,
+            _xsize,
+            _ysize,
+            150,
+            'Accent'
+            'Neutron Distribution',
+            'X / mm',
+            #'TOF / us',
+            )
+        self.canvas2 = zoomCanvas(
+            self,
+            _xsize,
+            _ysize,
+            150,
+            'Accent'
+            'Neutron Distribution',
+            'TOF / us',
+            #'TOF / us',
+            )
+
+        _nline = 0
+        self.firstGrid.addWidget(self.blank5, _nline, 5, 1,1)
+        self.firstGrid.addWidget(self.blank9, _nline, 9, 1,1)
+        self.firstGrid.addWidget(self.buttonList[18], _nline, 6, 1,1)#341
+        self.firstGrid.addWidget(self.buttonList[19], _nline, 7, 1,1)#342
+        self.firstGrid.addWidget(self.buttonList[20], _nline, 8, 1,1)#343
+        _nline += 1
+        self.firstGrid.addWidget(self.buttonList[34], _nline, 2, 1,1)#543
+        self.firstGrid.addWidget(self.buttonList[31], _nline, 3, 1,1)#533
+        #self.firstGrid.addWidget(self.buttonList[26], _nline, 4, 1,1)#523
+        self.firstGrid.addWidget(self.buttonList[15], _nline, 6, 1,1)#331
+        self.firstGrid.addWidget(self.buttonList[16], _nline, 7, 1,1)#332
+        self.firstGrid.addWidget(self.buttonList[17], _nline, 8, 1,1)#333
+        self.firstGrid.addWidget(self.buttonList[0], _nline, 10, 1,1)#141
+        self.firstGrid.addWidget(self.buttonList[1], _nline, 11, 1,1)#142
+        self.firstGrid.addWidget(self.buttonList[2], _nline, 12, 1,1)#143
+        _nline += 1
+        self.firstGrid.addWidget(self.buttonList[33], _nline, 2, 1,1)#542
+        self.firstGrid.addWidget(self.buttonList[30], _nline, 3, 1,1)#532
+        #self.firstGrid.addWidget(self.buttonList[25], _nline, 4, 1,1)#522
+        self.firstGrid.addWidget(self.buttonList[14], _nline, 7, 1,1)#322
+        self.firstGrid.addWidget(self.buttonList[3], _nline, 10, 1,1)#131
+        self.firstGrid.addWidget(self.buttonList[4], _nline, 11, 1,1)#132
+        self.firstGrid.addWidget(self.buttonList[5], _nline, 12, 1,1)#133
+        _nline += 1
+        self.firstGrid.addWidget(self.buttonList[32], _nline, 2, 1,1)#541
+        self.firstGrid.addWidget(self.buttonList[29], _nline, 3, 1,1)#531
+        self.firstGrid.addWidget(self.buttonList[28], _nline, 4, 1,1)#521
+        self.firstGrid.addWidget(self.buttonList[6], _nline, 12, 1,1)#123
+        _nline += 1
+        self.firstGrid.addWidget(self.monitor, _nline, 1, 1,1)
+        self.firstGrid.addWidget(self.sample, _nline, 7, 1,1)
+        self.firstGrid.addWidget(self.camera, _nline, 13, 1,1)
+        self.firstGrid.addWidget(self.blank1, _nline, 0, 1,1)
+        self.firstGrid.addWidget(self.blank2, _nline, 14, 1,1)
+        _nline += 1
+        self.firstGrid.addWidget(self.buttonList[41], _nline, 2, 1,1)#643
+        self.firstGrid.addWidget(self.buttonList[38], _nline, 3, 1,1)#633
+        self.firstGrid.addWidget(self.buttonList[35], _nline, 4, 1,1)#623
+        self.firstGrid.addWidget(self.buttonList[7], _nline, 12, 1,1)#221
+        _nline += 1
+        self.firstGrid.addWidget(self.buttonList[40], _nline,  2, 1,1)#642
+        self.firstGrid.addWidget(self.buttonList[37], _nline,  3, 1,1)#632
+        #self.firstGrid.addWidget(self.buttonList[34], _nline, 4, 1,1)#622
+        self.firstGrid.addWidget(self.buttonList[21], _nline,  7, 1,1)#422
+        self.firstGrid.addWidget(self.buttonList[8],  _nline, 10, 1,1)#233
+        self.firstGrid.addWidget(self.buttonList[9],  _nline, 11, 1,1)#232
+        self.firstGrid.addWidget(self.buttonList[10], _nline, 12, 1,1)#231
+        _nline += 1
+        self.firstGrid.addWidget(self.buttonList[39], _nline,  2, 1,1)#641
+        self.firstGrid.addWidget(self.buttonList[36], _nline,  3, 1,1)#631
+        #self.firstGrid.addWidget(self.buttonList[33], _nline, 4, 1,1)#621
+        self.firstGrid.addWidget(self.buttonList[24], _nline,  6, 1,1)#433
+        self.firstGrid.addWidget(self.buttonList[23], _nline,  7, 1,1)#432
+        self.firstGrid.addWidget(self.buttonList[22], _nline,  8, 1,1)#431
+        self.firstGrid.addWidget(self.buttonList[11], _nline, 10, 1,1)#243
+        self.firstGrid.addWidget(self.buttonList[12], _nline, 11, 1,1)#242
+        self.firstGrid.addWidget(self.buttonList[13], _nline, 12, 1,1)#241
+        _nline += 1
+        self.firstGrid.addWidget(self.buttonList[27], _nline, 6, 1,1)#443
+        self.firstGrid.addWidget(self.buttonList[26], _nline, 7, 1,1)#442
+        self.firstGrid.addWidget(self.buttonList[25], _nline, 8, 1,1)#441
+        _nline = 0
+        self.secondGrid.addWidget(self.moduleLabel, _nline, 1, 1,1)
+        self.secondGrid.addWidget(self.bankCombo,   _nline, 2, 1,1)
+        self.secondGrid.addWidget(self.logCombo,    _nline, 3, 1,1)
+        _nline += 1
+        self.secondGrid.addWidget(self.canvas1, _nline, 0, 1,1)#, QtCore.Qt.AlignCenter)
+        self.secondGrid.addWidget(self.canvas2, _nline, 0, 1,1)#, QtCore.Qt.AlignCenter)
+        self.canvas1.show()
+        self.canvas2.hide()
+        self.verticalLayout.addWidget(self.splitter)
+        
+        self.buttonIndex = 38
+        self.buttonList[38].setIcon(QtGui.QIcon('img/module_on.png'))
+        self.buttonChange = True
+        self.comboIndex = 0  
+
+        self.pix = None
+        self.roi = None
+        self.colorbar = None
+
+        self.font={ 'family': 'serif',
+                    'color':  'red',
+                    'weight': 'normal',
+                    'size': 7,
+                    }
+
+    def setModuleListen(self, module):
+        try:
+            self.buttonReset()
+            #for i in range (len(self.buttonList)):
+            #    if self.buttonList[i].isChecked():
+                    #self.buttonIndex = i
+            for i in range (len(module)):
+                _index = self.moduleList.index(module[i])
+                self.buttonList[_index].setIcon(QtGui.QIcon('img/module_error.png'))
+            self.moduleLabel.setText("module:"+str(self.moduleList[self.buttonIndex])+"   ")
+            self.buttonList[self.buttonIndex].setIcon(QtGui.QIcon('img/module_on.png'))
+            #_index1 = self.moduleList.index(module1)
+            #_index2 = self.moduleList.index(module2)
+            #self.buttonList[_index1].setIcon(QtGui.QIcon('img/module_error.png')) 
+            #self.buttonList[_index2].setIcon(QtGui.QIcon('img/module_error.png')) 
+        except:
+            pass
+
+    def getComboIndex(self):
+        self.comboIndex = self.bankCombo.currentIndex()    
+        return self.comboIndex    
+
+    def getButtonIndex(self):
+        return self.buttonIndex
+    
+    def getDetectorIndex(self):
+        buttonIndex = self.getButtonIndex()
+        comboIndex = self.getComboIndex()
+        return buttonIndex, comboIndex
+
+    def comboSelected(self):
+        self.pix = None
+        self.canvas2.zoomSelected = False
+        comboIndex = self.getComboIndex()
+        #buttonIndex = self.getButtonIndex()
+        self.parent.tabChange()
+        if comboIndex==0:
+            self.canvas2.hide()
+            self.canvas1.show()
+        elif comboIndex==1:
+            self.canvas2.ax.set_xlabel('TOF / us')
+            self.canvas2.show()
+            self.canvas1.hide()
+            self.canvas2.draw()
+        elif comboIndex==2:
+            self.canvas2.ax.set_xlabel('d')
+            self.canvas2.show()
+            self.canvas1.hide()
+            self.canvas2.draw()
+        self.getDetectorData()        
+
+    def comboLogChange(self):
+        self.pix = None
+        self.canvas2.zoomSelected = False
+        index = self.logCombo.currentIndex()
+        if index == 0:
+            self.canvas2.ax.set_yscale('linear')
+        else:
+            self.canvas2.ax.set_yscale('log')
+        self.canvas2.draw()
+
+    def getDetectorData(self):
+        self.parent.getDetectorData()
+    
+    def getModuleList(self):
+        return self.moduleList
+
+    def buttonClicked(self):
+        self.buttonReset()
+        for i in range (len(self.buttonList)):
+            if self.buttonList[i].isChecked():
+                self.buttonIndex = i
+                self.moduleLabel.setText("module:"+str(self.moduleList[i])+"   ")
+                self.buttonList[i].setIcon(QtGui.QIcon('img/module_on.png'))
+        self.parent.tabChange()
+        self.roi = None
+        self.pix = None
+        self.buttonChange = True
+        self.canvas1.zoomSelected = False
+        self.canvas2.zoomSelected = False
+        self.canvas2.ax.clear()
+        self.canvas1.ax.clear()
+        self.canvas2.draw()
+        self.canvas1.draw()
+        comboIndex = self.getComboIndex()
+
+    def clearCanvas(self):
+        self.canvas1.ax.clear()
+        self.canvas1.draw()
+        self.canvas2.ax.clear()
+        self.canvas2.draw()
+ 
+    def updateBankCanvas(self, num, value):#, started, _command):
+        _buttonIndex=self.getButtonIndex()
+        _comboIndex=self.getComboIndex()
+        if _buttonIndex in (0,1,2,3,4,5,6,7,8,9,10,11,12,13):
+            color2D = 'c'
+            color3D = 'Greens'
+        elif _buttonIndex   in (14,15,16,17,18,19,20,21,22,23,24,25,26,27):
+            color2D = 'r'
+            color3D = 'Blues'
+        elif _buttonIndex in (28,29,30,31,32,33,34,35,36,37,38,39,40,41):
+            color2D = 'y'
+            color3D = 'gist_heat'
+        # XY 3D Image
+        if _comboIndex==0:
+            try:
+                if str(value[2]) == 'clear':
+                    self.canvas1.ax.clear()
+                    self.canvas1.draw()
+                elif len(value[2]) == 0:
+                    pass
+                else:
+                    #if self.buttonChange or self.roi == None:
+                    self.canvas1.ax.clear()
+                    self.canvas1.ax.add_patch(self.canvas1.rect)
+                    #self.canvas1.ax.axis('equal', adjustable='box')
+                    self.roi=self.canvas1.ax.pcolor(value[0], value[1], value[2], cmap=color3D)
+                    self.roi=self.canvas1.ax.pcolormesh(value[0], value[1], value[2], cmap=color3D)
+                    self.canvas1.ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(20))
+                    self.canvas1.ax.yaxis.set_major_locator(matplotlib.ticker.MultipleLocator(20))
+                    self.canvas1.ax.set_xlabel('X / mm')
+                    self.canvas1.ax.set_ylabel('Y / mm')
+                    #self.buttonChange = False
+                    #else:
+                    #    self.roi.set_array(np.array(value[2]).ravel())
+                        #self.roi.set_array(np.array(value[2])[:-1,:-1].ravel())
+                    if self.buttonChange == False:
+                        if self.canvas1.zoomSelected and (self.canvas1.minX != self.canvas1.maxX) and (self.canvas1.minY != self.canvas1.maxY):
+                            self.canvas1.ax.set_xlim(self.canvas1.minX, self.canvas1.maxX)
+                            self.canvas1.ax.set_ylim(self.canvas1.minY, self.canvas1.maxY)
+                        elif self.canvas1.scale_factor != 1.0:
+                            self.canvas1.ax.set_xlim([self.canvas1.xdata - self.canvas1.new_width * (1-self.canvas1.relx), self.canvas1.xdata + self.canvas1.new_width * (self.canvas1.relx)])
+                            self.canvas1.ax.set_ylim([self.canvas1.ydata - self.canvas1.new_height * (1-self.canvas1.rely), self.canvas1.ydata + self.canvas1.new_height * (self.canvas1.rely)])
+                    if self.colorbar == None:
+                        self.colorbar=self.canvas1.fig.colorbar(self.roi,ax=self.canvas1.ax,extend='max')
+                        self.colorbar.ax.tick_params(labelsize=5)
+                    else:
+                        self.colorbar.on_mappable_changed(self.roi)
+                    self.buttonChange = False
+                    self.canvas1.draw()
+            except:
+                pass
+                #self.roi = None
+        # PID 2D Bar
+        else:
+            try:
+            #self.canvas2.ax.bar(_x,value,0.5,color='r')
+            #self.canvas2.ax.axis('scaled')
+            #self.canvas2.ax.hist(value[4], color=color2D)
+                if str(value[4]) == 'clear':
+                    self.canvas2.ax.clear()
+                    self.canvas2.draw()
+                elif len(value[3]) != len(value[4]) or len(value[4]) == 0:
+                    pass
+                else:
+                    #_t=np.array(value[4])
+                    #_t[np.isnan(_t)]=0
+                    #_t[np.isinf(_t)]=0
+                    #if self.buttonChange or self.pix == None:
+                    self.canvas2.ax.clear()
+                    self.pix, = self.canvas2.ax.plot(value[3], value[4], color=color2D)
+                    #self.pix, = self.canvas2.ax.plot(value[3], _t, color=color2D)
+                    self.canvas2.ax.add_patch(self.canvas2.rect)
+                    #else:
+                    #    self.pix.set_ydata(value[4])
+                    if self.buttonChange == False:
+                        if self.canvas2.zoomSelected and (self.canvas2.minX != self.canvas2.maxX) and (self.canvas2.minY != self.canvas2.maxY):
+                            self.canvas2.ax.set_xlim(self.canvas2.minX, self.canvas2.maxX)
+                            self.canvas2.ax.set_ylim(self.canvas2.minY, self.canvas2.maxY)
+                        elif self.canvas2.scale_factor != 1.0:
+                            self.canvas2.ax.set_xlim([self.canvas2.xdata - self.canvas2.new_width * (1-self.canvas2.relx), self.canvas2.xdata + self.canvas2.new_width * (self.canvas2.relx)])
+                            self.canvas2.ax.set_ylim([self.canvas2.ydata - self.canvas2.new_height * (1-self.canvas2.rely), self.canvas2.ydata + self.canvas2.new_height * (self.canvas2.rely)])
+                    self.canvas2.ax.yaxis.set_major_locator(MaxNLocator(integer=True))
+                    if _comboIndex==1:
+                        self.canvas2.ax.set_xlabel('TOF / us')
+                    elif _comboIndex==2:
+                        self.canvas2.ax.set_xlabel('d')
+                    self.canvas2.ax.set_ylabel('Neutron Distribution')
+
+                    index = self.logCombo.currentIndex()
+                    if index == 0:
+                        self.canvas2.ax.set_yscale('linear')
+                    else:
+                        self.canvas2.ax.set_yscale('log')
+
+                    self.canvas2.ax.relim()
+                    self.canvas2.ax.autoscale_view()
+                    self.canvas2.draw()
+                    self.buttonChange = False
+            except:
+                pass
+            #    self.pix = None
+                #self.canvas2.ax.yaxis.set_major_locator(matplotlib.ticker.MultipleLocator(3))
+        plt.pause(0.0001)
+
+    def buttonReset(self):
+        for i in range (len(self.buttonList)):
+            self.buttonList[i].setIcon(QtGui.QIcon('img/module_off.png')) 
+
+class BankButton(QtGui.QPushButton):
+
+    def __init__(
+        self,
+        parent=None,
+        img='',
+        width=20,
+        height=20,
+        ):
+        super(BankButton,self).__init__(parent)
+	
+        self.setFlat(True)
+        self.setStyleSheet("border:none;outline:none")
+        self.setIcon(QtGui.QIcon(img))
+        self.setIconSize(QtCore.QSize(width,height))
+        self.setCheckable(True)
Index: viewer/mainTab.py
===================================================================
--- viewer/mainTab.py	(revision 96a5e91f408c0a05e76ab2336c9e26d85b3d0dc9)
+++ viewer/mainTab.py	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -132,4 +132,7 @@
             path4 = '/GPPD/workspace/MantidData/module'+str(moduleList[buttonIndex])+'/d'
             path5 = '/GPPD/workspace/MantidData/module'+str(moduleList[buttonIndex])+'/intensity'            
+        elif _index == 3:
+            path4 = '/GPPD/workspace/MantidData/module'+str(moduleList[buttonIndex])+'/d'
+            path5 = '/GPPD/workspace/MantidData/module'+str(moduleList[buttonIndex])+'/intensity'            
         return path1, path2, path3, path4, path5
         
Index: viewer/pattern.py
===================================================================
--- viewer/pattern.py	(revision ee40af8c7236a7dfcaa6c11663f44402ec053bb2)
+++ viewer/pattern.py	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -82,5 +82,6 @@
 
     def updateCanvas(self,redisServer, runNo, _command, num, value):#, started, _command): 
-        try:
+        #try:
+        if True:
             '''
             if _command == 'stop':
@@ -107,6 +108,6 @@
             elif num == 3:
                 self.updateCanvas1(value)
-        except:
-            pass
+        #except:
+        #    pass
 
     def updateCanvas1(self, value):
@@ -143,5 +144,8 @@
                 else:
                     canvas.ax.set_yscale('log')
-
+                x = range(int(min(value[0])), int(max(value[0])), int(max(value[0]) - min(value[0]))/8)
+                y = range(int(min(value[1])), int(max(value[1])), int(max(value[1]) - min(value[1]))/8)
+                canvas.ax.set_xticks(x)
+                canvas.ax.set_yticks(y)
                 canvas.ax.relim()
                 canvas.ax.autoscale_view()
@@ -184,4 +188,8 @@
                     canvas.ax.set_yscale('log')
 
+                x = range(int(min(value[0])), int(max(value[0])), int(max(value[0]) - min(value[0]))/8)
+                y = range(int(min(value[1])), int(max(value[1])), int(max(value[1]) - min(value[1]))/8)
+                canvas.ax.set_xticks(x)
+                canvas.ax.set_yticks(y)
                 canvas.ax.relim()
                 canvas.ax.autoscale_view()
@@ -230,4 +238,8 @@
                     canvas.ax.set_yscale('log')
 
+                x = range(int(min(value[0])), int(max(value[0])), int(max(value[0]) - min(value[0]))/8)
+                y = range(int(min(value[1])), int(max(value[1])), int(max(value[1]) - min(value[1]))/8)
+                canvas.ax.set_xticks(x)
+                canvas.ax.set_yticks(y)
                 canvas.ax.relim()
                 canvas.ax.autoscale_view()
Index: viewer/user.py
===================================================================
--- viewer/user.py	(revision ee40af8c7236a7dfcaa6c11663f44402ec053bb2)
+++ viewer/user.py	(revision e80e37d7308c421957d4c47de331b7c5affd21a1)
@@ -337,5 +337,5 @@
 
     def getIP_PORT(self):
-        #ip = '10.1.53.240'
+        #ip = '10.1.31.120'
         ip = '10.1.33.141'
         _ip_port = [(ip, 9001), (ip,9011)]
