Autres interfaces
Ce guide présente d’autres interfaces d’Adapter, comme indiqué ci-dessous.
Service Notify
Lorsqu’un projet Mech-Viz atteint une branche ou une étape particulière et qu’une fonction correspondante du programme Adapter doit être appelée, vous pouvez ajouter une étape Notify dans le projet Mech-Viz.
Exemple
Par exemple, une fonction est écrite dans le programme Adapter pour incrémenter le nombre d’objets dépalletisés. Nous pouvons alors ajouter une étape Notify après la dernière étape du processus de dépalletisation. Lorsque le projet s’exécute jusqu’à l’étape Notify, Adapter peut être déclenché pour appeler la fonction. La fonction d’exemple est présentée ci-dessous.
-
Créez une classe qui hérite de la classe parente NotifyService.
from interface.services import NotifyService, register_service class NotifyService(NotifyService): service_type = "notify" service_name = "FANUC_M410IC_185_COMPACT" def __init__(self, update_success_num, update_fail_num): self.update_success_num = update_success_num self.update_fail_num = update_fail_num def handle_message(self, msg): if msg == "Success": self.update_success_num() elif msg == "Fail": self.update_fail_num()Lorsque Mech-Viz exécute l’étape Notify et qu’un message “Success” est envoyé, Adapter appellera la fonction update_success_num(); tandis qu’un message “Fail” déclenchera l’appel par Adapter de la fonction update_fail_num().
-
Instanciez la classe NotifyService et enregistrez le service dans la classe qui contrôle le programme principal de Mech-Viz.
class MyClient(TcpClientAdapter): def __init__(self, host_address): super().__init__(host_address) self._register_service() def _register_service(self): self.robot_service = NotifyService(self.update_success_num, self.update_fail_num) self.server, port = register_service(self.hub_caller, self.robot_service) def update_success_num(self): # the num of unstack successfully plus 1 self.success_num += 1 def update_fail_num(self): # the num of unstack fiplus 1 self.fail_num += 1 -
Ajoutez une étape Notify à un emplacement approprié dans le flux de travail de Mech-Viz.
Notez que les paramètres Adapter Name et Message de l’étape “Notify” correspondent aux attributs “service_name” et “msg” de la classe NotifyService. Assurez-vous que les valeurs des paramètres sont identiques à celles des attributs.
Une fois le projet exécuté, si le service Notify est correctement enregistré, “service_type” et “service_name” s’afficheront dans l’onglet Console du panneau des journaux de Mech-Vision.
Service VisionWatcher
Après l’exécution de Mech-Vision, certains résultats sont produits, par exemple vision result: False, ‘function’: ‘posesFound’, ‘vision_name’: ‘TJTvision-3’}. En cas de problème, Adapter peut envoyer des messages d’erreur via le service VisionWatcher.
Exemple
-
Créez une classe qui hérite de la classe VisionResultSelectedAtService.
from interface.services import VisionResultSelectedAtService, register_service class VisionWatcher(VisionResultSelectedAtService): def __init__(self, send_err_no_cloud): super().__init__() self.send_err_no_cloud = send_err_no_cloud def poses_found(self,result): has_cloud_in_roi = not result.get("noCloudInRoi", False) if not has_cloud_in_roi: time.sleep(2) self.send_err_no_cloud()La classe fille VisionWatcher doit surcharger la fonction poses_found() de la classe parente, de sorte que la logique d’appel de la fonction send_err_no_cloud() qui envoie les messages d’erreur dans Adapter soit modifiée dans poses_found(). Pendant l’exécution, la valeur des points de vision retournée par Mech-Vision sera transmise au paramètre result de poses_found().
-
Instanciez VisionWatcher dans la classe qui contrôle le programme principal de Mech-Viz.
class MyClient(TcpClientAdapter): def __init__(self, host_address): super().__init__(host_address) self._register_service() def _register_service(self): self.robot_service = VisionWatcher(self.send_err_no_cloud) self.server, port = register_service(self.hub_caller, self.robot_service) def send_err_no_cloud(self): # send no cloud error message self.send("12,NoCloudErr,done".encode())Lors de l’instanciation de la classe VisionWatcher, la fonction send_err_no_cloud() est transmise à VisionWatcher() en tant que paramètre. En l’absence de nuages de points, conformément à la logique de poses_found(), la fonction d’envoi des messages d’erreur sera appelée.
Après le démarrage du projet, si le service VisionWatcher est correctement enregistré par Adapter, il s’affichera dans l’onglet Console du panneau des journaux de Mech-Vision.