---
# System prepended metadata

title: AOI PLC 流程

---

# AOI PLC 流程
1. 確認客戶需求及傳遞流程
2. 定義交握訊號
3. 進行訊號傳遞

## Example yonghao
* **傳遞流程**
PLC與PC之間進行訊息傳遞，將開啟相機、開始拍照、拍照完成的三個進度，使用modbus進行訊息傳遞。
PLC為廠商機械端的位置，PC為訊息端的位置。

* **交握訊號**
PLC=99；PC=98
yonghao的例子中使用99及98當作訊息傳遞的儲存位置

* **訊號傳遞**
相機準備失敗，98=0
相機準備完成，98=1
欲進行相機1拍照，99=1
相機1拍照，98=2
相機1拍照完成，98=3
99=1為相機1；99=2為相機2

## 程式碼撰寫流程
1. 確認檢驗模式(自行設定)
```
mode = check_mode()
```
2. modbus連結
```
modbus_client = connect_modbus()
```
3. 初始化客戶端資訊以進行連結
```
mqtt_client = mqtt.Client()
mqtt_broker_ip = "127.0.0.1"
mqtt_client.connect(mqtt_broker_ip, 1883, 60)
```
* 進入無限迴圈(while True)
    1. 持續發布狀態至伺服器
    ```
    publish_status()
    ```
    2. 重置全域狀態與照片狀態
    ```
    reset_global_state()
    reset_photo_state()
    ```
    3. 開啟相機
    ```
    camera_check()
    ```
    4. 開始拍照
    ```
    take_photo
    ```
    5. 將相片儲存
    ```
    save_path = f"photo/{round_time}/{sample}/{count}"
    ```
### 注意事項
1. 確認相機類別，使用對應驅動程式
2. modbus連結為相互交握訊號之裝置
```
connect_modbus()
```
3. 在進行推論的時候，需要一個字典將訊號不斷寫入Modbus寄存器中，避免訊號未傳入
```
modbus_write()
```
4. 在一開始需要設定相關數值的初始值
```
state = {}
photo_base64 = {}
reset_global_state()
reset_photo_state()
publish_status()
```