Shifu の高度な機能: FSM (有限状態マシン) の実装

導入

有限状態機械(英語: finite-state machine 、略称: FSM ) は、有限状態オートマトン(英語: finite-state automaten、略称: FSA )とも呼ばれ、ステート マシンとも呼ばれ、有限数の状態とこれらの間の状態です。状態 伝達や動作などの動作の数学的計算モデル。百度百科事典を見る

FSM はいくつかの状態と遷移で構成され、各状態はシステムの潜在的な状態を表し、各遷移はある状態から別の状態への遷移を表します。FSM の実行プロセスは、入力を受信することで遷移をトリガーし、入力を受信すると、現在の状態から次の状態に遷移します。

エンジニアリングでは、FSM を使用して機械の制御システムを記述することができます。たとえば、機械の制御システムには、「実行中」、「一時停止」、「停止」などの複数の状態がある場合があります。各状態には異なる入力と出力があり、異なる遷移ルール​​があります。たとえば、マシンが「Run」状態にあるときに、「Pause」の入力を受信するとマシンは「Pause」状態に移行し、「Stop」の入力を受信するとマシンの実行が停止することがあります。

デザイン

MQTT DeviceShifuで最も単純な FSM モデルを実装します。デバイスの初期状態はアイドル状態です。MQTT DeviceShifuに制御コマンド ( ) をデバイスに送信させた後controlMsg、デバイスが制御コマンドを完了すると、デバイスはアイドル状態からビジー状態に移行します (ビジー状態になると他の制御コマンドを受信できなくなります)。 、デバイスは MQTT ブローカーに戻ります。メッセージが完了すると、デバイスはビジー状態からアイドル状態に移行します。

ファイル

ファイル

関数

クラスターで次のコマンドを実行して、moving_the_deviceデバイスに制御コマンドを送信します (さまざまな API を介してさまざまなトピックに公開することを選択できます。ここでは topic1 に対応する get_topicmsg1 を選択します)。デバイスはビジー状態になります。

sudo kubectl exec -it nginx -- curl -X POST -d 'moving_the_device' http://deviceshifu-mqtt.deviceshifu.svc.cluster.local/get_topicmsg1  

デバイスがビジー状態になると、新しい制御コマンドの受信が拒否されます (制御コマンドや他のトピックからの通常のメッセージの拒否も含まれますが、これらのトピックを通じてデバイスのステータスやその他のメッセージを取得することはできます)。

ビジー中に新しい制御コマンドを送信しますrotating_the_device

sudo kubectl exec -it nginx -- curl -X POST -d 'rotating_the_device' http://deviceshifu-mqtt.deviceshifu.svc.cluster.local/get_topicmsg1

MQTT はdeviceShifu次のように返します。

Device is blocked by moving_the_device controlMsg now! 2023-01-02 07:14:28.324501338 +0000 UTC m=+67770.982000572

デバイスは制御コマンドを完了すると、制御コマンドの完了に対する応答を MQTT ブローカーに送信し、アイドル状態に戻ります。

蚊シミュレーション デバイスが完了するとmoving_the_device、対応する完了情報が返されますdevice_finished_moving

sudo kubectl exec -it deploy/mosquitto -n devices -- mosquitto_pub -h localhost -d -p 1883 -t /test/test1 -m "device_finish_moving" 

この時点で、デバイスはアイドル状態に戻り、他の制御コマンドを受信できるようになります。

使用

必要に応じて、デバイス制御コマンドcontrolMsgとそれに対応する完了応答をカスタマイズし、examples/mqttDeviceShifu/mqtt_deploy/mqtt_edgedevice.yamlファイル内で構成します。

...
data:
    ...
  controlMsgs: | 
  # 可选,配置controlMsgs(控制命令和相应完成响应的集合),格式为"key: value"。key是通过任意topic向设备发送的控制命令,设备执行控制命令时进入忙碌状态,拒绝接收其它控制命令,value是设备返回的完成响应,表示设备已完成对应控制命令,恢复空闲状态  
    Moving_the_device: "Device_finished_moving" # 修改此行
    Rotating_the_device: "Device_finished_Rotating" 
    ... # 根据自己的需要可继续配置controlMsgs及对应完成响应,只需按照此格式继续添加即可

この記事は Boundless Authorization によって公開されています

おすすめ

転載: blog.csdn.net/Edgenesis/article/details/129620702