前回、前々回をPythonでModbusの理解と共にPythonでのModbusの実装を検証してきました。
ここからTouchDesignerでAZD-KDをModbusを使って操作します。
制作したサンプルはこちら。
Pythonで検討した結果、『ダイレクト運転以外TouchDesignerでは必要ないのでは・・・』という感じだったのでダイレクト運転のみ実装しています。
あとASCIIモード、絶対座標以外の動作は保確認ていません(前回のPythonのほうでサポートしたコードを書いた気がするが・・・)。
PythonとTouchDesigner上のPythonを揃える
TouchDesignerを使っててかつTouchDesigner上のPythonを使ってる人は既に設定済かと思いますが、pipなどでインストールしたライブラリを使うためにはTouchDesigner標準のPythonではなく、普段自分の使うPythonへのリンクを貼っておく必要があります。
設定方法などはここなどで紹介されているのでチェックしましょう。
オリジナルのコンテナを組む
大きく2つのコンテナを作りました。1つは通信自体を管理するコンテナ『ModbusSerial』、もうひとつはモータのパラメータを管理するコンテナ『AZDKDParameter』です。
『ModbusSerial』ですが、シリアル通信だけはTouchDesigner純正の物を使うという手もあるですが、受信側はまだしも送信側は全然未整備な感じだったでPyModbusのModbusSerialClientをそのまま利用することにしました。
実装上のポイントはScript DATにPyModbus周りの実装を集中させ、他のパッチからのメッセージ(ConnectとかDisconeectとかSend Messageとか)はGUI経由で指令するようにしているところでしょうか。
普段慣れ親しんでるTouchDesignerのパッチングからすると右から左に何も繋がってなくて異様ですが・・・。
パッチを組む
あとは普通にパッチを組んで行きます。
一点、modobusの通信速度があまり早くない(60fpsを切る)ことが懸念されたため、send commandoのトリガを作り、それをPulseのLFOで定期的に叩くことでコマンドを送信するようにしてコマンドを送りすぎないように設計しました。
これでもあんまり早くないのでちゃんと使うときはthread分けたほうが良いように思います。
完成
TouchDesignerのスライダに合わせてステッピングモータがぐりぐり動くようになりました。
エラーリセット系とか全然実装できてませんが、まぁMexe02と組み合わせればとりあえず動かせるのではないでしょうか。