[2] IronPython 問題は MX Coomponent がフォローするのは VBA, VBScript, Visual Basic/C++/C# であって、 Python が .NET 環境で使えれば面倒にならないのでは?と期待して辿り着くのが IronPython[2]。 ・昨今の製造業ではトップダウン/ボトムアップでの AI 導入が盛んになりつつある 3) PLC [三菱 Q-PLC]. もろもろ調べて実装するも Numpy が使えない 沼から抜け出せず断念... 既に先人が紹介されている[3] のでバッサリ割愛。分からないところは三菱に問い合わせよう。 静的モデルについては、折れ線近似にしてみます。, これは電圧に対して電流が求められる式ですが、回路方程式はこの逆関数のほうが都合が良いので、両辺の対数をとって逆関数を求めます。s, 更には、Hブリッジの場合両ブリッジにダイオードが存在するので全てのスイッチがOFFになってもモータの電流は両方向に流れることが可能です。 他のモードの式もそうですが、モータが正転するトルクが発生する電流の向きが正としています。, ダイオードの工夫については前述しましたが、左右のブリッジのダイオードのお陰でモータには両方向に電流が流れる事が可能ですが、 また、機能ごとに .py ファイルを分けて作っておくと GUI から呼び出す時に使いやすい。, まずは始めから自動で記述されている大量の using System.~ に続けて以下を追加する。, 次にpython 実行環境を public partial class 直下で宣言する。, ここで Python インタプリタの位置が分からないときは Python 環境で以下を実行すると絶対パスが教えてもらえる。, 実行してみると Python の計算結果が C# に取り込めている事が分かる。 ちなみに ビルド設定で Any CPU >> x86 と変更しないとコンパイルが通らなかった。, 要は C# で Python を呼び出して値が読み書きできれば良い。 幸いにも、三菱が『MX Component』[1] というソフトを販売しているのでこれを使えば良い。 ここでは仮にインダクタンスが500μHになったと仮定します。, リップルが大きく感じられます。インダクタンスを大きくしても周期200μsはまだ長いのだと思います。 Sign-Magnitude Drive | Modular Circuits, Sign-Magnitude Drive (Modular Circuits和訳記事) - まんじゅう日記, まずは,ルンゲクッタ関係の関数の定義です。 目下の悩みは 実行速度が遅いこと である。 常に正転と逆転の指令を入れ替えています。 PWMのオン時間600ns、デッドタイムが100ns、オフ時間が200ns合計で周期1μsになります。, 続いて、逆にOFF時間が短い場合です。 PID制御とは何か、pythonでシミュレーションをしながら解説します。 シミュレーションについては以下の記事で紹介しています。 pythonでバネマスダンパ系のシミュレーション(オイラー法) 学生時代に情報系とオサラバしたはずが、社内情勢のため昔取った杵柄を引っ張り出し中。 理工学系とくにロボットやドローンごくたまに投資に関する計算・プログラミング等の話題を扱って、そのようなことに興味がある人たちのお役に立てればと思っております。, 飲み食いも大好きなので、おいしいお店や美味しいお酒に出会ったときは、そんなことも書きたいと思っています。, 過去の受賞歴(個人として) [3] C#でMXComponentを使う(ビットデバイス編) C# から値をふたつ受け取って Python で和と積を計算して C# に返す場合 試しに現実を無視してLAP方式のデッドタイムを小さくしてみた結果が以下です。, ほとんどリニア制御に重なっていて、LAP方式についてはリニア制御のゲイン調整で大体の当たりがつけられそうな感じがしてきました。SMB方式についてはデッドタイムを小さくしても、リニア制御と同じ波形とみなせる様にはなりませんでした。, ダイオードのモデルで悩んでましたが、FETのモデルは完全に無視していたりして所々方向性が定まっていない感がありますが、 今回はPWM周期200μs(周波数5KHz)で検討を進めたいと思います。, おそらくDC/DCコンバータの同期整流と非同期整流の違いの様なことがモータのPWM制御にも起こるのだと考えています。, ④ブレーキモードはDC/DCコンバータの同期整流しているイメージですが、①ストップモードはDC/DCコンバータがダイオードだけで 特に、主たる生息地がフィールド側 (リレー接点とか4-20mAとか) のエンジニアにとっては、 前半のすべての制御方式で制御入力が飽和してしまっている部分がLAP方式とSMB方式がほぼ同じ波形でリニア制御が飽和部分は少し早く終わるところが少々疑問だったのですが、どうやらここでもデッドタイムが影響しているようです. PLC 暴走は現場事故につながるのでいきなり設備に直結するデバイスをいじりにいかないこと!, 要は Python -----> PLC と値が飛べば良いだけの話である。 Python + Visual Studio 環境をセットアップした PC を設備 PLC に接続して動かすイメージ。 What is going on with this article? """ つくばチャレンジ バンダイナムコ賞 つまりPWM周期は200μsということでPWM周期は5KHzと言うことになり、自分的にはPWM制御をするためには50KHzや100KHzをイメージしていたので、それに比べれば遥かに遅く違和感がありますがこの件の検討は後日行うものとし、これで話を進めます。, この場合チョークコイルを接続してインダクタンスを大きくすることを想定しています。 [言語] C++, Python, 三菱PLC(言語?). ダイオードに関しては計算して大体の傾向が見えて来たのではと思っています。, 慣性モーメントに押し込めて負荷モデルが考慮されていないので今後負荷が加わった場合の検討もできたらと思っています。, シミュレーションをやりながら、何をやっているのか判らなくなる場面もありましたが、一晩寝て朝になると執筆が進む場面もありました。 これに安全率を考慮してデッドタイムを決めるのが流れだと考えます。, LAP方式は一周期のうちに正転と逆転を切り替えます。その間にデッドタイム(①ストップモード)を挟みます。 機械学習のモデリングスコアが ## なんです!と言っても共感してくれる経営者など存在しない。 MX Component がインストールできたら、サンプル(Act/Samples/...)を動かしてみると良い。 つまり PC (Python -----> VBAほか) -----> PLC なる、( ) 内の処理を手書きする必要がある。, 色々と前置きが長くなったが、下図のように構成したら (一応) つながったので紹介する。 マイクロマウスニューテクノロジー賞, 過去の受賞歴(指導員として) PID制御とは何か、pythonでシミュレーションをしながら解説します。シミュレーションについては以下の記事で紹介しています。, まず、質量のある物体( 制御対象 )に力(制御入力)を加え、ある値に収束させることを考えます。, 下図は縦軸が位置、横軸が時間を表しています。このようにxの値が0に収束するような制御入力の与え方をいろいろと試していきます。, xの値を0に収束させたい。そんなとき、どうすれば良いか。一番に思い付くのは、xが大きければ負の方向に力を加え、xが小さければ正の方向に力を加えることでしょう。, 目標値と現在値の差に応じて、力の入力を変えればうまくいくのではないか。つまり、目標値との差に比例した制御入力を与える。, これは単振動。"位置に比例した力"はバネと同じなので、収束しない。(抵抗とかあったら収束する), ここではノイズを考慮しないが、ノイズがある場合は微分値にローパスフィルタをかける必要がある。 (ノイズでギザギザの値は微分できないから)ローパスフィルタをかけた微分を不完全微分という。ローパスフィルタについては以下の記事で紹介しています。, PD制御だと、目標値付近ではほとんど入力が無くなる→無限時間経たないと完全には0に収束しない。そこで、積分成分を追加する。いつまでも正の位置にあれば負の方向へ、負の位置に居れば正の方向へ制御入力が増えていく。, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。, このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。, Windowsのキー配置入れ替え(mac風の入力切り替え&Caps Lock撲滅), pythonでバネマスダンパ系のシミュレーションを行い、グラフを描画します。今回はオイラー法を用います。, Arduinoのローパスフィルタのスケッチを紹介します。センサのノイズがひどいときなど、何らかのフィルタを入れると効果的です。ここでは、移動平均フィルタ、RCフィルタ、メディアンフィルタについてのサンプルスケッチを紹介しています。. 実機では何か悪いことが起こりそうな気がします。確か、実機でやると、速度0付近で思ったのと違う挙動をする記憶があります。, 1717モータのようなインダクタンスの小さなモータはLAP方式はかなり厳しいかもしれません。FETの性能をよく調べて、チョークコイルの付加等を考慮して そうすると、PWM制御はリップル電流(上下に上下する電流)の平均の電流が流れているとみなせるので0Aに張り付いてしまうと例えば電流がプラスの領域では電流が減衰して0Aに近づくにつれて少しだけ大きく電流が流れていることになります。, 計算をしてみるとデッドタイムが大きい場合は以下の様な応答を示します。特にリップル電流波形の下端が奇妙にクリップされているのが確認できます。, 0.075秒から0.1秒の間も違う感じになっていますが、0.08秒付近の電流波形を拡大してみました。, デッドタイムはON時間の最後とOFF時間の最後に入りますが、どのタイミングでデッドタイムに入るかで上の3パターンのような波形を描きます。この様子が、平均電流の波形に歪みを生じさせることがわかりました。, シミュレーションでしかできないことですが、全くデッドタイムを入れないで計算すると次の様になります。, 単にそれぞれの波形を見ただけでは何がどう違うのかが判定できなかったので、リニア制御と比較してみることにしました。 ※以降で PLC とは三菱 Q-PLC の事とする。それ以外の PLC はフォローしない(調べてもいない), これで "勝ったッ、第三部完!"とはならない。だからこそ今この文章を書いている。