From 7dc69cb9f56b5063e18c5d6d57ced4ac5cc7868d Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 19 Dec 2024 21:43:34 +0800 Subject: [PATCH] update --- appresource/db/app.db | Bin 225280 -> 225280 bytes .../a8k/app/dao/db/DeviceActionParameterDao.java | 95 ++++++++++++++++ .../a8k/app/dao/db/LowerDeviceParameterDao.java | 94 ---------------- src/main/java/a8k/app/dao/db/type/Parameter.java | 32 +++--- .../app/dao/exparam/HbotConsumableParamMgr.java | 61 ---------- .../a8k/app/dao/exparam/PipetteGunParamExMgr.java | 119 -------------------- .../a8k/app/dao/exparam/base/LLDParamPack.java | 11 -- .../a8k/app/dao/exparam/base/LLFParamPack.java | 7 -- .../dao/exparam/base/PipetteGunBindActionType.java | 15 --- .../service/exparam/HbotConsumableParamMgr.java | 61 ++++++++++ .../app/service/exparam/PipetteGunParamExMgr.java | 119 ++++++++++++++++++++ .../a8k/app/service/exparam/base/LLDParamPack.java | 11 ++ .../a8k/app/service/exparam/base/LLFParamPack.java | 7 ++ .../exparam/base/PipetteGunBindActionType.java | 15 +++ .../service/lowerctrl/HbotMoveExCtrlService.java | 2 +- .../mainctrl/mainflowctrl/action/SEQ5_PROCESS.java | 4 +- .../java/a8k/app/service/param/base/ParamMgr.java | 4 +- .../a8k/app/utils/ProjProcessContextUtils.java | 2 +- src/main/java/a8k/app/utils/ZCSVUtils.java | 2 + src/main/java/a8k/app/utils/ZJsonHelper.java | 13 +++ .../a8k/extui/service/ExtApiTabCfgService.java | 11 ++ .../a8k/extui/service/LowerDeviceParamMgr.java | 4 +- .../service/calibration/HbotTipPosCalibration.java | 2 +- .../extui/service/db/DeviceActionParameterMgr.java | 28 +++++ src/main/resources/db/zapp_a8k_pos_parameter.csv | 125 +++++++++++++++++++++ 25 files changed, 512 insertions(+), 332 deletions(-) create mode 100644 src/main/java/a8k/app/dao/db/DeviceActionParameterDao.java delete mode 100644 src/main/java/a8k/app/dao/db/LowerDeviceParameterDao.java delete mode 100644 src/main/java/a8k/app/dao/exparam/HbotConsumableParamMgr.java delete mode 100644 src/main/java/a8k/app/dao/exparam/PipetteGunParamExMgr.java delete mode 100644 src/main/java/a8k/app/dao/exparam/base/LLDParamPack.java delete mode 100644 src/main/java/a8k/app/dao/exparam/base/LLFParamPack.java delete mode 100644 src/main/java/a8k/app/dao/exparam/base/PipetteGunBindActionType.java create mode 100644 src/main/java/a8k/app/service/exparam/HbotConsumableParamMgr.java create mode 100644 src/main/java/a8k/app/service/exparam/PipetteGunParamExMgr.java create mode 100644 src/main/java/a8k/app/service/exparam/base/LLDParamPack.java create mode 100644 src/main/java/a8k/app/service/exparam/base/LLFParamPack.java create mode 100644 src/main/java/a8k/app/service/exparam/base/PipetteGunBindActionType.java create mode 100644 src/main/java/a8k/extui/service/db/DeviceActionParameterMgr.java create mode 100644 src/main/resources/db/zapp_a8k_pos_parameter.csv diff --git a/appresource/db/app.db b/appresource/db/app.db index 90bd0ce74d48a7c070a3d1e793e8fec47fd954b6..76c52adbf11d38a144747072a8d29f0896b1b263 100644 GIT binary patch delta 447 zcmZp8z}xVEcY>5qd?y0~gE1z{Re{r^R!Q`yZR)=0E{nHkKyF=`!0@*%)uLa!!|K7q_%z zY%-p_fJb_A3G*7J=~9!GSezJHrhjB-6x&?Q!pO)pU2?k~ALF&eC~by$4E#I!bNE&G z&hnM>De>;+jo|slGmS@$dmFbO*JG}3E(^{loZXxj98WoVIIP*2!NV zW~1o~6qu)RgjNB?JS9b^+bJ?zvgDQKz5R9t1I7pTlM@6CTbQ;m zvna4J^7k|F_iq*qXyxDD-_KMiFe!nBMV+CHVLFEcvyu+SG!9qxFYHs<&Dn0URk3NZ z-eB!v6=RvtqQSh0*_!DHQw9?c<3vUchCK{rKzAuj_tR(Iv_0B^`3yT#l-2YL5=`3D m=SwgdY!CEg-o?hKIh`kfxtZ4(81NE645FF0&k0~okp}>~b9GMu delta 1404 zcmZuxeNa?Y6o2Qwx9?+j-?A_WESmvq%eIQL3n4AW@Ttitw4kDZC@7dBD&X?DyWmw* z=>u@KIDcppWdkwhWI}CWGfgu!Lz$K}nbbcv!=f|UH2zale>B}?*_o`~oAd6w=l5~W zz4P8Zc1JySM;%Fyt3AhYTrP{XEYdj6G;uZ~i`1Tbx8Y(6*r)WV_hR(fK8EGE*+Z~j zDHMzs1cz}-aEq6R{SsEWdI81)COBK)XPM!Zs@%LT`?17mt~z{9^y zMtuQ`Pz)M;AVI>ER{$WR-ryPo+-lsh65_d-H)EbOJTOce>I`w}jJj7<_2c>y-A_8I zi`BlabtyNLPUSKArra&3OE;x%$tvC!Pl-0otfoaH3gbc%KgW0RCh{Svfj{6KXoC1a zrSSv4oO&?711bnTiZ6CR8KE6`s{=L?+KwqlVHcro;n9j0j)IHOBasR5geQmbDG$^s z^pM2mXPWIL2%V6GK@SuY+KPXAU>~6ev9S~ODzt@h)|st25zc%k6e#on%el<~uK%TSLQVLzhp6KAH*5j91VG#dh3y*4;zkdT>?|~$(o9_c zuq667JZxVdweN%MBqu}v<6lj8;!Ax{t=&)S7o^S5q*7FpMc+aAt5%R_gcCdTRWRAd09EwkV4`y)(6X& zV8=s(^}hcT1RB$p`1N!<<2y~(ry~tc`yejb;B_C^<=wQJ5i(7Y2IKt@8-+9ckRdnF zZHxLaY>y(tVWf#}Wr%A@ILEq=!oT@pwL-TrbhSBi6&~w{<+!mQ9E4V3Z$E4!v=YDS zhiaL+B`zn;Y{yRq*xHK+U=^Xy;Nbz-OlSpO9f0*pDJ^H59-c%zY;n# zb9ZdIHuUPq!r19xtOI^62&OvVPC=l-=sZcLc_FnWgKOquUXH1Vkqk424ue_!Ol?yY z_BWU6=5-#Opgpg3Ds##yB}<-@Ps!QR57MBNFWwi2M2F^EO`9fGxFl@g=lL_doqRzK z5)0ghL0HROXU5@cpO3Au+?1JvzqCUZRsjq!|*$tg97eTu5R%T zmk&N(#D6IX?ClymU}pK#wR!k;5?O_>B@sukvW%Y**&(5K^CwiEk)mM_o_F(2DSrb; C&ZX7> diff --git a/src/main/java/a8k/app/dao/db/DeviceActionParameterDao.java b/src/main/java/a8k/app/dao/db/DeviceActionParameterDao.java new file mode 100644 index 0000000..995f4e5 --- /dev/null +++ b/src/main/java/a8k/app/dao/db/DeviceActionParameterDao.java @@ -0,0 +1,95 @@ +package a8k.app.dao.db; + +import a8k.app.dao.db.type.Parameter; +import a8k.app.utils.ZJsonHelper; +import a8k.app.utils.ZSqlite; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.Objects; + + +@Component +@Slf4j +public class DeviceActionParameterDao extends ZSqlite { + @Resource + JdbcTemplate jdbcTemplate; +//zapp_a8k_pos_parameter.csv + + @PostConstruct + void init() { + init(jdbcTemplate, "zapp_a8k_pos_parameter", Parameter.class, true); + } + + // + // GETTER + // + + public T getParam(String service, String key, Class tClass) { + List list = queryList("select * from " + tableName + " where service = ? and key = ?;", service, key); + if (list.isEmpty()) { + return null; + } + + Parameter parameter = list.get(0); + Assert.isTrue(tClass.getSimpleName().equals(parameter.valType), "参数类型不匹配"); + return ZJsonHelper.objectFromJson(parameter.val, tClass); + } + + public Parameter getParam(String service, String key) { + return queryOne("select * from " + tableName + " where service = ? and key = ?;", service, key); + } + + public List getParams(String service) { + return queryList("select * from " + tableName + " where service = ?;", service); + } + + public void initParam(String service, String key, String chName, Class type) { + Parameter old = findByServiceAndKey(service, key); + if (old == null) { + var newparam = new Parameter(); + newparam.id = 0; + newparam.service = service; + newparam.key = key; + newparam.chName = chName; + newparam.valType = type.getSimpleName(); + add(newparam); + } else { + old.chName = chName; + old.valType = type.getSimpleName(); + update(old); + } + + } + + // + // SETTER + // + public void updateParam(String service, String key, Object param) { + log.info("updateParam: service={}, key={}, param={}", service, key, param); + ObjectMapper objectMapper = new ObjectMapper(); + List list = queryList("select * from " + tableName + " where service = ? and key = ?;", service, key); + Assert.isTrue(list.size() == 1, "参数不存在,或者存在多个参数"); + Assert.isTrue(list.get(0).valType.equals(param.getClass().getSimpleName()), "参数类型不匹配"); + Parameter parameter = list.get(0); + parameter.val = Objects.requireNonNull(ZJsonHelper.createObjectNode(param)).toString(); + parameter.service = service; + parameter.key = key; + parameter.valType = param.getClass().getSimpleName(); + // zSqlite.update(parameter); + update(parameter); + } + + public Parameter findByServiceAndKey(String serviceName, String key) { + return queryOne("select * from " + tableName + " where service = ? and key = ?", serviceName, key); + } + + + +} diff --git a/src/main/java/a8k/app/dao/db/LowerDeviceParameterDao.java b/src/main/java/a8k/app/dao/db/LowerDeviceParameterDao.java deleted file mode 100644 index 0e3a4d0..0000000 --- a/src/main/java/a8k/app/dao/db/LowerDeviceParameterDao.java +++ /dev/null @@ -1,94 +0,0 @@ -package a8k.app.dao.db; - -import a8k.app.dao.db.type.Parameter; -import a8k.app.utils.ZJsonHelper; -import a8k.app.utils.ZSqlite; -import com.fasterxml.jackson.databind.ObjectMapper; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Component; -import org.springframework.util.Assert; - -import java.util.List; - - -@Component -@Slf4j -public class LowerDeviceParameterDao extends ZSqlite { - @Resource - JdbcTemplate jdbcTemplate; - - - @PostConstruct - void init() { - init(jdbcTemplate, "zapp_a8k_pos_parameter", Parameter.class, false); - } - - // - // GETTER - // - - public T getParam(String service, String key, Class tClass) { - List list = queryList("select * from " + tableName + " where service = ? and key = ?;", service, key); - if (list.isEmpty()) { - return null; - } - - Parameter parameter = list.get(0); - Assert.isTrue(tClass.getSimpleName().equals(parameter.valType), "参数类型不匹配"); - return ZJsonHelper.objectFromJson(parameter.val, tClass); - } - - public Parameter getParam(String service, String key) { - return queryOne("select * from " + tableName + " where service = ? and key = ?;", service, key); - } - - public List getParams(String service) { - return queryList("select * from " + tableName + " where service = ?;", service); - } - - public void initParam(String service, String key, String chName, Class type) { - Parameter old = findByServiceAndKey(service, key); - if (old == null) { - var newparam = new Parameter(); - newparam.id = 0; - newparam.service = service; - newparam.key = key; - newparam.chName = chName; - newparam.valType = type.getSimpleName(); - add(newparam); - } else { - old.chName = chName; - old.valType = type.getSimpleName(); - update(old); - } - - } - - // - // SETTER - // - public void updateParam(String service, String key, Object param) { - log.info("updateParam: service={}, key={}, param={}", service, key, param); - ObjectMapper objectMapper = new ObjectMapper(); - List list = queryList("select * from " + tableName + " where service = ? and key = ?;", service, key); - Assert.isTrue(list.size() == 1, "参数不存在,或者存在多个参数"); - Assert.isTrue(list.get(0).valType.equals(param.getClass().getSimpleName()), "参数类型不匹配"); - Parameter parameter = list.get(0); - parameter.val = ZJsonHelper.createObjectNode(param); - parameter.service = service; - parameter.key = key; - parameter.valType = param.getClass().getSimpleName(); - // zSqlite.update(parameter); - update(parameter); - } - - public Parameter findByServiceAndKey(String serviceName, String key) { - return queryOne("select * from " + tableName + " where service = ? and key = ?", serviceName, key); - } - - - -} diff --git a/src/main/java/a8k/app/dao/db/type/Parameter.java b/src/main/java/a8k/app/dao/db/type/Parameter.java index eeaebfa..4b679c2 100644 --- a/src/main/java/a8k/app/dao/db/type/Parameter.java +++ b/src/main/java/a8k/app/dao/db/type/Parameter.java @@ -3,24 +3,24 @@ package a8k.app.dao.db.type; import com.fasterxml.jackson.databind.node.ObjectNode; public class Parameter { - public int id; - public String service; - public String key; - public String valType; - public ObjectNode val; - public String chName; + public int id; + public String service; + public String key; + public String valType; + public String val; + public String chName; public Parameter() { } - public Parameter deepCopy() { - Parameter ret = new Parameter(); - ret.id = id; - ret.service = service; - ret.key = key; - ret.valType = valType; - ret.val = val != null ? val.deepCopy() : null; - ret.chName = chName; - return ret; - } +// public Parameter deepCopy() { +// Parameter ret = new Parameter(); +// ret.id = id; +// ret.service = service; +// ret.key = key; +// ret.valType = valType; +// ret.val = val != null ? val.deepCopy() : null; +// ret.chName = chName; +// return ret; +// } } diff --git a/src/main/java/a8k/app/dao/exparam/HbotConsumableParamMgr.java b/src/main/java/a8k/app/dao/exparam/HbotConsumableParamMgr.java deleted file mode 100644 index 6229c97..0000000 --- a/src/main/java/a8k/app/dao/exparam/HbotConsumableParamMgr.java +++ /dev/null @@ -1,61 +0,0 @@ -package a8k.app.dao.exparam; - -import a8k.app.a8ktype.device.ConsumableGroup; -import a8k.app.service.param.HbotLargeBottleBSPosMgr; -import a8k.app.service.param.HbotLittleBSPosMgr; -import a8k.app.service.param.HbotProbeSubstancePosMgr; -import a8k.app.service.param.HbotTipPosMgr; -import a8k.app.a8ktype.device.Pos3d; -import a8k.app.a8ktype.device.TipGroup; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -/** - * HBOT二维码扫描坐标参数 - */ -@Component -public class HbotConsumableParamMgr { - @Resource - HbotLittleBSPosMgr hbotLittleBSPosMgr; - @Resource - HbotLargeBottleBSPosMgr hbotLargeBottleBSPosMgr; - @Resource - HbotTipPosMgr hbotTipPosMgr; - @Resource - HbotProbeSubstancePosMgr hbotProbeSubstancePosMgr; - - @PostConstruct - void initialize() { - } - - public Pos3d getTipPos(TipGroup tipGroup, Integer tipoff) { - return hbotTipPosMgr.getTipPos(tipGroup, tipoff); - } - - public Pos3d getLittleBufferPiercePos(ConsumableGroup group, Integer off) { - return hbotLittleBSPosMgr.getPiercePos(group, off); - } - - public Pos3d getLittleBufferSamplePos(ConsumableGroup group, Integer off) { - return hbotLittleBSPosMgr.getSamplePos(group, off); - } - - - public Pos3d getProbeSubstanceSamplePos(ConsumableGroup group, Integer off) { - return hbotProbeSubstancePosMgr.getSamplePos(group, off); - } - - public Pos3d getProbeSubstancePiercePos(ConsumableGroup group, Integer off) { - return hbotProbeSubstancePosMgr.getPiercePos(group, off); - } - - public Pos3d getLargeBufferSamplePos(ConsumableGroup group) { - return hbotLargeBottleBSPosMgr.getLLDStartPos(group); - } - - public Pos3d getLargeBufferSamplePosEnd(ConsumableGroup group) { - return hbotLargeBottleBSPosMgr.getSamplePosEnd(group); - } - -} diff --git a/src/main/java/a8k/app/dao/exparam/PipetteGunParamExMgr.java b/src/main/java/a8k/app/dao/exparam/PipetteGunParamExMgr.java deleted file mode 100644 index f88dc41..0000000 --- a/src/main/java/a8k/app/dao/exparam/PipetteGunParamExMgr.java +++ /dev/null @@ -1,119 +0,0 @@ -package a8k.app.dao.exparam; - -import a8k.app.a8ktype.state.ProjectTaskContext; -import a8k.app.dao.exparam.base.PipetteGunBindActionType; -import a8k.app.dao.exparam.base.LLDParamPack; -import a8k.app.dao.exparam.base.LLFParamPack; -import a8k.app.service.param.HbotLargeBottleBSPosMgr; -import a8k.app.service.param.HbotSamplePosParamMgr; -import a8k.app.service.param.PipetteGunLLDParamMgr; -import a8k.app.service.param.PipetteGunLLFParamMgr; -import a8k.app.a8ktype.param.A8kSamplePos; -import a8k.app.a8ktype.param.PipetteGunLLDThresholdParam; -import a8k.app.a8ktype.param.PipetteGunLLDTypeParam; -import a8k.app.a8ktype.device.ConsumableGroup; -import a8k.app.a8ktype.device.Pos3d; -import a8k.app.utils.ProjProcessContextUtils; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; -import org.springframework.util.Assert; - -@Component -public class PipetteGunParamExMgr { - - @Resource - PipetteGunLLDParamMgr pipetteGunLLDParamMgr; - - @Resource - PipetteGunLLFParamMgr pipetteGunLLFParamMgr; - - @Resource - HbotSamplePosParamMgr hbotSamplePosParamMgr; - - @Resource - HbotLargeBottleBSPosMgr hbotLargeBottleBSPosMgr; - - @Resource - HbotConsumableParamMgr hbotConsumableParamMgr; - - /** - * 获取液面探测相关参数 - * @param type 操作类型 - * @param cxt 上下文 - * @return 液面探测相关参数 - */ - public LLDParamPack getLLDParam(PipetteGunBindActionType type, ProjectTaskContext cxt) { - LLDParamPack paramPack = null; - switch (type) { - case SAMPLE -> { - A8kSamplePos samplePos = ProjProcessContextUtils.getSamplePos(cxt); - Pos3d sampleStartPos = hbotSamplePosParamMgr.getSampleStartPos(samplePos); - Pos3d sampleEndPos = hbotSamplePosParamMgr.getSampleEndPos(samplePos); - - paramPack = new LLDParamPack(); - paramPack.type = pipetteGunLLDParamMgr.getLLDType(PipetteGunLLDTypeParam.DEFAULT_LLD_TYPE); - paramPack.startZ = sampleStartPos.z; - paramPack.endZ = sampleEndPos.z; - paramPack.cThreshold = pipetteGunLLDParamMgr.getLLDThresholdParam(PipetteGunLLDThresholdParam.DEFAULT_C_THRESHOLD); - paramPack.pThreshold = pipetteGunLLDParamMgr.getLLDThresholdParam(PipetteGunLLDThresholdParam.DEFAULT_P_THRESHOLD); - } - case TAKE_LARGE_BUFFER_SOLUTION -> { - ConsumableGroup group = cxt.getConsumable().getGroup(); - var sStartPos = hbotLargeBottleBSPosMgr.getLLDStartPos(group); - var sEndPos = hbotLargeBottleBSPosMgr.getSamplePosEnd(group); - - paramPack = new LLDParamPack(); - paramPack.type = pipetteGunLLDParamMgr.getLLDType(PipetteGunLLDTypeParam.DEFAULT_LLD_TYPE); - paramPack.startZ = sStartPos.z; - paramPack.endZ = sEndPos.z; - paramPack.cThreshold = pipetteGunLLDParamMgr.getLLDThresholdParam(PipetteGunLLDThresholdParam.DEFAULT_C_THRESHOLD); - paramPack.pThreshold = pipetteGunLLDParamMgr.getLLDThresholdParam(PipetteGunLLDThresholdParam.DEFAULT_P_THRESHOLD); - } - } - - Assert.notNull(paramPack, "未知的操作类型"); - return paramPack; - } - - /** - * 获取液面跟随相关参数 - * @param type 操作类型 - * @param cxt 上下文 - * @return 液面跟随相关参数 - */ - public LLFParamPack getLLFParam(PipetteGunBindActionType type, ProjectTaskContext cxt) { - LLFParamPack paramPack = null; - switch (type) { - // 取样 - case MIX_SAMPLE, SAMPLE -> { // - A8kSamplePos samplePos = ProjProcessContextUtils.getSamplePos(cxt); - paramPack = new LLFParamPack(); - paramPack.llfVel = pipetteGunLLFParamMgr.getSampleLLFVel(samplePos); - paramPack.llfStartPos = hbotSamplePosParamMgr.getSampleStartPos(samplePos).z; - paramPack.llfEndPos = hbotSamplePosParamMgr.getSampleStartPos(samplePos).z; - - } - //取大瓶缓冲液 - case TAKE_LARGE_BUFFER_SOLUTION -> { // - paramPack = new LLFParamPack(); - paramPack.llfVel = pipetteGunLLFParamMgr.getLargeBSBottleLlfVel(); - paramPack.llfStartPos = hbotConsumableParamMgr.getLargeBufferSamplePos(cxt.getConsumable().getGroup()).z; - paramPack.llfEndPos = hbotConsumableParamMgr.getLargeBufferSamplePosEnd(cxt.getConsumable().getGroup()).z; - } - - //混合反应液,分配大瓶缓冲液到探测物质中 - case MIX_REACTION_LIQUOR, DISTRIBUTION_LARGE_BUFFER_SOLUTION_PROBE_SUBSTANCE -> { - paramPack = new LLFParamPack(); - paramPack.llfVel = 0; - paramPack.llfStartPos = 0; - paramPack.llfEndPos = 0; - } - } - - Assert.notNull(paramPack, "未知的操作类型"); - Assert.notNull(paramPack.llfVel, "未知的试管类型"); - return paramPack; - } - - -} diff --git a/src/main/java/a8k/app/dao/exparam/base/LLDParamPack.java b/src/main/java/a8k/app/dao/exparam/base/LLDParamPack.java deleted file mode 100644 index 6b65e4c..0000000 --- a/src/main/java/a8k/app/dao/exparam/base/LLDParamPack.java +++ /dev/null @@ -1,11 +0,0 @@ -package a8k.app.dao.exparam.base; - -import a8k.app.hardware.type.LldType; - -public class LLDParamPack { - public LldType type; - public Integer startZ; - public Integer endZ; - public Integer cThreshold; - public Integer pThreshold; -} diff --git a/src/main/java/a8k/app/dao/exparam/base/LLFParamPack.java b/src/main/java/a8k/app/dao/exparam/base/LLFParamPack.java deleted file mode 100644 index 44aaa40..0000000 --- a/src/main/java/a8k/app/dao/exparam/base/LLFParamPack.java +++ /dev/null @@ -1,7 +0,0 @@ -package a8k.app.dao.exparam.base; - -public class LLFParamPack { - public Integer llfVel = 0; - public Integer llfStartPos = 0; - public Integer llfEndPos = 0; -} diff --git a/src/main/java/a8k/app/dao/exparam/base/PipetteGunBindActionType.java b/src/main/java/a8k/app/dao/exparam/base/PipetteGunBindActionType.java deleted file mode 100644 index a4c9d03..0000000 --- a/src/main/java/a8k/app/dao/exparam/base/PipetteGunBindActionType.java +++ /dev/null @@ -1,15 +0,0 @@ -package a8k.app.dao.exparam.base; - -public enum PipetteGunBindActionType { - SAMPLE("从试管中取样"), - TAKE_LARGE_BUFFER_SOLUTION("取大瓶缓冲液"), - DISTRIBUTION_LARGE_BUFFER_SOLUTION_PROBE_SUBSTANCE("分配大瓶缓冲液到探测物质中"), - MIX_SAMPLE("混合样本"), - MIX_REACTION_LIQUOR("混合反应液"), - ; - public final String chName; - - PipetteGunBindActionType(String chName) { - this.chName = chName; - } -} diff --git a/src/main/java/a8k/app/service/exparam/HbotConsumableParamMgr.java b/src/main/java/a8k/app/service/exparam/HbotConsumableParamMgr.java new file mode 100644 index 0000000..1f8b2bd --- /dev/null +++ b/src/main/java/a8k/app/service/exparam/HbotConsumableParamMgr.java @@ -0,0 +1,61 @@ +package a8k.app.service.exparam; + +import a8k.app.a8ktype.device.ConsumableGroup; +import a8k.app.service.param.HbotLargeBottleBSPosMgr; +import a8k.app.service.param.HbotLittleBSPosMgr; +import a8k.app.service.param.HbotProbeSubstancePosMgr; +import a8k.app.service.param.HbotTipPosMgr; +import a8k.app.a8ktype.device.Pos3d; +import a8k.app.a8ktype.device.TipGroup; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +/** + * HBOT二维码扫描坐标参数 + */ +@Component +public class HbotConsumableParamMgr { + @Resource + HbotLittleBSPosMgr hbotLittleBSPosMgr; + @Resource + HbotLargeBottleBSPosMgr hbotLargeBottleBSPosMgr; + @Resource + HbotTipPosMgr hbotTipPosMgr; + @Resource + HbotProbeSubstancePosMgr hbotProbeSubstancePosMgr; + + @PostConstruct + void initialize() { + } + + public Pos3d getTipPos(TipGroup tipGroup, Integer tipoff) { + return hbotTipPosMgr.getTipPos(tipGroup, tipoff); + } + + public Pos3d getLittleBufferPiercePos(ConsumableGroup group, Integer off) { + return hbotLittleBSPosMgr.getPiercePos(group, off); + } + + public Pos3d getLittleBufferSamplePos(ConsumableGroup group, Integer off) { + return hbotLittleBSPosMgr.getSamplePos(group, off); + } + + + public Pos3d getProbeSubstanceSamplePos(ConsumableGroup group, Integer off) { + return hbotProbeSubstancePosMgr.getSamplePos(group, off); + } + + public Pos3d getProbeSubstancePiercePos(ConsumableGroup group, Integer off) { + return hbotProbeSubstancePosMgr.getPiercePos(group, off); + } + + public Pos3d getLargeBufferSamplePos(ConsumableGroup group) { + return hbotLargeBottleBSPosMgr.getLLDStartPos(group); + } + + public Pos3d getLargeBufferSamplePosEnd(ConsumableGroup group) { + return hbotLargeBottleBSPosMgr.getSamplePosEnd(group); + } + +} diff --git a/src/main/java/a8k/app/service/exparam/PipetteGunParamExMgr.java b/src/main/java/a8k/app/service/exparam/PipetteGunParamExMgr.java new file mode 100644 index 0000000..45704ef --- /dev/null +++ b/src/main/java/a8k/app/service/exparam/PipetteGunParamExMgr.java @@ -0,0 +1,119 @@ +package a8k.app.service.exparam; + +import a8k.app.a8ktype.state.ProjectTaskContext; +import a8k.app.service.exparam.base.PipetteGunBindActionType; +import a8k.app.service.exparam.base.LLDParamPack; +import a8k.app.service.exparam.base.LLFParamPack; +import a8k.app.service.param.HbotLargeBottleBSPosMgr; +import a8k.app.service.param.HbotSamplePosParamMgr; +import a8k.app.service.param.PipetteGunLLDParamMgr; +import a8k.app.service.param.PipetteGunLLFParamMgr; +import a8k.app.a8ktype.param.A8kSamplePos; +import a8k.app.a8ktype.param.PipetteGunLLDThresholdParam; +import a8k.app.a8ktype.param.PipetteGunLLDTypeParam; +import a8k.app.a8ktype.device.ConsumableGroup; +import a8k.app.a8ktype.device.Pos3d; +import a8k.app.utils.ProjProcessContextUtils; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +@Component +public class PipetteGunParamExMgr { + + @Resource + PipetteGunLLDParamMgr pipetteGunLLDParamMgr; + + @Resource + PipetteGunLLFParamMgr pipetteGunLLFParamMgr; + + @Resource + HbotSamplePosParamMgr hbotSamplePosParamMgr; + + @Resource + HbotLargeBottleBSPosMgr hbotLargeBottleBSPosMgr; + + @Resource + HbotConsumableParamMgr hbotConsumableParamMgr; + + /** + * 获取液面探测相关参数 + * @param type 操作类型 + * @param cxt 上下文 + * @return 液面探测相关参数 + */ + public LLDParamPack getLLDParam(PipetteGunBindActionType type, ProjectTaskContext cxt) { + LLDParamPack paramPack = null; + switch (type) { + case SAMPLE -> { + A8kSamplePos samplePos = ProjProcessContextUtils.getSamplePos(cxt); + Pos3d sampleStartPos = hbotSamplePosParamMgr.getSampleStartPos(samplePos); + Pos3d sampleEndPos = hbotSamplePosParamMgr.getSampleEndPos(samplePos); + + paramPack = new LLDParamPack(); + paramPack.type = pipetteGunLLDParamMgr.getLLDType(PipetteGunLLDTypeParam.DEFAULT_LLD_TYPE); + paramPack.startZ = sampleStartPos.z; + paramPack.endZ = sampleEndPos.z; + paramPack.cThreshold = pipetteGunLLDParamMgr.getLLDThresholdParam(PipetteGunLLDThresholdParam.DEFAULT_C_THRESHOLD); + paramPack.pThreshold = pipetteGunLLDParamMgr.getLLDThresholdParam(PipetteGunLLDThresholdParam.DEFAULT_P_THRESHOLD); + } + case TAKE_LARGE_BUFFER_SOLUTION -> { + ConsumableGroup group = cxt.getConsumable().getGroup(); + var sStartPos = hbotLargeBottleBSPosMgr.getLLDStartPos(group); + var sEndPos = hbotLargeBottleBSPosMgr.getSamplePosEnd(group); + + paramPack = new LLDParamPack(); + paramPack.type = pipetteGunLLDParamMgr.getLLDType(PipetteGunLLDTypeParam.DEFAULT_LLD_TYPE); + paramPack.startZ = sStartPos.z; + paramPack.endZ = sEndPos.z; + paramPack.cThreshold = pipetteGunLLDParamMgr.getLLDThresholdParam(PipetteGunLLDThresholdParam.DEFAULT_C_THRESHOLD); + paramPack.pThreshold = pipetteGunLLDParamMgr.getLLDThresholdParam(PipetteGunLLDThresholdParam.DEFAULT_P_THRESHOLD); + } + } + + Assert.notNull(paramPack, "未知的操作类型"); + return paramPack; + } + + /** + * 获取液面跟随相关参数 + * @param type 操作类型 + * @param cxt 上下文 + * @return 液面跟随相关参数 + */ + public LLFParamPack getLLFParam(PipetteGunBindActionType type, ProjectTaskContext cxt) { + LLFParamPack paramPack = null; + switch (type) { + // 取样 + case MIX_SAMPLE, SAMPLE -> { // + A8kSamplePos samplePos = ProjProcessContextUtils.getSamplePos(cxt); + paramPack = new LLFParamPack(); + paramPack.llfVel = pipetteGunLLFParamMgr.getSampleLLFVel(samplePos); + paramPack.llfStartPos = hbotSamplePosParamMgr.getSampleStartPos(samplePos).z; + paramPack.llfEndPos = hbotSamplePosParamMgr.getSampleStartPos(samplePos).z; + + } + //取大瓶缓冲液 + case TAKE_LARGE_BUFFER_SOLUTION -> { // + paramPack = new LLFParamPack(); + paramPack.llfVel = pipetteGunLLFParamMgr.getLargeBSBottleLlfVel(); + paramPack.llfStartPos = hbotConsumableParamMgr.getLargeBufferSamplePos(cxt.getConsumable().getGroup()).z; + paramPack.llfEndPos = hbotConsumableParamMgr.getLargeBufferSamplePosEnd(cxt.getConsumable().getGroup()).z; + } + + //混合反应液,分配大瓶缓冲液到探测物质中 + case MIX_REACTION_LIQUOR, DISTRIBUTION_LARGE_BUFFER_SOLUTION_PROBE_SUBSTANCE -> { + paramPack = new LLFParamPack(); + paramPack.llfVel = 0; + paramPack.llfStartPos = 0; + paramPack.llfEndPos = 0; + } + } + + Assert.notNull(paramPack, "未知的操作类型"); + Assert.notNull(paramPack.llfVel, "未知的试管类型"); + return paramPack; + } + + +} diff --git a/src/main/java/a8k/app/service/exparam/base/LLDParamPack.java b/src/main/java/a8k/app/service/exparam/base/LLDParamPack.java new file mode 100644 index 0000000..cd6bf7b --- /dev/null +++ b/src/main/java/a8k/app/service/exparam/base/LLDParamPack.java @@ -0,0 +1,11 @@ +package a8k.app.service.exparam.base; + +import a8k.app.hardware.type.LldType; + +public class LLDParamPack { + public LldType type; + public Integer startZ; + public Integer endZ; + public Integer cThreshold; + public Integer pThreshold; +} diff --git a/src/main/java/a8k/app/service/exparam/base/LLFParamPack.java b/src/main/java/a8k/app/service/exparam/base/LLFParamPack.java new file mode 100644 index 0000000..3c86877 --- /dev/null +++ b/src/main/java/a8k/app/service/exparam/base/LLFParamPack.java @@ -0,0 +1,7 @@ +package a8k.app.service.exparam.base; + +public class LLFParamPack { + public Integer llfVel = 0; + public Integer llfStartPos = 0; + public Integer llfEndPos = 0; +} diff --git a/src/main/java/a8k/app/service/exparam/base/PipetteGunBindActionType.java b/src/main/java/a8k/app/service/exparam/base/PipetteGunBindActionType.java new file mode 100644 index 0000000..87b49a6 --- /dev/null +++ b/src/main/java/a8k/app/service/exparam/base/PipetteGunBindActionType.java @@ -0,0 +1,15 @@ +package a8k.app.service.exparam.base; + +public enum PipetteGunBindActionType { + SAMPLE("从试管中取样"), + TAKE_LARGE_BUFFER_SOLUTION("取大瓶缓冲液"), + DISTRIBUTION_LARGE_BUFFER_SOLUTION_PROBE_SUBSTANCE("分配大瓶缓冲液到探测物质中"), + MIX_SAMPLE("混合样本"), + MIX_REACTION_LIQUOR("混合反应液"), + ; + public final String chName; + + PipetteGunBindActionType(String chName) { + this.chName = chName; + } +} diff --git a/src/main/java/a8k/app/service/lowerctrl/HbotMoveExCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/HbotMoveExCtrlService.java index f247258..90087af 100644 --- a/src/main/java/a8k/app/service/lowerctrl/HbotMoveExCtrlService.java +++ b/src/main/java/a8k/app/service/lowerctrl/HbotMoveExCtrlService.java @@ -5,7 +5,7 @@ import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; import a8k.app.hardware.driver.HbotDriver; import a8k.app.service.param.HbotTipPosMgr; import a8k.app.hardware.driver.PipetteCtrlDriver; -import a8k.app.dao.exparam.HbotConsumableParamMgr; +import a8k.app.service.exparam.HbotConsumableParamMgr; import a8k.app.service.param.HbotFixedPosParamMgr; import a8k.app.service.param.HbotSamplePosParamMgr; import a8k.app.a8ktype.param.A8kSamplePos; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/SEQ5_PROCESS.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/SEQ5_PROCESS.java index 7969c59..51d381a 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/SEQ5_PROCESS.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/SEQ5_PROCESS.java @@ -16,8 +16,8 @@ import a8k.app.service.lowerctrl.TubePreProcesModuleExCtrlService; import a8k.app.service.lowerctrl.TurnableMoveCtrlService; import a8k.app.hardware.driver.PipetteCtrlDriver; import a8k.app.service.lowerctrl.HbotMoveCtrlService; -import a8k.app.dao.exparam.HbotConsumableParamMgr; -import a8k.app.dao.exparam.PipetteGunParamExMgr; +import a8k.app.service.exparam.HbotConsumableParamMgr; +import a8k.app.service.exparam.PipetteGunParamExMgr; import a8k.app.service.param.HbotFixedPosParamMgr; import a8k.app.service.param.HbotSamplePosParamMgr; import a8k.app.a8ktype.param.A8kSamplePos; diff --git a/src/main/java/a8k/app/service/param/base/ParamMgr.java b/src/main/java/a8k/app/service/param/base/ParamMgr.java index 4afc0a4..dc5630b 100644 --- a/src/main/java/a8k/app/service/param/base/ParamMgr.java +++ b/src/main/java/a8k/app/service/param/base/ParamMgr.java @@ -1,6 +1,6 @@ package a8k.app.service.param.base; -import a8k.app.dao.db.LowerDeviceParameterDao; +import a8k.app.dao.db.DeviceActionParameterDao; import a8k.app.dao.db.type.Parameter; import jakarta.annotation.Resource; @@ -8,7 +8,7 @@ import java.util.List; public class ParamMgr { @Resource - LowerDeviceParameterDao db; + DeviceActionParameterDao db; String serviceName = this.getClass().getSimpleName(); diff --git a/src/main/java/a8k/app/utils/ProjProcessContextUtils.java b/src/main/java/a8k/app/utils/ProjProcessContextUtils.java index 6e27429..ceb3dab 100644 --- a/src/main/java/a8k/app/utils/ProjProcessContextUtils.java +++ b/src/main/java/a8k/app/utils/ProjProcessContextUtils.java @@ -4,7 +4,7 @@ import a8k.SpringBootBeanUtil; import a8k.app.service.statemgr.ProjectContextMgrService; import a8k.app.a8ktype.state.ProjectTaskContext; import a8k.app.a8ktype.state.Tube; -import a8k.app.dao.exparam.HbotConsumableParamMgr; +import a8k.app.service.exparam.HbotConsumableParamMgr; import a8k.app.a8ktype.param.A8kSamplePos; import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; import a8k.app.a8ktype.device.Pos3d; diff --git a/src/main/java/a8k/app/utils/ZCSVUtils.java b/src/main/java/a8k/app/utils/ZCSVUtils.java index dfa1689..de090f3 100644 --- a/src/main/java/a8k/app/utils/ZCSVUtils.java +++ b/src/main/java/a8k/app/utils/ZCSVUtils.java @@ -4,11 +4,13 @@ package a8k.app.utils; import a8k.app.dao.db.type.ProjOptInfo; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.text.csv.CsvReader; +import cn.hutool.core.text.csv.CsvRowHandler; import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.text.csv.CsvWriter; import lombok.extern.slf4j.Slf4j; import java.io.File; +import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/a8k/app/utils/ZJsonHelper.java b/src/main/java/a8k/app/utils/ZJsonHelper.java index a1e0ba2..9a6f6c2 100644 --- a/src/main/java/a8k/app/utils/ZJsonHelper.java +++ b/src/main/java/a8k/app/utils/ZJsonHelper.java @@ -28,6 +28,19 @@ public class ZJsonHelper { return new ObjectMapper().createObjectNode(); } + public static ObjectNode readTree(String node) { + ObjectMapper mapper = new ObjectMapper(); + try { + return (ObjectNode) mapper.readTree(node); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public static T objectFromJson(String node, Class tClass) { + return objectFromJson(readTree(node), tClass); + } + + public static T objectFromJson(ObjectNode node, Class tClass) { ObjectMapper mapper = new ObjectMapper(); if (node == null) { diff --git a/src/main/java/a8k/extui/service/ExtApiTabCfgService.java b/src/main/java/a8k/extui/service/ExtApiTabCfgService.java index c388eb9..9ce8362 100644 --- a/src/main/java/a8k/extui/service/ExtApiTabCfgService.java +++ b/src/main/java/a8k/extui/service/ExtApiTabCfgService.java @@ -1,6 +1,7 @@ package a8k.extui.service; +import a8k.extui.service.db.DeviceActionParameterMgr; import a8k.extui.utils.ExtApiFn; import a8k.app.service.background.BackgroudProcessCtrlService; import a8k.app.service.lowerctrl.TubeFeedingCtrlService; @@ -30,6 +31,7 @@ public class ExtApiTabCfgService { LowLevelApi,//底层API OptCalibrationAndVerify,//光学校准和验证 + Data, } ; @@ -98,6 +100,10 @@ public class ExtApiTabCfgService { cfgList.add(new Config(TubeFeedingCtrlService.class, "硬件控制.入料模块", TabType.LowLevelApi)); + // DBExportService + + cfgList.add(new Config(DeviceActionParameterMgr.class, "数据库", TabType.Data)); + /* * OptCalibrationAndVerify */ @@ -152,4 +158,9 @@ public class ExtApiTabCfgService { displayRefreshPage(TabType.CodeTest); } + @ExtApiFn(name = "数据页面", order = 6) + public void changePageToDataRefreshPage() { + displayRefreshPage(TabType.Data); + } + } diff --git a/src/main/java/a8k/extui/service/LowerDeviceParamMgr.java b/src/main/java/a8k/extui/service/LowerDeviceParamMgr.java index 8b7f9d5..95fbb20 100644 --- a/src/main/java/a8k/extui/service/LowerDeviceParamMgr.java +++ b/src/main/java/a8k/extui/service/LowerDeviceParamMgr.java @@ -1,6 +1,6 @@ package a8k.extui.service; -import a8k.app.dao.db.LowerDeviceParameterDao; +import a8k.app.dao.db.DeviceActionParameterDao; import a8k.app.dao.db.type.Parameter; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; @@ -10,7 +10,7 @@ import org.springframework.util.Assert; public class LowerDeviceParamMgr { @Resource - LowerDeviceParameterDao ldpdb; + DeviceActionParameterDao ldpdb; public void check(String service, String key) { Parameter var = ldpdb.getParam(service, key); diff --git a/src/main/java/a8k/extui/service/calibration/HbotTipPosCalibration.java b/src/main/java/a8k/extui/service/calibration/HbotTipPosCalibration.java index 9c6aeeb..5075399 100644 --- a/src/main/java/a8k/extui/service/calibration/HbotTipPosCalibration.java +++ b/src/main/java/a8k/extui/service/calibration/HbotTipPosCalibration.java @@ -4,7 +4,7 @@ package a8k.extui.service.calibration; import a8k.app.constant.AppConstant; import a8k.extui.utils.ExtApiFn; import a8k.app.service.lowerctrl.HbotMoveCtrlService; -import a8k.app.dao.exparam.HbotConsumableParamMgr; +import a8k.app.service.exparam.HbotConsumableParamMgr; import a8k.app.service.param.HbotTipPosMgr; import a8k.app.hardware.driver.HbotDriver; import a8k.app.hardware.driver.PipetteCtrlDriver; diff --git a/src/main/java/a8k/extui/service/db/DeviceActionParameterMgr.java b/src/main/java/a8k/extui/service/db/DeviceActionParameterMgr.java new file mode 100644 index 0000000..f65306f --- /dev/null +++ b/src/main/java/a8k/extui/service/db/DeviceActionParameterMgr.java @@ -0,0 +1,28 @@ +package a8k.extui.service.db; + +import a8k.app.controler.filemgr.StorageControler; +import a8k.app.dao.db.DeviceActionParameterDao; +import a8k.extui.type.FileToBeDownload; +import a8k.extui.utils.ExtApiFn; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class DeviceActionParameterMgr { + + + @Resource + DeviceActionParameterDao deviceActionParameterDao; + + @ExtApiFn(name = "导出设备动作参数", group = "", order = 1) + public FileToBeDownload exportDeviceActionParam() { + deviceActionParameterDao.export(); + return new FileToBeDownload(StorageControler.getDoloadPath(deviceActionParameterDao.getExportPATH())); + } + + // @ExtApiFn(name = "导入设备动作参数", group = "", order = 2) + // public void importDeviceActionParam(String path) { + // deviceActionParameterDao.importFile(path); + // } + +} diff --git a/src/main/resources/db/zapp_a8k_pos_parameter.csv b/src/main/resources/db/zapp_a8k_pos_parameter.csv new file mode 100644 index 0000000..b7b391e --- /dev/null +++ b/src/main/resources/db/zapp_a8k_pos_parameter.csv @@ -0,0 +1,125 @@ +id,service,key,valType,val,chName +1,Hbot2DCodeScanParamMgr,PBScanPos0,Pos2d,"{""x"":-20,""y"":1504}",板夹仓扫码位置0 +2,Hbot2DCodeScanParamMgr,PBScanPos1,Pos2d,"{""x"":-20,""y"":1769}",板夹仓扫码位置1 +3,Hbot2DCodeScanParamMgr,PBScanPos2,Pos2d,"{""x"":-20,""y"":2034}",板夹仓扫码位置2 +4,Hbot2DCodeScanParamMgr,PBScanPos3,Pos2d,"{""x"":-20,""y"":2299}",板夹仓扫码位置3 +5,Hbot2DCodeScanParamMgr,PBScanPos4,Pos2d,"{""x"":-20,""y"":2564}",板夹仓扫码位置4 +6,Hbot2DCodeScanParamMgr,PBScanPos5,Pos2d,"{""x"":-20,""y"":2829}",板夹仓扫码位置5 +7,Hbot2DCodeScanParamMgr,LittBS0,Pos2d,"{""x"":1653,""y"":2063}",小缓冲液扫码位置0 +8,Hbot2DCodeScanParamMgr,LittBS1,Pos2d,"{""x"":2883,""y"":2063}",小缓冲液扫码位置1 +9,Hbot2DCodeScanParamMgr,LittBS2,Pos2d,"{""x"":4113,""y"":2063}",小缓冲液扫码位置2 +10,Hbot2DCodeScanParamMgr,LittBS3,Pos2d,"{""x"":1653,""y"":3313}",小缓冲液扫码位置3 +11,Hbot2DCodeScanParamMgr,LittBS4,Pos2d,"{""x"":2883,""y"":3313}",小缓冲液扫码位置4 +12,Hbot2DCodeScanParamMgr,LittBS5,Pos2d,"{""x"":4113,""y"":3313}",小缓冲液扫码位置5 +13,Hbot2DCodeScanParamMgr,LarBS0,Pos2d,"{""x"":4867,""y"":1231}",大缓冲液扫码位置0 +14,Hbot2DCodeScanParamMgr,LarBS1,Pos2d,"{""x"":5147,""y"":1231}",大缓冲液扫码位置1 +15,Hbot2DCodeScanParamMgr,LarBS2,Pos2d,"{""x"":5427,""y"":1231}",大缓冲液扫码位置2 +16,Hbot2DCodeScanParamMgr,LarBS3,Pos2d,"{""x"":4867,""y"":1811}",大缓冲液扫码位置3 +17,Hbot2DCodeScanParamMgr,LarBS4,Pos2d,"{""x"":5147,""y"":1811}",大缓冲液扫码位置4 +18,Hbot2DCodeScanParamMgr,LarBS5,Pos2d,"{""x"":5427,""y"":1811}",大缓冲液扫码位置5 +19,TubeFeedingModuleParamMgr,TubeHolderEnterXPos,Integer,"{""value"":-46}",入料位置 +20,TubeFeedingModuleParamMgr,TubeHolderExitXPos,Integer,"{""value"":3975}",出料位置 +21,TubeFeedingModuleParamMgr,TubeHolderScanXPos,Integer,"{""value"":2202}",试管架扫描位置 +22,TubeFeedingModuleParamMgr,Tube0ScanPos,Integer,"{""value"":505}",01号试管扫描位置 +23,TubeFeedingModuleParamMgr,Tube0AltitJudgPos,Integer,"{""value"":505}",01试管高度判断位置 +24,TubeFeedingModuleParamMgr,Tube0ExistJudgPos,Integer,"{""value"":300}",01试管存在判断位置 +25,TubeFeedingModuleParamMgr,Tube0PreProcessPos,Integer,"{""value"":1225}",01试管预处理位置 +26,TubeFeedingModuleParamMgr,TubeScanServoTorque,Integer,"{""value"":500}",试管扫描伺服力矩 +27,TubeFeedingModuleParamMgr,TubeSpacing,Double,"{""value"":200.22222222222223}",试管间距 +28,HbotFixedPosParamMgr,DropLiquidPos,Pos3d,"{""x"":2143,""y"":289,""z"":1134}",滴液位置 +29,HbotSamplePosParamMgr,EmergencyTubeSamplePos,Pos3d,"{""x"":4857,""y"":3191,""z"":294}",<急诊位>取样位置 +30,HbotSamplePosParamMgr,EmergencyTubeSampleEndPos,Pos3d,"{""x"":4857,""y"":3191,""z"":440}",<急诊位>取样结束位置 +31,HbotSamplePosParamMgr,BloodHTubeSamplePos,Pos3d,"{""x"":2331,""y"":4017,""z"":294}",<全血高试管>取样位置 +32,HbotSamplePosParamMgr,BloodHTubeSampleEndPos,Pos3d,"{""x"":2325,""y"":4009,""z"":651}",<全血高试管>取样结束位置 +33,HbotSamplePosParamMgr,BloodSTubeSamplePos,Pos3d,"{""x"":2331,""y"":4017,""z"":279}",<全血低试管>取样位置 +34,HbotSamplePosParamMgr,BloodSTubeSampleEndPos,Pos3d,"{""x"":2317,""y"":4017,""z"":643}",<全血低试管>取样结束位置 +35,HbotSamplePosParamMgr,MiniTubeSamplePos,Pos3d,"{""x"":2331,""y"":3773,""z"":433}",<迷你试管>取样位置 +36,HbotSamplePosParamMgr,MinitubeSampleEndPos,Pos3d,"{""x"":2331,""y"":3773,""z"":649}",<迷你试管>取样结束位置 +37,HbotSamplePosParamMgr,MiniBloodSamplePos,Pos3d,"{""x"":2331,""y"":3773,""z"":433}",<阳普管>取样位置 +38,HbotSamplePosParamMgr,MiniBloodSampleEndPos,Pos3d,"{""x"":2331,""y"":3773,""z"":649}",<阳普管>取样结束位置 +39,HbotSamplePosParamMgr,Bulltube1P5SamplePos,Pos3d,"{""x"":2331,""y"":3773,""z"":433}",<子弹头试管1.5mL>取样位置 +40,HbotSamplePosParamMgr,Bulltube1P5SampleEndPos,Pos3d,"{""x"":2331,""y"":3773,""z"":649}",<子弹头试管1.5mL>取样结束位置 +41,HbotSamplePosParamMgr,Bulltube0P5SamplePos,Pos3d,"{""x"":2331,""y"":3773,""z"":433}",<子弹头试管0.5mL>取样位置 +42,HbotSamplePosParamMgr,Bulltube0P5SampleEndPos,Pos3d,"{""x"":2331,""y"":3773,""z"":649}",<子弹头试管0.5mL>取样结束位置 +43,HbotSamplePosParamMgr,StoolTestTubeSamplePos,Pos3d,"{""x"":2331,""y"":3773,""z"":433}",<粪便试管>取样位置 +44,HbotSamplePosParamMgr,StoolTestTubeSampleEndPos,Pos3d,"{""x"":2331,""y"":3773,""z"":649}",<粪便试管>取样结束位置 +45,HbotLittleBSPosMgr,LittleBufferGroup0_000Pos,Pos2d,"{""x"":899,""y"":1101}",第1组小瓶缓冲液的第1个位置 +46,HbotLittleBSPosMgr,LittleBufferGroup1_000Pos,Pos2d,"{""x"":2129,""y"":1095}",第1组小瓶缓冲液的第2个位置 +47,HbotLittleBSPosMgr,LittleBufferGroup2_000Pos,Pos2d,"{""x"":3348,""y"":1100}",第1组小瓶缓冲液的第3个位置 +48,HbotLittleBSPosMgr,LittleBufferGroup3_000Pos,Pos2d,"{""x"":899,""y"":2353}",第1组小瓶缓冲液的第4个位置 +49,HbotLittleBSPosMgr,LittleBufferGroup4_000Pos,Pos2d,"{""x"":2137,""y"":2339}",第1组小瓶缓冲液的第5个位置 +50,HbotLittleBSPosMgr,LittleBufferGroup5_000Pos,Pos2d,"{""x"":3360,""y"":2354}",第1组小瓶缓冲液的第6个位置 +51,HbotLittleBSPosMgr,LittleBufferGroupDX,Double,"{""value"":209.0}",小瓶缓冲液的X间距 +52,HbotLittleBSPosMgr,LittleBufferGroupDY,Double,"{""value"":209.0}",小瓶缓冲液的Y间距 +53,HbotLittleBSPosMgr,LittleBSPierceXYAppendDistance,Double,"{""value"":7.0}",小瓶缓冲液刺破XY附加距离 +54,HbotLittleBSPosMgr,LittleBSPierceZPos,Integer,"{""value"":528}",小瓶缓冲液刺破Z坐标 +55,HbotLittleBSPosMgr,LittleBSSampleZPos,Integer,"{""value"":593}",小瓶缓冲液取样Z坐标 +56,HbotLargeBottleBSPosMgr,LargeBuffer_0Pos,Pos2d,"{""x"":4576,""y"":1364}",大瓶缓冲液的第1个位置 +57,HbotLargeBottleBSPosMgr,LargeBuffer_DX,Double,"{""value"":281.0}",大瓶缓冲液的X间距 +58,HbotLargeBottleBSPosMgr,LargeBuffer_DY,Double,"{""value"":274.0}",大瓶缓冲液的Y间距 +61,HbotTipPosMgr,TipGroup0_000Pos,Pos3d,"{""x"":885,""y"":-17,""z"":582}",第1组TIP的第1个位置 +62,HbotTipPosMgr,TipGroup0_SpaceingX,Double,"{""value"":92.5}",第1组TIP的X间距 +63,HbotTipPosMgr,TipGroup0_SpaceingY,Double,"{""value"":92.8}",第1组TIP的Y间距 +64,HbotTipPosMgr,TipGroup1_000Pos,Pos3d,"{""x"":2413,""y"":-15,""z"":576}",第2组TIP的第1个位置 +65,HbotTipPosMgr,TipGroup1_SpaceingX,Double,"{""value"":92.54722222222222}",第2组TIP的X间距 +66,HbotTipPosMgr,TipGroup1_SpaceingY,Double,"{""value"":92.54722222222222}",第2组TIP的Y间距 +67,HbotTipPosMgr,TipGroup2_000Pos,Pos3d,"{""x"":3944,""y"":-20,""z"":578}",第3组TIP的第1个位置 +68,HbotTipPosMgr,TipGroup2_SpaceingX,Double,"{""value"":92.5}",第3组TIP的X间距 +69,HbotTipPosMgr,TipGroup2_SpaceingY,Double,"{""value"":92.5}",第3组TIP的Y间距 +70,HbotTipPosMgr,DropTipPos,Pos3d,"{""x"":4843,""y"":2567,""z"":545}",丢TIP位置 +71,HbotProbeSubstancePosMgr,ProbeSubstanceGroup0_000Pos,Pos3d,"{""x"":943,""y"":1141}",第1组探测物质的第1个位置 +72,HbotProbeSubstancePosMgr,ProbeSubstanceGroup1_000Pos,Pos3d,"{""x"":2172,""y"":1138}",第1组探测物质的第2个位置 +73,HbotProbeSubstancePosMgr,ProbeSubstanceGroup2_000Pos,Pos3d,"{""x"":3403,""y"":1139}",第1组探测物质的第3个位置 +74,HbotProbeSubstancePosMgr,ProbeSubstanceGroup3_000Pos,Pos3d,"{""x"":949,""y"":2389}",第1组探测物质的第4个位置 +75,HbotProbeSubstancePosMgr,ProbeSubstanceGroup4_000Pos,Pos3d,"{""x"":2179,""y"":2395}",第1组探测物质的第5个位置 +76,HbotProbeSubstancePosMgr,ProbeSubstanceGroup5_000Pos,Pos3d,"{""x"":3411,""y"":2377}",第1组探测物质的第6个位置 +77,HbotProbeSubstancePosMgr,ProbeSubstanceDX,Double,"{""value"":188.6}",探测物质的X间距 +78,HbotProbeSubstancePosMgr,ProbeSubstanceDY,Double,"{""value"":188.6}",探测物质的Y间距 +79,HbotProbeSubstancePosMgr,ProbeSubstancePierceXYAppendDistance,Double,"{""value"":5.0}",探测物质液刺破XY附加距离 +80,HbotProbeSubstancePosMgr,ProbeSubstancePierceZPos,Integer,"{""value"":475}",探测物质液刺破Z坐标 +81,HbotProbeSubstancePosMgr,ProbeSubstanceSampleZPos,Integer,"{""value"":475}",探测物质取样结束Z坐标 +82,TurntablePosParamMgr,PushPos0,Integer,"{""value"":1650}",入板位置 +83,TurntablePosParamMgr,PullPos0,Integer,"{""value"":19700}",出板位置 +84,TurntablePosParamMgr,DropLiquidPos0,Integer,"{""value"":10600}",滴液位置 +85,TurntablePosParamMgr,PosSpacing,Integer,"{""value"":1800}",位置间隔 +86,PipetteGunLLDParamMgr,DEFAULT_C_THRESHOLD,Integer,"{""value"":15}",默认电容C阈值 +87,PipetteGunLLDParamMgr,DEFAULT_P_THRESHOLD,Integer,"{""value"":50}",默认压力阈值 +88,PipetteGunLLDParamMgr,DEFAULT_LLD_TYPE,LldType,"{""value"":""kplld""}",默认LLD类型 +89,PipetteGunLLFParamMgr,EMERGENCY_TUBE_LLF_VEL,Integer,"{""value"":25}",<急诊试管>液面跟随速度 +90,PipetteGunLLFParamMgr,BLOOD_TUBE_LLF_VEL,Integer,"{""value"":25}",<全血试管>液面跟随速度 +91,PipetteGunLLFParamMgr,MINI_TUBE_LLF_VEL,Integer,"{""value"":25}",<迷你试管>液面跟随速度 +92,PipetteGunLLFParamMgr,MINI_BLOOD_LLF_VEL,Integer,"{""value"":25}",<阳普管>液面跟随速度 +93,PipetteGunLLFParamMgr,BULLET_TUBE_1P5_LLF_VEL,Integer,"{""value"":25}",<子弹头试管1.5ML>液面跟随速度 +94,PipetteGunLLFParamMgr,BULLET_TUBE_0P5_LLF_VEL,Integer,"{""value"":25}",<子弹头试管0.5ML>液面跟随速度 +95,PipetteGunLLFParamMgr,STOOL_TEST_TUBE_LLF_VEL,Integer,"{""value"":25}",<粪便试管>液面跟随速度 +96,PipetteGunLLFParamMgr,LARGE_BS_BOTTLE_LLF_VEL,Integer,"{""value"":10}",<大瓶缓冲液>液面跟随速度 +97,OptModuleExtParamsMgr,OptScanRefPos,Integer,"{""value"":4418}",光学扫描参考坐标 +98,OptModuleExtParamsMgr,FOptScanShift,Integer,"{""value"":2220}",F光学扫描偏移 +99,OptModuleExtParamsMgr,FOptEmissionIntensity,Integer,"{""value"":180}",F发射强度 +100,OptModuleExtParamsMgr,FOptScanGainVal,Double,"{""value"":5.0}",F光学扫描放大倍数 +101,OptModuleExtParamsMgr,TOptScanShift,Integer,"{""value"":1080}",T光学扫描偏移 +102,OptModuleExtParamsMgr,TOptEmissionIntensity,Integer,"{""value"":20}",T发射强度 +103,OptModuleExtParamsMgr,TOptScanGainVal,Double,"{""value"":0.5}",T光学扫描放大倍数 +104,OptModuleParamsMgr,PullerTargetPos,Integer,"{""value"":1147}",拉板目标位置 +105,OptModuleParamsMgr,OptScanerDropPos,Integer,"{""value"":-349}",丢板坐标 +106,OptModuleParamsMgr,OptScanerScandbyPos,Integer,"{""value"":305}",扫描待机位 +107,TemperatureCtrlParamMgr,IncubatorTCMTempOffset,Double,"{""value"":0}",<孵育仓>温度偏移 +108,TemperatureCtrlParamMgr,PlatesBoxTCMTempOffset,Double,"{""value"":0}",<板夹仓>温度偏移 +109,TubePreProcesPosParamMgr,GripperServoOpenPos,Integer,"{""value"":1637}",<抓手>张开位置 +110,TubePreProcesPosParamMgr,GripperServoTakeCapPos,Integer,"{""value"":1519}",<抓手>取试管位置 +111,TubePreProcesPosParamMgr,GripperRedundancyHeight,Integer,"{""value"":59}",<抓手>冗余高度 +112,TubePreProcesPosParamMgr,ShakeClampMotorClampPos,Integer,"{""value"":5}",<摇匀试管夹>夹紧位 +113,TubePreProcesPosParamMgr,ShakeClampMotorReleasePos,Integer,"{""value"":90}",<摇匀试管夹>释放位 +114,TubePreProcesPosParamMgr,YServoTakeTubePos,Integer,"{""value"":2907}",取试管位置 +115,TubePreProcesPosParamMgr,YServoShakePos,Integer,"{""value"":1956}",摇匀位置 +116,TubePreProcesPosParamMgr,ZMotorTakeHTubePos,Integer,"{""value"":749}",取高试管位置 +117,TubePreProcesPosParamMgr,ZMotorTakeSTubePos,Integer,"{""value"":985}",取低试管位置 +118,TubePreProcesPosParamMgr,ZMotorShakeTubePos,Integer,"{""value"":773}",摇匀放置位置 +119,PlatesBoxPosParamMgr,Ch0YPos,Integer,"{""value"":-17}",通道0Y轴位置 +120,PlatesBoxPosParamMgr,Ch5YPos,Integer,"{""value"":1308}",通道5Y轴位置 +121,PlatesBoxPosParamMgr,PushEndXPos,Integer,"{""value"":1160}",推杆到位坐标 +122,PipetteGunExParamMgr,VOLUME_CALIBRATION_COEFFICIENT,Double,null,体积校准系数 +123,PipetteGunExParamMgr,VOLUME_CALIBRATION_COEFFICIENT_A,Double,"{""value"":1.033378}",体积校准系数-A +124,PipetteGunExParamMgr,VOLUME_CALIBRATION_COEFFICIENT_B,Double,"{""value"":2.76625}",体积校准系数-B +125,HbotLargeBottleBSPosMgr,LargeBottleBufferLLDStartZAxisPos,Double,"{""value"":90}",大瓶缓冲液LLD起始Z轴坐标 +126,HbotLargeBottleBSPosMgr,LargeBottleBufferBottomZAxisPos,Double,"{""value"":415}",大瓶缓冲液瓶底Z轴坐标 \ No newline at end of file