Commit 7f0aa98e authored by 徐生海's avatar 徐生海

Initial commit

parent c7cc4297
## ide
**/.vs
**/.idea
work.md
__pycache__/
*.py[cod]
$__pycache__$
logs/
Resource/
dist/
build/
dist1/
log/
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName : AppEventBusBusiness.py
@Account : Administrator
@Time : 2025/9/3 13:10
@Author : xsh
@Description:
"""
from AppInterfaces.EventInterfaces import * #
from AppBackEnd.BackEndEventBus.WebEventBus import WebEventBus #
from AppBackEnd.BackEndEventBus.CameraScanningBus import CameraScanningBus #
from AppBackEnd.BackEndEventBus.ProcessCellBus import ProcessCellBus #
from AppBackEnd.BackEndEventBus.ScanningStatusBus import ScanningStatusBus #
from AppBackEnd.BackEndEventBus.SlideScanningBus import SlideScanningBus #
from AppBackEnd.BackEndEventBus.SlideFocusingBus import SlideFocusingBus #
from AppBackEnd.BackEndEventBus.WebEventBus import WebEventBus #
from AppBackEnd.BackEndEventBus.WebAPiBus import WebAPIBus #
from AppBackEnd.BackEndEventBus.AppEventBus import AppEventBus #
\ No newline at end of file
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:AppWebAPIBusiness.py
@Description:
@Author:xsh
@Time:2026/2/4 17:58
@Department:研发部
@Copyright:©2019-2026
"""
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:AppWebAPIs.py
@Description:
@Author:xsh
@Time:2026/2/5 9:21
@Department:研发部
@Copyright:©2019-2026
"""
from AppBackEnd.WebBusinessInterface import WebBusinessInterface #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.ChamberStatusBusiness import ChamberStatusBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.ClearPreviewBusiness import ClearPreviewBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.ConnectionStatusBusiness import ConnectionStatusBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.GetCustomDataBusiness import GetCustomDataBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.PushTemplateBusiness import PushTemplateBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.ScanningCompleteBusiness import ScanningCompleteBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.ScanningDataBusiness import ScanningDataBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.ScanningStatusBusiness import ScanningStatusBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.SelectClassifierBusiness import SelectClassifierBusiness #
from AppBackEnd.WebAPIBusiness.WebGetPutBusiness.SelectScanTemplateBusiness import SelectScanTemplateBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.AppendScanTemplateBusiness import AppendScanTemplateBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.ChangedLanguageBusiness import ChangedLanguageBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.ExitScanningBusiness import ExitScanningBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.JumpScanningBusiness import JumpScanningBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.PauseScanningBusiness import PauseScanningBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.SetCustomDataBusiness import SetCustomDataBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.ClearWarningBusiness import ClearWarningBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.StartScanningBusiness import StartScanningBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.StopScanningBusiness import StopScanningBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.UpdateScanTemplateBusiness import UpdateScanTemplateBusiness #
from AppBackEnd.WebAPIBusiness.WebSetBusiness.RemoveScanTemplateBusiness import RemoveScanTemplateBusiness #
from AppBackEnd.WebAPIBusiness.AppWebAPIFactory import AppWebAPIFactory #
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:ChamberDropBusiness.py
@Description:
@Author:xsh
@Time:2026/2/5 16:16
@Department:研发部
@Copyright:©2019-2026
"""
import gc
from PyQt5 import Qt #
from abc import abstractmethod #
from AppInterfaces.bases import * #
from AppUtils.utils import * #
from Settings import * #
from AppCore.Levels import * #
from AppCore.Requests import * #
from AppCore.DBModels import * #
from AppInterfaces.ReadInterfaces import * #
from AppInterfaces.ManagerInterfaces import * #
from AppInterfaces.EventInterfaces import * #
from AppInterfaces.ImplInterfaces import * #
from AppInterfaces.ConfigureInterfaces import * #
from AppInterfaces.AlgorithmInterfaces import * #
from AppBackEnd.AppBusinessInterface import AppBusinessInterface #
from AppBackEnd.AppBusinessController import AppBusinessController #
from AppLog.logHelper import *
class ChamberDropBusiness(Qt.QObject, AppBusinessController):
def __init__(self, parent: Qt.QObject = None):
super(ChamberDropBusiness, self).__init__(parent)
self.Initialization(self.__class__.__name__, self, parent)
self.initModules(parent)
def initValue(self):
self.initScanLevel()
def deleValue(self):
self.deleModules()
def initScanLevel(self):
self.ScanLevel = ScanStatusLevel.DropChamberSlide_Status
@property
def isValid(self) -> bool:
return self.hasScanLevel and self.hasConfig and self.hasSystemConfig and self.hasHitBotConfig and self.hasHardWare and self.hasAppStatus and self.hasApplication and self.hasAlgorithm and self.hasEventBus and self.hasWebAPIEvent
@property
def isAvailable(self) -> bool:
return self.isValid and self.hasHitBot and self.hasHitBotConfig and self.status.isHitBotAvailable
def WaitDone(self, **args) -> int:
isWrong: int = RECODE_FAILURE
try:
self.initScanLevel()
chamber_number : int = AppConvert.ObjectConvert(args.get("chamber_number" , None ), int )
isSafe : bool = AppConvert.ObjectConvert(args.get("isSafe" , False ), bool )
isExit : bool = AppConvert.ObjectConvert(args.get("isExit" , True ), bool )
slide_number : int = AppConvert.ObjectConvert(args.get("slide_number" , None ), int )
if isinstance(chamber_number, int) and isinstance(slide_number, int):
isWrong = self.chamber_slide_droping(chamber_number, slide_number, isExit, isSafe)
SCAN_STATUS: int = self.process_scanning_status()
if SCAN_STATUS == RECODE_CHANGED:
isWrong = RECODE_SUCCEED
elif RECODE_SUCCEED == isWrong:
self.setStartScanningStatus(chamber_number, slide_number, self.status.TrayNumber, self.ScanLevel)
else:
if self.status.isHitBotAlarm(isWrong):
self.status.setScanningStatus(isWrong)
self.status.setHitBotAvailable(False)
self.setStartScanningStatus(chamber_number, slide_number, self.status.TrayNumber, ScanStatusLevel.DropChamberSlide_Warning_Status)
except Exception as e:
logWARNING << AppUtils.toString(e)
isWrong = RECODE_FAILURE
return isWrong
def chamber_slide_droping(self, chamber_number: int, slide_number: int, isExit: bool = True, isSafe: bool = False) -> int:
isWrong : int = RECODE_FAILURE
if not self.isAvailable:
return isWrong
isWrong = self.ready_droping(chamber_number, slide_number)
if RECODE_SUCCEED != isWrong:
return isWrong
if isSafe:
self.hitbot.moveToSafePosition(self.status.isSlowChamber(chamber_number))
"""处理片仓安装状态"""
while not self.waitForChamberAvailable():
AppTimeLoop.processEvents(self.system.WarningWaitTimes)
"""处理门的状态"""
self.waitForCloseTheDoor()
"""处理暂停 退出状态"""
SCANSTATUS: int = self.process_scanning_status()
if RECODE_CHANGED == SCANSTATUS and isExit:
if isSafe:
self.hitbot.ToSafePosition(self.status.isSlowChamber(chamber_number))
return RECODE_SUCCEED
isWrong = self.waitForChamberDropSlide(chamber_number, slide_number)
self.status.setJumpScanning(False)
if self.status.isHitBotAlarm(isWrong):
self.hitbotconfig.setIsClamp(False)
self.status.setHitBotAvailable(False)
return isWrong
if RECODE_SUCCEED == isWrong:
"""判断夹取状态"""
"""如果所有动作完成 把玻片状态改为1 """
ChamberStatusModel.changed({
ChamberStatusModel.LState: 1,
ChamberStatusModel.RState: 1
}, ChamberStatusModel.ChamberGroupNumber == chamber_number, ChamberStatusModel.ChamberRowNumber == slide_number)
self.hitbotconfig.setIsClamp(False)
if isSafe and RECODE_SUCCEED == isWrong:
self.hitbot.moveToSafePosition(self.status.isSlowChamber(chamber_number))
if RECODE_SUCCEED == isWrong:
self.status.setJumpScanningAvailable(False)
"""处理片仓安装状态"""
while not self.waitForChamberAvailable():
AppTimeLoop.processEvents(self.system.WarningWaitTimes)
"""处理门的状态"""
self.waitForCloseTheDoor()
"""处理暂停 退出状态"""
SCANSTATUS: int = self.process_scanning_status()
if RECODE_CHANGED == SCANSTATUS and isExit:
if isSafe:
self.hitbot.ToSafePosition(self.status.isSlowChamber(chamber_number))
return RECODE_SUCCEED
else:
self.status.setChamberActionStatus(chamber_number, slide_number, ScanStatusLevel.DropChamberSlide_Warning_Status)
return isWrong
def ready_droping(self, chamber_number: int, row_number: int) -> int:
isWrong : int = RECODE_FAILURE
MinChamberNumber: int
MaxChamberNumber: int
MinRowNumber : int
MaxRowNumber : int
MinRowNumber , MaxRowNumber = self.system.getRowRange ()
MinChamberNumber, MaxChamberNumber = self.system.getChamberRange ()
if MinChamberNumber <= chamber_number <= MaxChamberNumber and MinRowNumber <= row_number <= MaxRowNumber:
"""如果当前玻片不能取 直接退出"""
# if not ChamberStatusModel.IsPickAvailable(chamber_number, row_number):
# return RECODE_FAILURE
if not self.isAvailable:
return RECODE_FAILURE
isWrong = RECODE_SUCCEED
return isWrong
\ No newline at end of file
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:ChamberPickBusiness.py
@Description:
@Author:xsh
@Time:2026/2/5 16:16
@Department:研发部
@Copyright:©2019-2026
"""
import gc
from PyQt5 import Qt #
from abc import abstractmethod #
from AppInterfaces.bases import * #
from AppUtils.utils import * #
from Settings import * #
from AppCore.Levels import * #
from AppCore.Requests import * #
from AppCore.DBModels import * #
from AppInterfaces.ReadInterfaces import * #
from AppInterfaces.ManagerInterfaces import * #
from AppInterfaces.EventInterfaces import * #
from AppInterfaces.ImplInterfaces import * #
from AppInterfaces.ConfigureInterfaces import * #
from AppInterfaces.AlgorithmInterfaces import * #
from AppBackEnd.AppBusinessInterface import AppBusinessInterface #
from AppBackEnd.AppBusinessController import AppBusinessController #
from AppLog.logHelper import *
class ChamberPickBusiness(Qt.QObject, AppBusinessController):
def __init__(self, parent: Qt.QObject = None):
super(ChamberPickBusiness, self).__init__(parent)
self.Initialization(self.__class__.__name__, self, parent)
self.initModules(parent)
def initValue(self):
self.initScanLevel()
def deleValue(self):
self.deleModules()
def initScanLevel(self):
self.ScanLevel = ScanStatusLevel.PickChamberSlide_Status
@property
def isValid(self) -> bool:
return self.hasScanLevel and self.hasConfig and self.hasSystemConfig and self.hasHitBotConfig and self.hasHardWare and self.hasAppStatus and self.hasApplication and self.hasAlgorithm and self.hasEventBus and self.hasWebAPIEvent
@property
def isAvailable(self) -> bool:
return self.isValid and self.hasHitBot and self.hasHitBotConfig and self.status.isHitBotAvailable
def WaitDone(self, **args) -> int:
isWrong: int = RECODE_FAILURE
try:
self.initScanLevel()
chamber_number : int = AppConvert.ObjectConvert(args.get("chamber_number" , None ), int )
isSafe : bool = AppConvert.ObjectConvert(args.get("isSafe" , False ), bool )
isExit : bool = AppConvert.ObjectConvert(args.get("isExit" , True ), bool )
slide_number : int = AppConvert.ObjectConvert(args.get("slide_number" , None ), int )
if isinstance(chamber_number, int) and isinstance(slide_number, int):
isWrong = self.chamber_slide_picking(chamber_number, slide_number, isExit, isSafe)
SCAN_STATUS: int = self.process_scanning_status()
if SCAN_STATUS == RECODE_CHANGED:
isWrong = RECODE_SUCCEED
elif RECODE_SUCCEED == isWrong:
self.setStartScanningStatus(chamber_number, slide_number, self.status.TrayNumber, self.ScanLevel)
else:
if self.status.isHitBotAlarm(isWrong):
self.status.setScanningStatus(isWrong)
self.status.setHitBotAvailable(False)
self.setStartScanningStatus(chamber_number, slide_number, self.status.TrayNumber, ScanStatusLevel.PickChamberSlide_Warning_Status)
except Exception as e:
logWARNING << AppUtils.toString(e)
isWrong = RECODE_FAILURE
return isWrong
def chamber_slide_picking(self, chamber_number: int, slide_number: int, isExit: bool, isSafe: bool):
isWrong: int = RECODE_FAILURE
if not self.isAvailable:
return isWrong
if not self.readyPicking(chamber_number, slide_number):
return isWrong
if isSafe:
self.hitbot.moveToSafePosition(self.status.isSlowChamber(chamber_number))
"""处理片仓安装状态"""
while not self.waitForChamberAvailable():
AppTimeLoop.processEvents(self.system.WarningWaitTimes)
"""处理门的状态"""
self.waitForCloseTheDoor()
"""处理暂停 退出状态"""
SCANSTATUS: int = self.process_scanning_status()
if RECODE_CHANGED == SCANSTATUS and isExit:
if isSafe:
self.hitbot.ToSafePosition(self.status.isSlowChamber(chamber_number))
return RECODE_SUCCEED
isWrong = self.waitForChamberPickSlide(chamber_number, slide_number)
if self.status.isHitBotAlarm(isWrong):
self.hitbotconfig.setIsClamp(False)
self.status.setHitBotAvailable(False)
return isWrong
if RECODE_SUCCEED == isWrong:
"""判断夹取状态"""
isGrab: bool = self.hitbot.IsGrab()
self.hitbotconfig.setIsClamp(isGrab)
if not isGrab:
isWrong = self.waitForPickWarning(chamber_number, slide_number)
else:
self.hitbotconfig.setIsClamp(True)
else:
self.hitbotconfig.setIsClamp(False)
if isSafe and RECODE_SUCCEED == isWrong:
self.hitbot.moveToSafePosition(self.status.isSlowChamber(chamber_number))
if RECODE_SUCCEED == isWrong:
"""处理片仓安装状态"""
while not self.waitForChamberAvailable():
AppTimeLoop.processEvents(self.system.WarningWaitTimes)
"""处理门的状态"""
self.waitForCloseTheDoor()
"""处理暂停 退出状态"""
SCANSTATUS: int = self.process_scanning_status()
if RECODE_CHANGED == SCANSTATUS and isExit:
if isSafe:
self.hitbot.ToSafePosition(self.status.isSlowChamber(chamber_number))
return RECODE_SUCCEED
else:
self.status.setChamberActionStatus(chamber_number, slide_number, ScanStatusLevel.PickChamberSlide_Warning_Status)
return isWrong
def readyPicking(self, chamber_number: int, slide_number: int) -> int:
isWrong: int = RECODE_FAILURE
MinChamberNumber: int
MaxChamberNumber: int
MinRowNumber : int
MaxRowNumber : int
MinRowNumber , MaxRowNumber = self.system.getRowRange ()
MinChamberNumber, MaxChamberNumber = self.system.getChamberRange ()
if MinChamberNumber <= chamber_number <= MaxChamberNumber and MinRowNumber <= slide_number <= MaxRowNumber:
"""如果当前玻片不能取 直接退出"""
if not self.status.isPickAvailable(chamber_number, slide_number):
return RECODE_FAILURE
if not self.isAvailable:
return RECODE_FAILURE
isWrong = RECODE_SUCCEED
return isWrong
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:ScanningBusiness.py
@Description:
@Author:xsh
@Time:2026/2/5 16:56
@Department:研发部
@Copyright:©2019-2026
"""
from AppBackEnd.BackEndBusiness.CellFocusingBusiness import CellFocusingBusiness #
from AppBackEnd.BackEndBusiness.ChamberDropBusiness import ChamberDropBusiness #
from AppBackEnd.BackEndBusiness.ChamberCheckBusiness import ChamberCheckBusiness #
from AppBackEnd.BackEndBusiness.ChamberPickBusiness import ChamberPickBusiness #
from AppBackEnd.BackEndBusiness.SlideFocusingBusiness import SlideFocusingBusiness #
from AppBackEnd.BackEndBusiness.SlideOilingBusiness import SlideOilingBusiness #
from AppBackEnd.BackEndBusiness.SlideScanningBusiness import SlideScanningBusiness #
from AppBackEnd.BackEndBusiness.SlideTablePickBusiness import SlideTablePickBusiness #
from AppBackEnd.BackEndBusiness.SlideTableDropBusiness import SlideTableDropBusiness #
from AppBackEnd.BackEndBusiness.ChamberScanningBusiness import ChamberScanningBusiness #
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:SlideTableDropBusiness.py
@Description:
@Author:xsh
@Time:2026/2/5 16:17
@Department:研发部
@Copyright:©2019-2026
"""
import gc
from PyQt5 import Qt #
from abc import abstractmethod #
from AppInterfaces.bases import * #
from AppUtils.utils import * #
from Settings import * #
from AppCore.Levels import * #
from AppCore.Requests import * #
from AppCore.DBModels import * #
from AppInterfaces.ReadInterfaces import * #
from AppInterfaces.ManagerInterfaces import * #
from AppInterfaces.EventInterfaces import * #
from AppInterfaces.ImplInterfaces import * #
from AppInterfaces.ConfigureInterfaces import * #
from AppInterfaces.AlgorithmInterfaces import * #
from AppBackEnd.AppBusinessInterface import AppBusinessInterface #
from AppBackEnd.AppBusinessController import AppBusinessController #
from AppLog.logHelper import *
class SlideTableDropBusiness(Qt.QObject, AppBusinessController):
def __init__(self, parent: Qt.QObject = None):
super(SlideTableDropBusiness, self).__init__(parent)
self.Initialization(self.__class__.__name__, self, parent)
self.initModules(parent)
def initValue(self):
self.initScanLevel()
def deleValue(self):
self.deleModules()
def initScanLevel(self):
self.ScanLevel = ScanStatusLevel.DropTraySlide_Status
@property
def isValid(self) -> bool:
return self.hasScanLevel and self.hasConfig and self.hasSystemConfig and self.hasHitBotConfig and self.hasHardWare and self.hasAppStatus and self.hasApplication and self.hasAlgorithm and self.hasEventBus and self.hasWebAPIEvent
@property
def isAvailable(self) -> bool:
return self.isValid and self.hasHitBot and self.hasHitBotConfig and self.status.isHitBotAvailable
def WaitDone(self, **args) -> int:
isWrong: int = RECODE_FAILURE
try:
self.initScanLevel()
chamber_number : int = AppConvert.ObjectConvert(args.get("chamber_number" , None ), int )
slide_number : int = AppConvert.ObjectConvert(args.get("slide_number" , None ), int )
tray_number : int = AppConvert.ObjectConvert(args.get("tray_number" , None ), int )
isSafe : bool = AppConvert.ObjectConvert(args.get("isSafe" , False ), bool )
isExit : bool = AppConvert.ObjectConvert(args.get("isExit" , True ), bool )
if isinstance(chamber_number, int) and isinstance(slide_number, int) and isinstance(tray_number, int):
isWrong = self.tray_dropping(chamber_number, slide_number, tray_number, isExit, isSafe)
SCAN_STATUS: int = self.process_scanning_status()
if SCAN_STATUS == RECODE_CHANGED:
isWrong = RECODE_SUCCEED
elif RECODE_SUCCEED == isWrong:
self.setStartScanningStatus(chamber_number, slide_number, tray_number, self.ScanLevel)
else:
if self.status.isHitBotAlarm(isWrong):
self.status.setScanningStatus(isWrong)
self.status.setHitBotAvailable(False)
self.setStartScanningStatus(chamber_number, slide_number, tray_number, ScanStatusLevel.DropTraySlide_Warning_Status)
except Exception as e:
logWARNING << AppUtils.toString(e)
isWrong = RECODE_FAILURE
return isWrong
def ready_tray_droping(self, chamber_number: int, slide_number: int, tray_number: int, isExit: bool = False, isSafe: bool = False):
isWrong: int = RECODE_FAILURE
MinChamberNumber : int
MaxChamberNumber : int
MinRowNumber : int
MaxRowNumber : int
MinRowNumber , MaxRowNumber = self.system.getRowRange()
MinChamberNumber, MaxChamberNumber = self.system.getChamberRange()
if MinChamberNumber <= chamber_number <= MaxChamberNumber and MinRowNumber <= slide_number <= MaxRowNumber:
try:
"""如果当前夹抓没有夹到玻片 退出"""
if not self.hitbotconfig.getIsClamp:
if not self.hitbot.IsGrab():
return RECODE_FAILURE
self.hitbotconfig.setIsClamp(True)
if not self.isAvailable:
return RECODE_FAILURE
if self.status.isTrayAvailable(tray_number):
isWrong = RECODE_FAILURE
else:
isWrong = RECODE_SUCCEED
except Exception as e:
AppUtils.print_Exception(e)
return isWrong
def tray_dropping(self, chamber_number: int, slide_number: int, tray_number: int, isExit: bool = False, isSafe: bool = False):
isWrong: int = RECODE_FAILURE
if not self.isAvailable:
return isWrong
isWrong = self.ready_tray_droping(chamber_number, slide_number, tray_number, isExit, isSafe)
if RECODE_SUCCEED != isWrong:
if isSafe:
self.hitbot.ToSafePosition(False)
return isWrong
if isSafe:
self.hitbot.ToSafePosition(False)
"""处理片仓安装状态"""
while not self.waitForChamberAvailable():
AppTimeLoop.processEvents(self.system.WarningWaitTimes)
"""处理门的状态"""
self.waitForCloseTheDoor()
"""处理暂停 退出状态"""
SCANSTATUS: int = self.process_scanning_status()
if RECODE_CHANGED == SCANSTATUS and isExit:
if isSafe:
self.hitbot.ToSafePosition(False)
return RECODE_SUCCEED
isWrong = self.waitForSlideTableDroping(chamber_number, tray_number)
self.status.setTrayStatus(tray_number, RECODE_SUCCEED == isWrong)
if RECODE_SUCCEED != isWrong:
self.status.setChamberActionStatus(chamber_number, slide_number, ScanStatusLevel.DropTraySlide_Warning_Status)
self.status.setSlideTableDropSlideInfo(chamber_number, slide_number, tray_number)
# if RECODE_SUCCEED == isWrong:
# self.hitbotconfig.setIsClamp(False)
if self.status.isHitBotAlarm(isWrong):
return isWrong
if isSafe and RECODE_SUCCEED == isWrong:
self.hitbot.moveToSafePosition()
"""处理片仓安装状态"""
while not self.waitForChamberAvailable():
AppTimeLoop.processEvents(self.system.WarningWaitTimes)
"""处理门的状态"""
self.waitForCloseTheDoor()
"""处理暂停 退出状态"""
SCANSTATUS: int = self.process_scanning_status()
if RECODE_CHANGED == SCANSTATUS and isExit:
if isSafe:
self.hitbot.ToSafePosition(False)
return RECODE_SUCCEED
return isWrong
\ No newline at end of file
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:__init__.py.py
@Description:
@Author:xsh
@Time:2026/2/4 17:57
@Department:研发部
@Copyright:©2019-2026
"""
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:AppEventBuss.py
@Description:
@Author:xsh
@Time:2026/2/5 13:14
@Department:研发部
@Copyright:©2019-2026
"""
from AppBackEnd.BackEndEventBus.WebEventBus import WebEventBus #
from AppBackEnd.BackEndEventBus.CameraScanningBus import CameraScanningBus #
from AppBackEnd.BackEndEventBus.ProcessCellBus import ProcessCellBus #
from AppBackEnd.BackEndEventBus.ScanningStatusBus import ScanningStatusBus #
from AppBackEnd.BackEndEventBus.SlideScanningBus import SlideScanningBus #
from AppBackEnd.BackEndEventBus.SlideFocusingBus import SlideFocusingBus #
from AppBackEnd.BackEndEventBus.WebEventBus import WebEventBus #
from AppBackEnd.BackEndEventBus.WebAPiBus import WebAPIBus #
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:__init__.py.py
@Description:
@Author:xsh
@Time:2026/2/4 17:57
@Department:研发部
@Copyright:©2019-2026
"""
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:Business.py
@Description:
@Author:xsh
@Time:2026/2/5 17:40
@Department:研发部
@Copyright:©2019-2026
"""
from AppBackEnd.BackEndBusiness.CellFocusingBusiness import CellFocusingBusiness #
from AppBackEnd.BackEndBusiness.ChamberDropBusiness import ChamberDropBusiness #
from AppBackEnd.BackEndBusiness.ChamberCheckBusiness import ChamberCheckBusiness #
from AppBackEnd.BackEndBusiness.ChamberPickBusiness import ChamberPickBusiness #
from AppBackEnd.BackEndBusiness.SlideFocusingBusiness import SlideFocusingBusiness #
from AppBackEnd.BackEndBusiness.SlideOilingBusiness import SlideOilingBusiness #
from AppBackEnd.BackEndBusiness.SlideScanningBusiness import SlideScanningBusiness #
from AppBackEnd.BackEndBusiness.SlideTablePickBusiness import SlideTablePickBusiness #
from AppBackEnd.BackEndBusiness.SlideTableDropBusiness import SlideTableDropBusiness #
from AppBackEnd.BackEndBusiness.ChamberScanningBusiness import ChamberScanningBusiness #
from AppBackEnd.AppBusinessInterface import AppBusinessInterface #
from AppBackEnd.AppBusinessController import AppBusinessController #
from AppBackEnd.AppScanningFlow import AppScanningFlow #
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:__init__.py.py
@Description:
@Author:xsh
@Time:2026/2/5 9:16
@Department:研发部
@Copyright:©2019-2026
"""
#!D:\IDE\Anaconda3\envs\Microscope_Scan python
# -*- coding: UTF-8 -*-
"""
@FileName:__init__.py.py
@Description:
@Author:xsh
@Time:2026/2/5 9:16
@Department:研发部
@Copyright:©2019-2026
"""
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment