diff --git a/bak/device0/20250713/20250713-app.db b/bak/device0/20250713/20250713-app.db new file mode 100644 index 0000000..4b54123 Binary files /dev/null and b/bak/device0/20250713/20250713-app.db differ diff --git a/bak/device0/20250713/zapp_sub_module_config_initial_value.csv b/bak/device0/20250713/zapp_sub_module_config_initial_value.csv new file mode 100644 index 0000000..25b9b01 --- /dev/null +++ b/bak/device0/20250713/zapp_sub_module_config_initial_value.csv @@ -0,0 +1,2 @@ +id,moduleType,mid,configJson +7,PipetteGunCtrl,PipetteMod,"{""zmBCfgs"":{""shaft"":0,""oneCirclePulse"":80,""oneCirclePulseDenominator"":1,""ihold"":7,""irun"":7,""iholddelay"":10,""iglobalscaler"":0,""mind"":0,""maxd"":0,""tzerowait"":0,""encResolution"":0,""enableEnc"":0,""dzero"":153,""ioTriggerAppendDistance"":20,""posDeviTolerance"":20,""mres"":0,""mark"":9973},""commonCfg"":{""pressureRecordEnable"":0,""platformInfoCpyid"":0,""eachActionDelayTime"":0,""aspiratePressureReportExtendTime"":200,""lldEnableProtect"":1,""mark"":0},""platInfos"":[{""workRefPos"":900,""tipPickingPos"":740,""tipPickingSearchRange"":80,""tipPickingAppendDistance"":10,""tipPickingSettlingTime"":800,""tipDepositPos"":1200,""transformPos"":0,""tipType"":1,""tipLength"":500,""mark"":9973},{""workRefPos"":885,""tipPickingPos"":700,""tipPickingSearchRange"":50,""tipPickingAppendDistance"":25,""tipPickingSettlingTime"":500,""tipDepositPos"":-1,""transformPos"":-1,""tipType"":-1,""tipLength"":520,""mark"":-1},{""workRefPos"":-1,""tipPickingPos"":-1,""tipPickingSearchRange"":-1,""tipPickingAppendDistance"":-1,""tipPickingSettlingTime"":0,""tipDepositPos"":-1,""transformPos"":-1,""tipType"":-1,""tipLength"":-1,""mark"":-1}],""containerInfos"":[{""containerType"":0,""containerNeckPos"":0,""containerDepth"":500,""containerRound"":0,""containerBottomSectionHeight"":0,""immersionDepth"":40,""leavingHeight"":100,""jetHeight"":100,""lldStartSearchDepth"":120,""fixAspirationDepth"":160,""llfVConvertCoefficient"":1000,""pierceDepth"":50,""lldEndPosMargin"":0,""mark"":9973},{""containerType"":1,""containerNeckPos"":-1,""containerDepth"":290,""containerRound"":100,""containerBottomSectionHeight"":0,""immersionDepth"":50,""leavingHeight"":80,""jetHeight"":80,""lldStartSearchDepth"":50,""fixAspirationDepth"":220,""llfVConvertCoefficient"":0,""pierceDepth"":80,""lldEndPosMargin"":50,""mark"":-1},{""containerType"":1,""containerNeckPos"":-1,""containerDepth"":540,""containerRound"":133,""containerBottomSectionHeight"":40,""immersionDepth"":40,""leavingHeight"":50,""jetHeight"":50,""lldStartSearchDepth"":100,""fixAspirationDepth"":100,""llfVConvertCoefficient"":100,""pierceDepth"":0,""lldEndPosMargin"":50,""mark"":-1},{""containerType"":1,""containerNeckPos"":-1,""containerDepth"":200,""containerRound"":20,""containerBottomSectionHeight"":0,""immersionDepth"":80,""leavingHeight"":50,""jetHeight"":50,""lldStartSearchDepth"":0,""fixAspirationDepth"":100,""llfVConvertCoefficient"":0,""pierceDepth"":80,""lldEndPosMargin"":0,""mark"":-1},{""containerType"":3,""containerNeckPos"":-1,""containerDepth"":730,""containerRound"":105,""containerBottomSectionHeight"":590,""immersionDepth"":40,""leavingHeight"":50,""jetHeight"":50,""lldStartSearchDepth"":100,""fixAspirationDepth"":0,""llfVConvertCoefficient"":140,""pierceDepth"":0,""lldEndPosMargin"":50,""mark"":-1},{""containerType"":3,""containerNeckPos"":-1,""containerDepth"":980,""containerRound"":105,""containerBottomSectionHeight"":590,""immersionDepth"":40,""leavingHeight"":50,""jetHeight"":50,""lldStartSearchDepth"":184,""fixAspirationDepth"":0,""llfVConvertCoefficient"":140,""pierceDepth"":0,""lldEndPosMargin"":50,""mark"":-1},{""containerType"":3,""containerNeckPos"":-1,""containerDepth"":930,""containerRound"":105,""containerBottomSectionHeight"":590,""immersionDepth"":40,""leavingHeight"":50,""jetHeight"":50,""lldStartSearchDepth"":184,""fixAspirationDepth"":0,""llfVConvertCoefficient"":140,""pierceDepth"":0,""lldEndPosMargin"":50,""mark"":-1},{""containerType"":2,""containerNeckPos"":-1,""containerDepth"":370,""containerRound"":926,""containerBottomSectionHeight"":190,""immersionDepth"":40,""leavingHeight"":50,""jetHeight"":50,""lldStartSearchDepth"":54,""fixAspirationDepth"":0,""llfVConvertCoefficient"":150,""pierceDepth"":0,""lldEndPosMargin"":30,""mark"":-1},{""containerType"":2,""containerNeckPos"":-1,""containerDepth"":280,""containerRound"":60,""containerBottomSectionHeight"":114,""immersionDepth"":40,""leavingHeight"":50,""jetHeight"":50,""lldStartSearchDepth"":54,""fixAspirationDepth"":0,""llfVConvertCoefficient"":200,""pierceDepth"":0,""lldEndPosMargin"":20,""mark"":-1},{""containerType"":1,""containerNeckPos"":-1,""containerDepth"":300,""containerRound"":94,""containerBottomSectionHeight"":0,""immersionDepth"":40,""leavingHeight"":50,""jetHeight"":50,""lldStartSearchDepth"":100,""fixAspirationDepth"":0,""llfVConvertCoefficient"":140,""pierceDepth"":0,""lldEndPosMargin"":50,""mark"":-1},{""containerType"":0,""containerNeckPos"":-1,""containerDepth"":0,""containerRound"":0,""containerBottomSectionHeight"":0,""immersionDepth"":0,""leavingHeight"":0,""jetHeight"":0,""lldStartSearchDepth"":0,""fixAspirationDepth"":0,""llfVConvertCoefficient"":0,""pierceDepth"":0,""lldEndPosMargin"":0,""mark"":-1}],""liquidInfos"":[{""plldPmVCpyId"":7,""plldThreshold"":30,""plldZmVel"":0,""plldInvasionDepth"":10,""emptyTipPmVCpyId"":6,""blowoutAirVolume"":500,""blowoutAirPmVCpyId"":6,""overAspiratedVolume"":100,""overAspiratedPmVCpyId"":1,""aspirationPmVCpyIdLow"":1,""aspirationPmVCpyIdHigh"":2,""aspirationVolumeBreakVal"":400,""volumeCalibrationCoefficientB"":3053,""volumeCalibrationCoefficientK"":1046,""settlingTime"":1000,""transportVolume"":40,""transportVolumePmVCpyId"":1,""mixPmVCpyId"":6,""jetPmVCpyId"":0,""distributePmVCpyId"":0,""mark"":9973},{""plldPmVCpyId"":-1,""plldThreshold"":-1,""plldZmVel"":-1,""plldInvasionDepth"":0,""emptyTipPmVCpyId"":-1,""blowoutAirVolume"":-1,""blowoutAirPmVCpyId"":-1,""overAspiratedVolume"":-1,""overAspiratedPmVCpyId"":-1,""aspirationPmVCpyIdLow"":-1,""aspirationPmVCpyIdHigh"":-1,""aspirationVolumeBreakVal"":-1,""volumeCalibrationCoefficientB"":-1,""volumeCalibrationCoefficientK"":-1,""settlingTime"":-1,""transportVolume"":-1,""transportVolumePmVCpyId"":-1,""mixPmVCpyId"":-1,""jetPmVCpyId"":-1,""distributePmVCpyId"":-1,""mark"":-1},{""plldPmVCpyId"":-1,""plldThreshold"":-1,""plldZmVel"":-1,""plldInvasionDepth"":0,""emptyTipPmVCpyId"":-1,""blowoutAirVolume"":-1,""blowoutAirPmVCpyId"":-1,""overAspiratedVolume"":-1,""overAspiratedPmVCpyId"":-1,""aspirationPmVCpyIdLow"":-1,""aspirationPmVCpyIdHigh"":-1,""aspirationVolumeBreakVal"":-1,""volumeCalibrationCoefficientB"":-1,""volumeCalibrationCoefficientK"":-1,""settlingTime"":-1,""transportVolume"":-1,""transportVolumePmVCpyId"":-1,""mixPmVCpyId"":-1,""jetPmVCpyId"":-1,""distributePmVCpyId"":-1,""mark"":-1},{""plldPmVCpyId"":-1,""plldThreshold"":-1,""plldZmVel"":-1,""plldInvasionDepth"":0,""emptyTipPmVCpyId"":-1,""blowoutAirVolume"":-1,""blowoutAirPmVCpyId"":-1,""overAspiratedVolume"":-1,""overAspiratedPmVCpyId"":-1,""aspirationPmVCpyIdLow"":-1,""aspirationPmVCpyIdHigh"":-1,""aspirationVolumeBreakVal"":-1,""volumeCalibrationCoefficientB"":-1,""volumeCalibrationCoefficientK"":-1,""settlingTime"":-1,""transportVolume"":-1,""transportVolumePmVCpyId"":-1,""mixPmVCpyId"":-1,""jetPmVCpyId"":-1,""distributePmVCpyId"":-1,""mark"":-1},{""plldPmVCpyId"":-1,""plldThreshold"":-1,""plldZmVel"":-1,""plldInvasionDepth"":0,""emptyTipPmVCpyId"":-1,""blowoutAirVolume"":-1,""blowoutAirPmVCpyId"":-1,""overAspiratedVolume"":-1,""overAspiratedPmVCpyId"":-1,""aspirationPmVCpyIdLow"":-1,""aspirationPmVCpyIdHigh"":-1,""aspirationVolumeBreakVal"":-1,""volumeCalibrationCoefficientB"":-1,""volumeCalibrationCoefficientK"":-1,""settlingTime"":-1,""transportVolume"":-1,""transportVolumePmVCpyId"":-1,""mixPmVCpyId"":-1,""jetPmVCpyId"":-1,""distributePmVCpyId"":-1,""mark"":-1}],""zmVCfgs"":[{""vstart"":100,""a1"":50,""amax"":100,""v1"":200,""dmax"":100,""d1"":30,""vstop"":50,""vmax"":1300,""mark"":9973},{""vstart"":-1,""a1"":-1,""amax"":-1,""v1"":-1,""dmax"":-1,""d1"":-1,""vstop"":-1,""vmax"":600,""mark"":-1},{""vstart"":0,""a1"":-1,""amax"":-1,""v1"":100,""dmax"":-1,""d1"":-1,""vstop"":100,""vmax"":100,""mark"":-1},{""vstart"":200,""a1"":-1,""amax"":-1,""v1"":200,""dmax"":-1,""d1"":-1,""vstop"":40,""vmax"":200,""mark"":-1},{""vstart"":0,""a1"":-1,""amax"":-1,""v1"":150,""dmax"":-1,""d1"":-1,""vstop"":150,""vmax"":150,""mark"":-1},{""vstart"":-1,""a1"":-1,""amax"":-1,""v1"":-1,""dmax"":-1,""d1"":-1,""vstop"":300,""vmax"":50,""mark"":-1},{""vstart"":-1,""a1"":-1,""amax"":-1,""v1"":-1,""dmax"":-1,""d1"":-1,""vstop"":-1,""vmax"":100,""mark"":-1}],""pmVCfgs"":[{""acc"":14,""dec"":14,""vStart"":10,""vStop"":50,""vMax"":2500,""mark"":9973},{""acc"":-1,""dec"":-1,""vStart"":0,""vStop"":319,""vMax"":50,""mark"":-1},{""acc"":-1,""dec"":-1,""vStart"":0,""vStop"":319,""vMax"":100,""mark"":-1},{""acc"":-1,""dec"":-1,""vStart"":0,""vStop"":319,""vMax"":100,""mark"":-1},{""acc"":-1,""dec"":-1,""vStart"":-1,""vStop"":-1,""vMax"":1000,""mark"":-1},{""acc"":-1,""dec"":-1,""vStart"":-1,""vStop"":-1,""vMax"":2000,""mark"":-1},{""acc"":-1,""dec"":-1,""vStart"":-1,""vStop"":-1,""vMax"":2550,""mark"":-1},{""acc"":1,""dec"":1,""vStart"":0,""vStop"":10,""vMax"":40,""mark"":-1}]}" \ No newline at end of file diff --git a/bak/device0/20250713/zapp_sub_module_reg_initial_value.csv b/bak/device0/20250713/zapp_sub_module_reg_initial_value.csv new file mode 100644 index 0000000..fb9157e --- /dev/null +++ b/bak/device0/20250713/zapp_sub_module_reg_initial_value.csv @@ -0,0 +1,530 @@ +id,mid,regIndex,regInitVal +1,HbotM,kreg_xyrobot_robot_type,0 +2,HbotM,kreg_xyrobot_one_circle_pulse,73000 +3,HbotM,kreg_xyrobot_one_circle_pulse_denominator,10 +4,HbotM,kreg_xyrobot_ihold,10 +5,HbotM,kreg_xyrobot_irun,31 +6,HbotM,kreg_xyrobot_iholddelay,100 +7,HbotM,kreg_xyrobot_iglobalscaler,128 +8,HbotM,kreg_xyrobot_vstart,1 +9,HbotM,kreg_xyrobot_a1,5 +10,HbotM,kreg_xyrobot_amax,10 +11,HbotM,kreg_xyrobot_v1,100 +12,HbotM,kreg_xyrobot_dmax,10 +13,HbotM,kreg_xyrobot_d1,5 +14,HbotM,kreg_xyrobot_vstop,1 +15,HbotM,kreg_xyrobot_tzerowait,300 +16,HbotM,kreg_xyrobot_enc_resolution,1000 +17,HbotM,kreg_xyrobot_enable_enc,1 +18,HbotM,kreg_xyrobot_x_shaft,0 +19,HbotM,kreg_xyrobot_y_shaft,1 +20,HbotM,kreg_xyrobot_min_x,-2000 +21,HbotM,kreg_xyrobot_min_y,-2000 +22,HbotM,kreg_xyrobot_max_x,58140 +23,HbotM,kreg_xyrobot_max_y,42580 +24,HbotM,kreg_xyrobot_run_to_zero_speed,60 +25,HbotM,kreg_xyrobot_look_zero_edge_speed,10 +26,HbotM,kreg_xyrobot_shift_x,-90 +27,HbotM,kreg_xyrobot_shift_y,62 +28,HbotM,kreg_xyrobot_pos_devi_tolerance,200 +29,HbotM,kreg_xyrobot_io_trigger_append_distance,10 +30,HbotM,kreg_xyrobot_default_velocity,800 +31,PlatesBoxYM,kreg_step_motor_shaft,1 +32,PlatesBoxYM,kreg_step_motor_one_circle_pulse,60 +33,PlatesBoxYM,kreg_step_motor_one_circle_pulse_denominator,1 +34,PlatesBoxYM,kreg_step_motor_default_velocity,800 +35,PlatesBoxYM,kreg_step_motor_ihold,4 +36,PlatesBoxYM,kreg_step_motor_irun,5 +37,PlatesBoxYM,kreg_step_motor_iholddelay,100 +38,PlatesBoxYM,kreg_step_motor_iglobalscaler,0 +39,PlatesBoxYM,kreg_step_motor_mres,0 +40,PlatesBoxYM,kreg_step_motor_run_to_zero_speed,300 +41,PlatesBoxYM,kreg_step_motor_look_zero_edge_speed,100 +42,PlatesBoxYM,kreg_step_motor_max_d,0 +43,PlatesBoxYM,kreg_step_motor_min_d,0 +44,PlatesBoxYM,kreg_step_motor_in_debug_mode,0 +45,PlatesBoxYM,kreg_step_motor_vstart,100 +46,PlatesBoxYM,kreg_step_motor_a1,15 +47,PlatesBoxYM,kreg_step_motor_amax,30 +48,PlatesBoxYM,kreg_step_motor_v1,300 +49,PlatesBoxYM,kreg_step_motor_dmax,30 +50,PlatesBoxYM,kreg_step_motor_d1,15 +51,PlatesBoxYM,kreg_step_motor_vstop,100 +52,PlatesBoxYM,kreg_step_motor_tzerowait,0 +53,PlatesBoxYM,kreg_step_motor_enc_resolution,0 +54,PlatesBoxYM,kreg_step_motor_enable_enc,0 +55,PlatesBoxYM,kreg_step_motor_dzero_pos,0 +56,PlatesBoxYM,kret_step_motor_pos_devi_tolerance,5 +57,PlatesBoxYM,kret_step_motor_io_trigger_append_distance,10 +58,PlatesBoxPusherM,kreg_step_motor_shaft,1 +59,PlatesBoxPusherM,kreg_step_motor_one_circle_pulse,80 +60,PlatesBoxPusherM,kreg_step_motor_one_circle_pulse_denominator,1 +61,PlatesBoxPusherM,kreg_step_motor_default_velocity,1200 +62,PlatesBoxPusherM,kreg_step_motor_ihold,4 +63,PlatesBoxPusherM,kreg_step_motor_irun,9 +64,PlatesBoxPusherM,kreg_step_motor_iholddelay,100 +65,PlatesBoxPusherM,kreg_step_motor_iglobalscaler,0 +66,PlatesBoxPusherM,kreg_step_motor_mres,0 +67,PlatesBoxPusherM,kreg_step_motor_run_to_zero_speed,500 +68,PlatesBoxPusherM,kreg_step_motor_look_zero_edge_speed,50 +69,PlatesBoxPusherM,kreg_step_motor_max_d,0 +70,PlatesBoxPusherM,kreg_step_motor_min_d,0 +71,PlatesBoxPusherM,kreg_step_motor_in_debug_mode,0 +72,PlatesBoxPusherM,kreg_step_motor_vstart,100 +73,PlatesBoxPusherM,kreg_step_motor_a1,50 +74,PlatesBoxPusherM,kreg_step_motor_amax,300 +75,PlatesBoxPusherM,kreg_step_motor_v1,300 +76,PlatesBoxPusherM,kreg_step_motor_dmax,300 +77,PlatesBoxPusherM,kreg_step_motor_d1,50 +78,PlatesBoxPusherM,kreg_step_motor_vstop,100 +79,PlatesBoxPusherM,kreg_step_motor_tzerowait,0 +80,PlatesBoxPusherM,kreg_step_motor_enc_resolution,0 +81,PlatesBoxPusherM,kreg_step_motor_enable_enc,0 +82,PlatesBoxPusherM,kreg_step_motor_dzero_pos,0 +83,PlatesBoxPusherM,kret_step_motor_pos_devi_tolerance,5 +84,PlatesBoxPusherM,kret_step_motor_io_trigger_append_distance,3 +85,ShakeModClampingM,kreg_step_motor_shaft,0 +86,ShakeModClampingM,kreg_step_motor_one_circle_pulse,15 +87,ShakeModClampingM,kreg_step_motor_one_circle_pulse_denominator,1 +88,ShakeModClampingM,kreg_step_motor_default_velocity,1200 +89,ShakeModClampingM,kreg_step_motor_ihold,10 +90,ShakeModClampingM,kreg_step_motor_irun,31 +91,ShakeModClampingM,kreg_step_motor_iholddelay,10 +92,ShakeModClampingM,kreg_step_motor_iglobalscaler,0 +93,ShakeModClampingM,kreg_step_motor_mres,0 +94,ShakeModClampingM,kreg_step_motor_run_to_zero_speed,300 +95,ShakeModClampingM,kreg_step_motor_look_zero_edge_speed,100 +96,ShakeModClampingM,kreg_step_motor_max_d,0 +97,ShakeModClampingM,kreg_step_motor_min_d,0 +98,ShakeModClampingM,kreg_step_motor_in_debug_mode,0 +99,ShakeModClampingM,kreg_step_motor_vstart,100 +100,ShakeModClampingM,kreg_step_motor_a1,50 +101,ShakeModClampingM,kreg_step_motor_amax,300 +102,ShakeModClampingM,kreg_step_motor_v1,300 +103,ShakeModClampingM,kreg_step_motor_dmax,300 +104,ShakeModClampingM,kreg_step_motor_d1,50 +105,ShakeModClampingM,kreg_step_motor_vstop,100 +106,ShakeModClampingM,kreg_step_motor_tzerowait,0 +107,ShakeModClampingM,kreg_step_motor_enc_resolution,0 +108,ShakeModClampingM,kreg_step_motor_enable_enc,0 +109,ShakeModClampingM,kreg_step_motor_dzero_pos,0 +110,ShakeModClampingM,kret_step_motor_pos_devi_tolerance,5 +111,ShakeModClampingM,kret_step_motor_io_trigger_append_distance,4 +112,ShakeModGripperZM,kreg_step_motor_shaft,0 +113,ShakeModGripperZM,kreg_step_motor_one_circle_pulse,200 +114,ShakeModGripperZM,kreg_step_motor_one_circle_pulse_denominator,1 +115,ShakeModGripperZM,kreg_step_motor_default_velocity,500 +116,ShakeModGripperZM,kreg_step_motor_ihold,7 +117,ShakeModGripperZM,kreg_step_motor_irun,12 +118,ShakeModGripperZM,kreg_step_motor_iholddelay,10 +119,ShakeModGripperZM,kreg_step_motor_iglobalscaler,0 +120,ShakeModGripperZM,kreg_step_motor_mres,0 +121,ShakeModGripperZM,kreg_step_motor_run_to_zero_speed,70 +122,ShakeModGripperZM,kreg_step_motor_look_zero_edge_speed,20 +123,ShakeModGripperZM,kreg_step_motor_max_d,0 +124,ShakeModGripperZM,kreg_step_motor_min_d,0 +125,ShakeModGripperZM,kreg_step_motor_in_debug_mode,0 +126,ShakeModGripperZM,kreg_step_motor_vstart,20 +127,ShakeModGripperZM,kreg_step_motor_a1,20 +128,ShakeModGripperZM,kreg_step_motor_amax,50 +129,ShakeModGripperZM,kreg_step_motor_v1,50 +130,ShakeModGripperZM,kreg_step_motor_dmax,50 +131,ShakeModGripperZM,kreg_step_motor_d1,20 +132,ShakeModGripperZM,kreg_step_motor_vstop,20 +133,ShakeModGripperZM,kreg_step_motor_tzerowait,0 +134,ShakeModGripperZM,kreg_step_motor_enc_resolution,0 +135,ShakeModGripperZM,kreg_step_motor_enable_enc,0 +136,ShakeModGripperZM,kreg_step_motor_dzero_pos,0 +137,ShakeModGripperZM,kret_step_motor_pos_devi_tolerance,20 +138,ShakeModGripperZM,kret_step_motor_io_trigger_append_distance,20 +139,ShakeModShakeM,kreg_step_motor_shaft,1 +140,ShakeModShakeM,kreg_step_motor_one_circle_pulse,120 +141,ShakeModShakeM,kreg_step_motor_one_circle_pulse_denominator,1 +142,ShakeModShakeM,kreg_step_motor_default_velocity,600 +143,ShakeModShakeM,kreg_step_motor_ihold,10 +144,ShakeModShakeM,kreg_step_motor_irun,31 +145,ShakeModShakeM,kreg_step_motor_iholddelay,10 +146,ShakeModShakeM,kreg_step_motor_iglobalscaler,0 +147,ShakeModShakeM,kreg_step_motor_mres,2 +148,ShakeModShakeM,kreg_step_motor_run_to_zero_speed,100 +149,ShakeModShakeM,kreg_step_motor_look_zero_edge_speed,50 +150,ShakeModShakeM,kreg_step_motor_max_d,0 +151,ShakeModShakeM,kreg_step_motor_min_d,0 +152,ShakeModShakeM,kreg_step_motor_in_debug_mode,0 +153,ShakeModShakeM,kreg_step_motor_vstart,50 +154,ShakeModShakeM,kreg_step_motor_a1,300 +155,ShakeModShakeM,kreg_step_motor_amax,600 +156,ShakeModShakeM,kreg_step_motor_v1,200 +157,ShakeModShakeM,kreg_step_motor_dmax,600 +158,ShakeModShakeM,kreg_step_motor_d1,300 +159,ShakeModShakeM,kreg_step_motor_vstop,100 +160,ShakeModShakeM,kreg_step_motor_tzerowait,100 +161,ShakeModShakeM,kreg_step_motor_enc_resolution,0 +162,ShakeModShakeM,kreg_step_motor_enable_enc,0 +163,ShakeModShakeM,kreg_step_motor_dzero_pos,0 +164,ShakeModShakeM,kret_step_motor_pos_devi_tolerance,5 +165,ShakeModShakeM,kret_step_motor_io_trigger_append_distance,10 +166,ShakeModGripperYSV,kreg_mini_servo_pos,115 +167,ShakeModGripperYSV,kreg_mini_servo_limit_velocity,10000 +168,ShakeModGripperYSV,kreg_mini_servo_limit_torque,450 +169,ShakeModGripperYSV,kreg_mini_servo_protective_torque,900 +170,ShakeModGripperYSV,kreg_mini_servo_target_pos_tolerance,15 +171,ShakeModGripperSV,kreg_mini_servo_pos,1503 +172,ShakeModGripperSV,kreg_mini_servo_limit_velocity,10000 +173,ShakeModGripperSV,kreg_mini_servo_limit_torque,500 +174,ShakeModGripperSV,kreg_mini_servo_protective_torque,800 +175,ShakeModGripperSV,kreg_mini_servo_target_pos_tolerance,15 +176,ShakeModTubeScanerClampingSV,kreg_mini_servo_pos,1800 +177,ShakeModTubeScanerClampingSV,kreg_mini_servo_limit_velocity,10000 +178,ShakeModTubeScanerClampingSV,kreg_mini_servo_limit_torque,300 +179,ShakeModTubeScanerClampingSV,kreg_mini_servo_protective_torque,800 +180,ShakeModTubeScanerClampingSV,kreg_mini_servo_target_pos_tolerance,15 +181,ShakeModTubeScanerRotateSV,kreg_mini_servo_pos,2666 +182,ShakeModTubeScanerRotateSV,kreg_mini_servo_limit_velocity,10000 +183,ShakeModTubeScanerRotateSV,kreg_mini_servo_limit_torque,300 +184,ShakeModTubeScanerRotateSV,kreg_mini_servo_protective_torque,800 +185,ShakeModTubeScanerRotateSV,kreg_mini_servo_target_pos_tolerance,15 +186,ShakeModLiftingSV,kreg_mini_servo_pos,642 +187,ShakeModLiftingSV,kreg_mini_servo_limit_velocity,800 +188,ShakeModLiftingSV,kreg_mini_servo_limit_torque,100 +189,ShakeModLiftingSV,kreg_mini_servo_protective_torque,800 +190,ShakeModLiftingSV,kreg_mini_servo_target_pos_tolerance,30 +191,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_target,250 +192,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_nowoutput,0 +193,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_feedbackval,267 +194,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_kp,6000 +195,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_ki,100 +196,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_kd,0 +197,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_max_output,100 +198,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_min_output,-100 +199,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_max_integral,150 +200,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_min_integral,-150 +201,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_compute_interval,9000 +202,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_target,250 +203,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_nowoutput,0 +204,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_feedbackval,269 +205,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_kp,6000 +206,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_ki,100 +207,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_kd,0 +208,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_max_output,100 +209,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_min_output,-100 +210,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_max_integral,150 +211,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_min_integral,-150 +212,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_compute_interval,9000 +213,FeedingModInfeedM,kreg_step_motor_shaft,0 +214,FeedingModInfeedM,kreg_step_motor_one_circle_pulse,15 +215,FeedingModInfeedM,kreg_step_motor_one_circle_pulse_denominator,1 +216,FeedingModInfeedM,kreg_step_motor_default_velocity,150 +217,FeedingModInfeedM,kreg_step_motor_ihold,3 +218,FeedingModInfeedM,kreg_step_motor_irun,31 +219,FeedingModInfeedM,kreg_step_motor_iholddelay,10 +220,FeedingModInfeedM,kreg_step_motor_iglobalscaler,0 +221,FeedingModInfeedM,kreg_step_motor_mres,0 +222,FeedingModInfeedM,kreg_step_motor_run_to_zero_speed,0 +223,FeedingModInfeedM,kreg_step_motor_look_zero_edge_speed,0 +224,FeedingModInfeedM,kreg_step_motor_max_d,0 +225,FeedingModInfeedM,kreg_step_motor_min_d,0 +226,FeedingModInfeedM,kreg_step_motor_in_debug_mode,0 +227,FeedingModInfeedM,kreg_step_motor_vstart,100 +228,FeedingModInfeedM,kreg_step_motor_a1,10 +229,FeedingModInfeedM,kreg_step_motor_amax,10 +230,FeedingModInfeedM,kreg_step_motor_v1,300 +231,FeedingModInfeedM,kreg_step_motor_dmax,2 +232,FeedingModInfeedM,kreg_step_motor_d1,2 +233,FeedingModInfeedM,kreg_step_motor_vstop,100 +234,FeedingModInfeedM,kreg_step_motor_tzerowait,0 +235,FeedingModInfeedM,kreg_step_motor_enc_resolution,0 +236,FeedingModInfeedM,kreg_step_motor_enable_enc,0 +237,FeedingModInfeedM,kreg_step_motor_dzero_pos,0 +238,FeedingModInfeedM,kret_step_motor_pos_devi_tolerance,0 +239,FeedingModInfeedM,kret_step_motor_io_trigger_append_distance,0 +240,FeedingModXM,kreg_step_motor_shaft,0 +241,FeedingModXM,kreg_step_motor_one_circle_pulse,100 +242,FeedingModXM,kreg_step_motor_one_circle_pulse_denominator,1 +243,FeedingModXM,kreg_step_motor_default_velocity,1100 +244,FeedingModXM,kreg_step_motor_ihold,3 +245,FeedingModXM,kreg_step_motor_irun,8 +246,FeedingModXM,kreg_step_motor_iholddelay,10 +247,FeedingModXM,kreg_step_motor_iglobalscaler,0 +248,FeedingModXM,kreg_step_motor_mres,0 +249,FeedingModXM,kreg_step_motor_run_to_zero_speed,600 +250,FeedingModXM,kreg_step_motor_look_zero_edge_speed,100 +251,FeedingModXM,kreg_step_motor_max_d,0 +252,FeedingModXM,kreg_step_motor_min_d,0 +253,FeedingModXM,kreg_step_motor_in_debug_mode,0 +254,FeedingModXM,kreg_step_motor_vstart,50 +255,FeedingModXM,kreg_step_motor_a1,150 +256,FeedingModXM,kreg_step_motor_amax,150 +257,FeedingModXM,kreg_step_motor_v1,400 +258,FeedingModXM,kreg_step_motor_dmax,150 +259,FeedingModXM,kreg_step_motor_d1,150 +260,FeedingModXM,kreg_step_motor_vstop,50 +261,FeedingModXM,kreg_step_motor_tzerowait,0 +262,FeedingModXM,kreg_step_motor_enc_resolution,0 +263,FeedingModXM,kreg_step_motor_enable_enc,0 +264,FeedingModXM,kreg_step_motor_dzero_pos,0 +265,FeedingModXM,kret_step_motor_pos_devi_tolerance,5 +266,FeedingModXM,kret_step_motor_io_trigger_append_distance,10 +267,FeedingModOutfeedM,kreg_step_motor_shaft,1 +268,FeedingModOutfeedM,kreg_step_motor_one_circle_pulse,15 +269,FeedingModOutfeedM,kreg_step_motor_one_circle_pulse_denominator,1 +270,FeedingModOutfeedM,kreg_step_motor_default_velocity,150 +271,FeedingModOutfeedM,kreg_step_motor_ihold,3 +272,FeedingModOutfeedM,kreg_step_motor_irun,31 +273,FeedingModOutfeedM,kreg_step_motor_iholddelay,10 +274,FeedingModOutfeedM,kreg_step_motor_iglobalscaler,0 +275,FeedingModOutfeedM,kreg_step_motor_mres,0 +276,FeedingModOutfeedM,kreg_step_motor_run_to_zero_speed,0 +277,FeedingModOutfeedM,kreg_step_motor_look_zero_edge_speed,0 +278,FeedingModOutfeedM,kreg_step_motor_max_d,0 +279,FeedingModOutfeedM,kreg_step_motor_min_d,0 +280,FeedingModOutfeedM,kreg_step_motor_in_debug_mode,0 +281,FeedingModOutfeedM,kreg_step_motor_vstart,100 +282,FeedingModOutfeedM,kreg_step_motor_a1,10 +283,FeedingModOutfeedM,kreg_step_motor_amax,10 +284,FeedingModOutfeedM,kreg_step_motor_v1,300 +285,FeedingModOutfeedM,kreg_step_motor_dmax,2 +286,FeedingModOutfeedM,kreg_step_motor_d1,2 +287,FeedingModOutfeedM,kreg_step_motor_vstop,100 +288,FeedingModOutfeedM,kreg_step_motor_tzerowait,0 +289,FeedingModOutfeedM,kreg_step_motor_enc_resolution,0 +290,FeedingModOutfeedM,kreg_step_motor_enable_enc,0 +291,FeedingModOutfeedM,kreg_step_motor_dzero_pos,0 +292,FeedingModOutfeedM,kret_step_motor_pos_devi_tolerance,0 +293,FeedingModOutfeedM,kret_step_motor_io_trigger_append_distance,0 +294,IncubatorRotateCtrlM,kreg_step_motor_shaft,1 +295,IncubatorRotateCtrlM,kreg_step_motor_one_circle_pulse,400 +296,IncubatorRotateCtrlM,kreg_step_motor_one_circle_pulse_denominator,1 +297,IncubatorRotateCtrlM,kreg_step_motor_default_velocity,1200 +298,IncubatorRotateCtrlM,kreg_step_motor_ihold,20 +299,IncubatorRotateCtrlM,kreg_step_motor_irun,31 +300,IncubatorRotateCtrlM,kreg_step_motor_iholddelay,100 +301,IncubatorRotateCtrlM,kreg_step_motor_iglobalscaler,64 +302,IncubatorRotateCtrlM,kreg_step_motor_mres,0 +303,IncubatorRotateCtrlM,kreg_step_motor_run_to_zero_speed,300 +304,IncubatorRotateCtrlM,kreg_step_motor_look_zero_edge_speed,300 +305,IncubatorRotateCtrlM,kreg_step_motor_max_d,0 +306,IncubatorRotateCtrlM,kreg_step_motor_min_d,0 +307,IncubatorRotateCtrlM,kreg_step_motor_in_debug_mode,0 +308,IncubatorRotateCtrlM,kreg_step_motor_vstart,100 +309,IncubatorRotateCtrlM,kreg_step_motor_a1,30 +310,IncubatorRotateCtrlM,kreg_step_motor_amax,30 +311,IncubatorRotateCtrlM,kreg_step_motor_v1,300 +312,IncubatorRotateCtrlM,kreg_step_motor_dmax,30 +313,IncubatorRotateCtrlM,kreg_step_motor_d1,30 +314,IncubatorRotateCtrlM,kreg_step_motor_vstop,100 +315,IncubatorRotateCtrlM,kreg_step_motor_tzerowait,100 +316,IncubatorRotateCtrlM,kreg_step_motor_enc_resolution,1000 +317,IncubatorRotateCtrlM,kreg_step_motor_enable_enc,1 +318,IncubatorRotateCtrlM,kreg_step_motor_dzero_pos,0 +319,IncubatorRotateCtrlM,kret_step_motor_pos_devi_tolerance,30 +320,IncubatorRotateCtrlM,kret_step_motor_io_trigger_append_distance,10 +327,PipetteMod,kreg_pipette_zm_shaft,0 +328,PipetteMod,kreg_pipette_zm_one_circle_pulse,80 +329,PipetteMod,kreg_pipette_zm_one_circle_pulse_denominator,1 +330,PipetteMod,kreg_pipette_zm_default_velocity,1200 +331,PipetteMod,kreg_pipette_zm_ihold,7 +332,PipetteMod,kreg_pipette_zm_irun,7 +333,PipetteMod,kreg_pipette_zm_iholddelay,10 +334,PipetteMod,kreg_pipette_zm_iglobalscaler,0 +335,PipetteMod,kreg_pipette_zm_run_to_zero_speed,600 +336,PipetteMod,kreg_pipette_zm_look_zero_edge_speed,100 +337,PipetteMod,kreg_pipette_zm_max_d,0 +338,PipetteMod,kreg_pipette_zm_min_d,0 +339,PipetteMod,kreg_pipette_zm_vstart,30 +340,PipetteMod,kreg_pipette_zm_a1,200 +341,PipetteMod,kreg_pipette_zm_amax,600 +342,PipetteMod,kreg_pipette_zm_v1,500 +343,PipetteMod,kreg_pipette_zm_dmax,600 +344,PipetteMod,kreg_pipette_zm_d1,200 +345,PipetteMod,kreg_pipette_zm_vstop,30 +346,PipetteMod,kreg_pipette_zm_tzerowait,0 +347,PipetteMod,kreg_pipette_zm_enc_resolution,0 +348,PipetteMod,kreg_pipette_zm_enable_enc,0 +349,PipetteMod,kreg_pipette_zm_dzero,92 +350,OptModScannerM,kreg_step_motor_shaft,1 +351,OptModScannerM,kreg_step_motor_one_circle_pulse,1574803 +352,OptModScannerM,kreg_step_motor_one_circle_pulse_denominator,10000 +353,OptModScannerM,kreg_step_motor_default_velocity,1100 +354,OptModScannerM,kreg_step_motor_ihold,3 +355,OptModScannerM,kreg_step_motor_irun,14 +356,OptModScannerM,kreg_step_motor_iholddelay,1000 +357,OptModScannerM,kreg_step_motor_iglobalscaler,0 +358,OptModScannerM,kreg_step_motor_mres,2 +359,OptModScannerM,kreg_step_motor_run_to_zero_speed,600 +360,OptModScannerM,kreg_step_motor_look_zero_edge_speed,100 +361,OptModScannerM,kreg_step_motor_max_d,0 +362,OptModScannerM,kreg_step_motor_min_d,0 +363,OptModScannerM,kreg_step_motor_in_debug_mode,0 +364,OptModScannerM,kreg_step_motor_vstart,300 +365,OptModScannerM,kreg_step_motor_a1,200 +366,OptModScannerM,kreg_step_motor_amax,500 +367,OptModScannerM,kreg_step_motor_v1,800 +368,OptModScannerM,kreg_step_motor_dmax,500 +369,OptModScannerM,kreg_step_motor_d1,200 +370,OptModScannerM,kreg_step_motor_vstop,300 +371,OptModScannerM,kreg_step_motor_tzerowait,0 +372,OptModScannerM,kreg_step_motor_enc_resolution,0 +373,OptModScannerM,kreg_step_motor_enable_enc,0 +374,OptModScannerM,kreg_step_motor_dzero_pos,0 +375,OptModScannerM,kret_step_motor_pos_devi_tolerance,100 +376,OptModScannerM,kret_step_motor_io_trigger_append_distance,10 +377,OptModPullM,kreg_step_motor_shaft,0 +378,OptModPullM,kreg_step_motor_one_circle_pulse,80 +379,OptModPullM,kreg_step_motor_one_circle_pulse_denominator,1 +380,OptModPullM,kreg_step_motor_default_velocity,1100 +381,OptModPullM,kreg_step_motor_ihold,6 +382,OptModPullM,kreg_step_motor_irun,8 +383,OptModPullM,kreg_step_motor_iholddelay,1000 +384,OptModPullM,kreg_step_motor_iglobalscaler,0 +385,OptModPullM,kreg_step_motor_mres,1 +386,OptModPullM,kreg_step_motor_run_to_zero_speed,500 +387,OptModPullM,kreg_step_motor_look_zero_edge_speed,200 +388,OptModPullM,kreg_step_motor_max_d,0 +389,OptModPullM,kreg_step_motor_min_d,0 +390,OptModPullM,kreg_step_motor_in_debug_mode,0 +391,OptModPullM,kreg_step_motor_vstart,100 +392,OptModPullM,kreg_step_motor_a1,100 +393,OptModPullM,kreg_step_motor_amax,300 +394,OptModPullM,kreg_step_motor_v1,800 +395,OptModPullM,kreg_step_motor_dmax,300 +396,OptModPullM,kreg_step_motor_d1,100 +397,OptModPullM,kreg_step_motor_vstop,100 +398,OptModPullM,kreg_step_motor_tzerowait,100 +399,OptModPullM,kreg_step_motor_enc_resolution,0 +400,OptModPullM,kreg_step_motor_enable_enc,0 +401,OptModPullM,kreg_step_motor_dzero_pos,0 +402,OptModPullM,kret_step_motor_pos_devi_tolerance,30 +403,OptModPullM,kret_step_motor_io_trigger_append_distance,10 +404,OptMod,kreg_a8k_opt_t_pos_offset,3508 +405,OptMod,kreg_a8k_opt_f_pos_offset,2800 +406,OptMod,kreg_a8k_opt_t_reverse_scan_pos_offset,2308 +407,OptMod,kreg_a8k_opt_f_reverse_scan_pos_offset,1600 +408,OptMod,kreg_a8k_opt_scan_step_interval,1 +409,OptMod,kreg_a8k_opt_scan_pointnum,1200 +419,PipetteMod,kreg_pipette_zm_pos_devi_tolerance,20 +420,PipetteMod,kreg_pipette_zm_io_trigger_append_distance,20 +421,PipetteMod,kreg_pipette_zm_mres,0 +422,PlatesBoxYM,kreg_step_motor_low_velocity,0 +423,PlatesBoxYM,kreg_step_motor_mid_velocity,0 +424,PlatesBoxYM,kreg_step_motor_high_velocity,0 +425,PlatesBoxPusherM,kreg_step_motor_low_velocity,0 +426,PlatesBoxPusherM,kreg_step_motor_mid_velocity,0 +427,PlatesBoxPusherM,kreg_step_motor_high_velocity,0 +428,ShakeModClampingM,kreg_step_motor_low_velocity,0 +429,ShakeModClampingM,kreg_step_motor_mid_velocity,0 +430,ShakeModClampingM,kreg_step_motor_high_velocity,0 +431,ShakeModGripperZM,kreg_step_motor_low_velocity,100 +432,ShakeModGripperZM,kreg_step_motor_mid_velocity,500 +433,ShakeModGripperZM,kreg_step_motor_high_velocity,500 +434,ShakeModShakeM,kreg_step_motor_low_velocity,0 +435,ShakeModShakeM,kreg_step_motor_mid_velocity,0 +436,ShakeModShakeM,kreg_step_motor_high_velocity,0 +437,FeedingModInfeedM,kreg_step_motor_low_velocity,0 +438,FeedingModInfeedM,kreg_step_motor_mid_velocity,0 +439,FeedingModInfeedM,kreg_step_motor_high_velocity,0 +440,FeedingModXM,kreg_step_motor_low_velocity,0 +441,FeedingModXM,kreg_step_motor_mid_velocity,0 +442,FeedingModXM,kreg_step_motor_high_velocity,0 +443,FeedingModOutfeedM,kreg_step_motor_low_velocity,0 +444,FeedingModOutfeedM,kreg_step_motor_mid_velocity,0 +445,FeedingModOutfeedM,kreg_step_motor_high_velocity,0 +446,IncubatorRotateCtrlM,kreg_step_motor_low_velocity,0 +447,IncubatorRotateCtrlM,kreg_step_motor_mid_velocity,0 +448,IncubatorRotateCtrlM,kreg_step_motor_high_velocity,0 +449,OptModScannerM,kreg_step_motor_low_velocity,0 +450,OptModScannerM,kreg_step_motor_mid_velocity,0 +451,OptModScannerM,kreg_step_motor_high_velocity,0 +452,OptModPullM,kreg_step_motor_low_velocity,0 +453,OptModPullM,kreg_step_motor_mid_velocity,0 +454,OptModPullM,kreg_step_motor_high_velocity,0 +455,ShakeModGripperYSV,kreg_mini_servo_servo_min_angle,0 +456,ShakeModGripperYSV,kreg_mini_servo_servo_max_angle,4095 +457,ShakeModGripperYSV,kreg_mini_servo_servo_max_temp,70 +458,ShakeModGripperYSV,kreg_mini_servo_servo_max_voltage,90 +459,ShakeModGripperYSV,kreg_mini_servo_servo_min_voltage,35 +460,ShakeModGripperYSV,kreg_mini_servo_servo_max_torque,1000 +461,ShakeModGripperYSV,kreg_mini_servo_servo_unload_condition,44 +462,ShakeModGripperYSV,kreg_mini_servo_servo_protect_current,500 +463,ShakeModGripperYSV,kreg_mini_servo_servo_protect_torque,20 +464,ShakeModGripperYSV,kreg_mini_servo_servo_protect_time,200 +465,ShakeModGripperYSV,kreg_mini_servo_servo_overload_torque,80 +466,ShakeModGripperYSV,kreg_mini_servo_servo_acc,0 +467,ShakeModGripperSV,kreg_mini_servo_servo_min_angle,0 +468,ShakeModGripperSV,kreg_mini_servo_servo_max_angle,4095 +469,ShakeModGripperSV,kreg_mini_servo_servo_max_temp,70 +470,ShakeModGripperSV,kreg_mini_servo_servo_max_voltage,90 +471,ShakeModGripperSV,kreg_mini_servo_servo_min_voltage,40 +472,ShakeModGripperSV,kreg_mini_servo_servo_max_torque,1000 +473,ShakeModGripperSV,kreg_mini_servo_servo_unload_condition,44 +474,ShakeModGripperSV,kreg_mini_servo_servo_protect_current,500 +475,ShakeModGripperSV,kreg_mini_servo_servo_protect_torque,20 +476,ShakeModGripperSV,kreg_mini_servo_servo_protect_time,200 +477,ShakeModGripperSV,kreg_mini_servo_servo_overload_torque,80 +478,ShakeModGripperSV,kreg_mini_servo_servo_acc,0 +479,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_min_angle,0 +480,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_max_angle,4095 +481,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_max_temp,70 +482,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_max_voltage,90 +483,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_min_voltage,40 +484,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_max_torque,1000 +485,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_unload_condition,44 +486,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_protect_current,500 +487,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_protect_torque,20 +488,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_protect_time,200 +489,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_overload_torque,80 +490,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_acc,0 +491,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_min_angle,0 +492,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_max_angle,0 +493,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_max_temp,70 +494,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_max_voltage,90 +495,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_min_voltage,45 +496,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_max_torque,1000 +497,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_unload_condition,32 +498,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_protect_current,256 +499,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_protect_torque,0 +500,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_protect_time,0 +501,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_overload_torque,0 +502,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_acc,0 +503,ShakeModLiftingSV,kreg_mini_servo_servo_min_angle,20 +504,ShakeModLiftingSV,kreg_mini_servo_servo_max_angle,1003 +505,ShakeModLiftingSV,kreg_mini_servo_servo_max_temp,70 +506,ShakeModLiftingSV,kreg_mini_servo_servo_max_voltage,90 +507,ShakeModLiftingSV,kreg_mini_servo_servo_min_voltage,45 +508,ShakeModLiftingSV,kreg_mini_servo_servo_max_torque,1000 +509,ShakeModLiftingSV,kreg_mini_servo_servo_unload_condition,32 +510,ShakeModLiftingSV,kreg_mini_servo_servo_protect_current,256 +511,ShakeModLiftingSV,kreg_mini_servo_servo_protect_torque,0 +512,ShakeModLiftingSV,kreg_mini_servo_servo_protect_time,0 +513,ShakeModLiftingSV,kreg_mini_servo_servo_overload_torque,0 +514,ShakeModLiftingSV,kreg_mini_servo_servo_acc,0 +515,OptMod,kreg_a8k_opt_f_scan_vdefault,280 +516,OptMod,kreg_a8k_opt_f_scan_vstart,280 +517,OptMod,kreg_a8k_opt_f_scan_a1,280 +518,OptMod,kreg_a8k_opt_f_scan_amax,280 +519,OptMod,kreg_a8k_opt_f_scan_v1,280 +520,OptMod,kreg_a8k_opt_f_scan_dmax,280 +521,OptMod,kreg_a8k_opt_f_scan_d1,280 +522,OptMod,kreg_a8k_opt_f_scan_vstop,280 +523,OptMod,kreg_a8k_opt_f_scan_tzerowait,0 +524,OptMod,kreg_a8k_opt_f_scan_irun,4 +525,OptMod,kreg_a8k_opt_t_scan_vdefault,200 +526,OptMod,kreg_a8k_opt_t_scan_vstart,200 +527,OptMod,kreg_a8k_opt_t_scan_a1,200 +528,OptMod,kreg_a8k_opt_t_scan_amax,200 +529,OptMod,kreg_a8k_opt_t_scan_v1,200 +530,OptMod,kreg_a8k_opt_t_scan_dmax,200 +531,OptMod,kreg_a8k_opt_t_scan_d1,200 +532,OptMod,kreg_a8k_opt_t_scan_vstop,200 +533,OptMod,kreg_a8k_opt_t_scan_tzerowait,0 +534,OptMod,kreg_a8k_opt_t_scan_irun,4 +535,OptMod,kreg_a8k_opt_barcode_scan_vdefault,300 +536,OptMod,kreg_a8k_opt_barcode_scan_vstart,300 +537,OptMod,kreg_a8k_opt_barcode_scan_a1,300 +538,OptMod,kreg_a8k_opt_barcode_scan_amax,300 +539,OptMod,kreg_a8k_opt_barcode_scan_v1,300 +540,OptMod,kreg_a8k_opt_barcode_scan_dmax,300 +541,OptMod,kreg_a8k_opt_barcode_scan_d1,300 +542,OptMod,kreg_a8k_opt_barcode_scan_vstop,300 +543,OptMod,kreg_a8k_opt_barcode_scan_tzerowait,0 +544,OptMod,kreg_a8k_opt_barcode_scan_irun,12 \ No newline at end of file diff --git a/src/main/java/a8k/app/channel/net/BiLisDoubleTrackTcpClient.java b/src/main/java/a8k/app/channel/net/BiLisDoubleTrackTcpClient.java index c014325..275ca24 100644 --- a/src/main/java/a8k/app/channel/net/BiLisDoubleTrackTcpClient.java +++ b/src/main/java/a8k/app/channel/net/BiLisDoubleTrackTcpClient.java @@ -19,8 +19,8 @@ import java.util.concurrent.TimeUnit; @Slf4j @ChannelHandler.Sharable public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter { - private final static Integer reconnectDelay = 5; // 重连延迟时间,单位秒 - private final static Integer readIDLETime = 30; // 重连延迟时间,单位秒 + private final static Integer reconnectDelay = 5; // 重连延迟时间, + private final static Integer readIDLETime = 30; // 重连延迟时间, private final static Integer rxBufferSize = 1024; // 接收数据缓冲区大小,单位字节 @FunctionalInterface @@ -58,7 +58,7 @@ public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter { .handler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel ch) { - // 添加空闲状态检测,100ms没有读取就触发 + // 添加空闲状态检测 ch.pipeline().addLast(new IdleStateHandler(readIDLETime, 0, 0, TimeUnit.MILLISECONDS)); ch.pipeline().addLast(BiLisDoubleTrackTcpClient.this); } @@ -100,6 +100,7 @@ public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter { log.error("Failed to send data tail,{}", future.cause().getMessage()); } }); + log.debug("TX:{}", ByteArrayUtils.toByteString(data)); } else { log.warn("Channel is not active, cannot send data: {}", data); // 可以考虑在这里实现消息队列,等连接恢复后重发 @@ -122,7 +123,7 @@ public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter { // PRIVATE // private void reportRxData(byte[] data) { - log.debug("Received raw data ({} bytes): {}", data.length, ByteArrayUtils.toByteString(data)); + log.debug("RX:({} bytes): {}", data.length, ByteArrayUtils.toByteString(data)); if (onDataReceivedListener != null) { onDataReceivedListener.onDataReceived(data); } else { diff --git a/src/main/java/a8k/app/service/lis/BiLisDoubleTrackChannel.java b/src/main/java/a8k/app/service/lis/BiLisDoubleTrackChannel.java index d099969..d96585b 100644 --- a/src/main/java/a8k/app/service/lis/BiLisDoubleTrackChannel.java +++ b/src/main/java/a8k/app/service/lis/BiLisDoubleTrackChannel.java @@ -2,8 +2,12 @@ package a8k.app.service.lis; import a8k.app.channel.iflytophald.channel.LisUartChannel; import a8k.app.channel.net.BiLisDoubleTrackTcpClient; +import a8k.app.constant.AppConstant; +import a8k.app.factory.BiLisDoubleTrackFrameFactory; import a8k.app.type.lisprotocol.BiLisDoubleTrackFrame; +import a8k.app.utils.ByteArrayUtils; import a8k.app.utils.ThreadUtils; +import a8k.app.utils.ZByteRxBuffer; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import lombok.extern.slf4j.Slf4j; @@ -29,8 +33,8 @@ public class BiLisDoubleTrackChannel { ChannelType channelType; - //State - private final ByteBuf rxBuffer = Unpooled.buffer(BiLisDoubleTrackFrame.PACKET_MAX_LENGTH); // 接收数据缓冲区,初始大小为1024字节 + final ZByteRxBuffer rxBuffer = new ZByteRxBuffer(BiLisDoubleTrackFrame.PACKET_MAX_LENGTH); // 接收数据缓冲区,初始大小为1024字节 + boolean connectedState = false; boolean isShuttingDown = false; @@ -48,6 +52,7 @@ public class BiLisDoubleTrackChannel { public void start() { isShuttingDown = false; + switch (channelType) { case TCP -> { biLisDoubleTrackTcpClient.regRxMessageListener(this::onRxFromTCP); @@ -88,39 +93,51 @@ public class BiLisDoubleTrackChannel { * 1. 发送ENQ(0x05)到服务器 * 2. 服务器2秒内回复ACK(0x06)或NAK(0x15) * 3. 如果收到ACK,发送ACK(0x06)作为确认 + * 示意: + * 244 TX->05 + * 358 RX<-06 (回执大概100ms左右) + * 380 TX->04 */ - if (!isChannelReady()) return false; - synchronized (rxBuffer) { - rxBuffer.clear(); - } + + rxBuffer.clear(); txBytes(new byte[]{BiLisDoubleTrackFrame.ENQ}); - boolean rxAckOrNak = ThreadUtils.waitingForSomeCondition("BiLisDoubleTrackChannel.rx", 100, 2000, - () -> { - synchronized (rxBuffer) { - return rxBuffer.readableBytes() == 1 && - (rxBuffer.getByte(0) == BiLisDoubleTrackFrame.ACK || rxBuffer.getByte(0) == BiLisDoubleTrackFrame.NAK); - } - }); - - if (rxAckOrNak) { - txBytes(new byte[]{BiLisDoubleTrackFrame.ACK}); - } + boolean rxAckOrNak = ThreadUtils.waitingForSomeCondition("BiLisDoubleTrackChannel.rx", 30, 2000, + () -> rxBuffer.readableBytes() == 1 && + (rxBuffer.getByte(0) == BiLisDoubleTrackFrame.ACK || rxBuffer.getByte(0) == BiLisDoubleTrackFrame.NAK)); + //无论收到ACK还是NAK,都发送EOT结束 + txBytes(new byte[]{BiLisDoubleTrackFrame.EOT}); return rxAckOrNak; } - // synchronized BiLisDoubleTrackFrame requestSampleInfo(String barcode) { - // /* - // * 请求样本信息协议 - // * TX: FN Q|A5000P|^1111 C1 C2 - // * RX: FN O|A10|123456789||^COVID-19 Ab^^\^COVID-19 nAb^^|1||20211201125654 C1 C2 (2s超时) - // * TX: - // * RX: - // */ - // - // } + synchronized BiLisDoubleTrackFrame requestSampleInfo(String barcode) { + /* + * 请求样本信息协议 + * TX: FN Q|A5000P|^1111 C1 C2 + * RX: FN O|A10|123456789||^COVID-19 Ab^^\^COVID-19 nAb^^|1||20211201125654 C1 C2 (2s超时) + * TX: + * RX: + */ + rxBuffer.clear(); + var cxt = BiLisDoubleTrackFrameFactory.createQFrameBytes(AppConstant.deviceTypeName, barcode); + txBytes(cxt.frameBytes); + + boolean rxAckOrNak = ThreadUtils.waitingForSomeCondition("BiLisDoubleTrackChannel", 30, 2000, + () -> rxBuffer.readableBytes() != 0); + + byte[] rxData = rxBuffer.cpy(); + log.info("RX: {}", ByteArrayUtils.toByteString(rxData)); + + txBytes(new byte[]{BiLisDoubleTrackFrame.ACK}); + + //waiting for EOT + ThreadUtils.waitingForSomeCondition("BiLisDoubleTrackChannel", 30, 2000, + () -> rxBuffer.readableBytes() != 0); + + return null; + } synchronized public boolean isChannelReady() { @@ -141,15 +158,11 @@ public class BiLisDoubleTrackChannel { void onRxFromTCP(byte[] data) { - synchronized (rxBuffer) { - rxBuffer.writeBytes(data); - } + rxBuffer.push(data, data.length); } void onRxFromUART(byte[] data) { - synchronized (rxBuffer) { - rxBuffer.writeBytes(data); - } + rxBuffer.push(data, data.length); } void txBytes(byte[] data) { @@ -162,11 +175,18 @@ public class BiLisDoubleTrackChannel { private void monitorThread() { while (!isShuttingDown) { if (connectedState) { - ThreadUtils.trySleep(PING_PERIOD); + ThreadUtils.trySleep(1000); } else { ThreadUtils.trySleep(1000); } - connectedState = ping(); + boolean state = ping(); + if (state) { + connectedState = true; + } else { + connectedState = false; + log.warn("BiLisDoubleTrackChannel: Ping失败"); + } + } } diff --git a/src/main/java/a8k/app/utils/ThreadUtils.java b/src/main/java/a8k/app/utils/ThreadUtils.java index dbb5bc5..817c9b5 100644 --- a/src/main/java/a8k/app/utils/ThreadUtils.java +++ b/src/main/java/a8k/app/utils/ThreadUtils.java @@ -28,9 +28,13 @@ public class ThreadUtils { static public void forceSleep(long millis) { boolean isInterrupted = false; long startTime = System.currentTimeMillis(); - while (System.currentTimeMillis() - startTime < millis) { + while (true) { + int remainingTime = (int) (millis - (System.currentTimeMillis() - startTime)); + if(remainingTime <= 0) { + break; + } try { - Thread.sleep(100); // 每隔100毫秒检查一次 + Thread.sleep(remainingTime+1); // 每隔100毫秒检查一次 } catch (InterruptedException e) { isInterrupted = true; } @@ -57,9 +61,11 @@ public class ThreadUtils { while (System.currentTimeMillis() - startTime < timeoutMillis) { if (condition.isConditionMet()) return true; // 如果条件满足,直接返回 - log.info("Waiting for condition: {}", conditionName); - forceSleep(100); // 每隔100毫秒重试一次 + log.debug("Waiting for condition: {}", conditionName); + forceSleep(retryIntervalMillis); // 每隔100毫秒重试一次 } + + log.debug("Condition '{}' not met within timeout of {} ms", conditionName, timeoutMillis); return false; } } diff --git a/src/main/java/a8k/app/utils/ZByteRxBuffer.java b/src/main/java/a8k/app/utils/ZByteRxBuffer.java new file mode 100644 index 0000000..93df547 --- /dev/null +++ b/src/main/java/a8k/app/utils/ZByteRxBuffer.java @@ -0,0 +1,74 @@ +package a8k.app.utils; + + +import java.util.concurrent.Semaphore; + +public class ZByteRxBuffer { + + byte[] buff; + int off = 0; + boolean overflowFlag = false; + Semaphore sem = new Semaphore(0); + + public ZByteRxBuffer(int size) { + buff = new byte[size]; + } + + + synchronized public void push(byte[] data, int len) { + if (len + off > buff.length) { + overflowFlag = true; + return; + } + System.arraycopy(data, 0, buff, off, len); + off += len; + sem.release(); + } + + public void waitData() { + try { + sem.acquire(); + } catch (InterruptedException ignored) { + } + } + + public synchronized int readableBytes() { + return off; + } + + public synchronized byte getByte(int index) { + if (index < 0 || index >= off) { + return 0; + } + return buff[index]; + } + + + synchronized public void clear() { + off = 0; + overflowFlag = false; + } + + synchronized public boolean isOverflow() { + return overflowFlag; + } + + synchronized public byte[] cpy() { + byte[] ret = new byte[off]; + System.arraycopy(buff, 0, ret, 0, off); + return ret; + } + + synchronized public void pop(int rmlen) { + if (rmlen >= off) { + off = 0; + return; + } + byte[] tmp = new byte[buff.length]; + System.arraycopy(buff, rmlen, tmp, 0, off - rmlen); + off -= rmlen; + System.arraycopy(tmp, 0, buff, 0, off); + + } + +} \ No newline at end of file diff --git a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java index 57e33fb..4960648 100644 --- a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java @@ -3,6 +3,7 @@ package a8k.extui.mgr; import a8k.app.utils.ZList; import a8k.extui.page.apptest.LisTestPage; import a8k.extui.page.apptest.PrinterDebugPage; +import a8k.extui.page.codetest.BiLisDoubleTrackChannelTestPage; import a8k.extui.page.debug.*; import a8k.extui.page.driver.*; import a8k.extui.page.driver.pipette_module.*; @@ -207,7 +208,8 @@ public class ExtApiPageGroupCfgMgr { )), new Menu("代码测试", ZList.of( new Menu(OptFormulaTestPageV2.class, "光学公式测试1"), - new Menu(OptFormulaTestPage.class, "光学公式测试2") + new Menu(OptFormulaTestPage.class, "光学公式测试2"), + new Menu(BiLisDoubleTrackChannelTestPage.class, "BiLis双通道测试") )), new Menu("前端测试助手", ZList.of( new Menu(FakeReactionRecordGeneratorPage.class, "虚拟反应记录生成"), diff --git a/src/main/java/a8k/extui/page/codetest/BiLisDoubleTrackChannelTestPage.java b/src/main/java/a8k/extui/page/codetest/BiLisDoubleTrackChannelTestPage.java new file mode 100644 index 0000000..fee2062 --- /dev/null +++ b/src/main/java/a8k/extui/page/codetest/BiLisDoubleTrackChannelTestPage.java @@ -0,0 +1,50 @@ +package a8k.extui.page.codetest; + +import a8k.app.service.lis.BiLisDoubleTrackChannel; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +@RequiredArgsConstructor +public class BiLisDoubleTrackChannelTestPage { + + private final ExtApiPageMgr extApiPageMgr; + private String serverip = "127.0.0.1"; + private String serverPort = "9973"; + + BiLisDoubleTrackChannel biLisDoubleTrackChannel; + + + synchronized public void setServeripAndPort(String serverip, String serverPort) { + this.serverip = serverip; + this.serverPort = serverPort; + } + + synchronized public void newConnect() { + biLisDoubleTrackChannel = new BiLisDoubleTrackChannel(serverip, Integer.parseInt(serverPort)); + biLisDoubleTrackChannel.start(); + log.info("新建连接: {}:{}", serverip, serverPort); + } + + synchronized public void execPing() { + biLisDoubleTrackChannel.ping(); + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("设置服务器IP和端口", this::setServeripAndPort) + .setParamVal("serverip", () -> serverip) + .setParamVal("serverPort", () -> serverPort); + page.addFunction("新建连接", this::newConnect); + page.addFunction("执行Ping", this::execPing); + + extApiPageMgr.addPage(page); + } + + +}