Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PLCでも出来た!おウチで制御工学

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Koichi Sakata Koichi Sakata
January 22, 2025
1.5k

 PLCでも出来た!おウチで制御工学

第21回FA設備技術勉強会

Avatar for Koichi Sakata

Koichi Sakata

January 22, 2025
Tweet

Transcript

  1. sakalib.com 1/14 自己紹介 坂田 晃一 専門:制御工学、モーションコントロール 略歴 2011年3月 博士(工学) 2011年4月-現在

    精密機器メーカー勤務 2022年8月-現在 個人事業主 屋号SakaLib 制御セミナー講師・コンサルティング プライベート 子供たちが寝静まった夜に「おウチで制御工学」しています。 @sakata0330
  2. sakalib.com 2/14 はじめに ⚫ モータ制御は確立されている技術で、上流からは指令通りに動いて当たり前 ⚫ サーボモータ用ドライバの高性能化のおかげで、大抵のものは動かせてしまう 上流 下流 •画像処理

    •軌道計画 •故障予測 Intelligence •PLC Sequence Control •制御設計 •メカトロニクス •パワーエレクトロニクス Motion Control 制御機器のソフト階層 FA制御の主戦場は明確にPLCから上流 マルチレート制御 とはいえ汎用ドライバでは賄いきれない、 特定の産業機器に特化した独自の制御を 実装したいケースもマイナーだが存在する。 例: 露光装置、加工機械、HDD、etc. PLC 動け! ハイ! ココをPLC上でやっちゃう話
  3. sakalib.com 3/14 システム構成 IPC PLC Sequencer GUI (HMI) Motion Control

    EtherCAT Driver Motor Driver Motor Encoder Position/Velocity Control Current (Torque) Control 高速リアルタイム制御 (62.5~125us) 軌道生成 毎サイクル分割指令 論理・順序設定 基本的なシステム構成 Motor Driver Motor Encoder IPC PLC Position/Velocity Control Current (Torque) Control Sequencer GUI (HMI) Motion Control EtherCAT Driver PLCでリアルタイム制御な構成
  4. sakalib.com 4/14 ハードウェア構成(おウチでver) ①数万円の市販PC+②TwinCAT対応NIC+③EtherCAT対応モータドライバ+④サーボモータ TwinCAT3が優秀すぎて、市販PCでも趣味の開発レベルでは問題なく動作してしまう!※保証外 実行環境PC EtherCATマスタ (TwinCAT3 XAR) 兼

    開発環境PC (Python/TwinCAT3 XAE) 24VDC Power 開発環境PC (Python/TwinCAT3 XAE) EtherNET EtherCAT 開発環境PCと実行環境PCを分けたい場合 EtherCAT Motor Driver Servomotor 1. TwinCAT対応NICの搭載 2. TwinCAT3のインストール 3. TwinCAT Realtime Ethernet Driverのインストール 4. Windowsテストモードへの変更 5. CPU CoreのIsolation(リアルタイム処理の安定動作のため) 市販PCのIPC化について 実行環境PCには中華ミニPCが格安で便利だが、 Windowsライセンスの形態に注意! • CPU: Intel N100, 12th Gen, 4Core/4Thread • Memory, Storage: 16GB, 512GB • LAN port×2: i225-V (TwinCAT対応NIC搭載) なんちゃってIPC
  5. sakalib.com 7/14 PLCで高速リアルタイム制御 VAR fbPD : FB_TF1_EXE; fbPID : FB_TF2_EXE;

    ―――――――――――――――――――――――――――――――――――――――――――― IF RTC.gbFlagServoExe = TRUE AND RTC.gbFlagContrInit = FALSE THEN IF RTC.giModeFBType = 1 THEN // PID fbPID( dIn := dErrPosUm * 1.0E-6, stTfState := RTC.gstFbState, stTf2Inf := RTC.gstPidInf, dOut => dFbOutN, stTfState1 => RTC.gstFbState ); ELSIF RTC.giModeFBType = 2 THEN // PD fbPD( dIn := dErrPosUm * 1.0E-6, stTfState := RTC.gstFbState, stTf1Inf := RTC.gstPdInf, dOut => dFbOutN, stTfState1 => RTC.gstFbState ); ELSE // Manual dFbOutN := DRV.gdRatedTorqueMn * dFbOutManualPercent * 1.0E-5; END_IF // Copyright(c) 2025 Koichi Sakata (SakaLib) VAR_INPUT dIn : LREAL; stTfState : TF_STATE; stTf2Inf : TF2_INF; END_VAR VAR_OUTPUT dOut : LREAL; stTfState1 : TF_STATE; END_VAR ――――――――――――――――――――――――――――――― dOut := stTf2Inf.dB[0] * dIn + stTf2Inf.dB[1] * stTfState.dInPre[0] + stTf2Inf.dB[2] * stTfState.dInPre[1] - stTf2Inf.dA[1] * stTfState.dOutPre[0] - stTf2Inf.dA[2] * stTfState.dOutPre[1]; stTfState.dInPre[1] := stTfState.dInPre[0]; stTfState.dInPre[0] := dIn; stTfState.dOutPre[1] := stTfState.dOutPre[0]; stTfState.dOutPre[0] := dOut; // Copy to output stTfState1 := stTfState; Function Block: FB_TF2_EXE Program: MAINの一部抜粋 離散時間伝達関数の計算をFunction Blockで 作成し、MAINの中で毎サイクル (125us)ぶん回す!
  6. sakalib.com 12/14 おまけ② モータ動特性を考慮した仮想モータ軸 VAR fbPlant : FB_TF2_EXE; ――――――――――――――――――――――――――――――――――――――――――――――――――――――― TorqueActualValue

    := LREAL_TO_INT(FC_SAT( INT_TO_LREAL(TargetTorque), INT_TO_LREAL(MaxTorque) )); dServoOutN := INT_TO_LREAL(TorqueActualValue) * dRatedTorqueMn * 1.0E-6; IF ControlWord = 16#0F THEN // Plant fbPlant( dIn := dServoOutN, stTfState := stPlantState, stTf2Inf := stPlantInf, dOut => dActPosM, stTfState1 => stPlantState ); END_IF PositionActualValue := LREAL_TO_DINT(dActPosM * dEncoderReso * 1.0E3); Program: P_VIRTUAL_MOTORの一部抜粋 EtherCAT CiA402 drive profileに準拠したI/O # Plant model M = 0.0185 C = 0.7 K = 0 Pmechs = ctrl.tf([1.0], [M, C, K]) Pmechz = ctrl.c2d(Pmechs, Ts, method='zoh') Pythonで定義した制御対象 (サーボモータ)の離散時間伝達関数を、 別に作成したVirtualMotor Project内で、制御器の実装と同様に実行している。
  7. sakalib.com 14/14 宣伝:TwinCATとPythonで学ぶモデルベースト制御講座 Beckhoff Automation公式HP 申し込みページ TwinCAT3 Training/Individual/TR9001 https://www.beckhoff.com/ja-jp/support/training-offerings/tr9001/ @sakata0330

    1. はじめに 2. モデリング 3. システム同定 4. FB制御器設計 5. 制御性能と安定性 6. 制御器の離散化 7. 制御器の実装 8. 実験準備 9. ソフトウェア説明 10. 実習:システム同定から実装まで 11. 目標軌道生成 12. 振動とフィルタ設計 13. 2慣性系の実験準備 14. ノッチフィルタ設計 15. 最適ピークフィルタ設計 16. 外乱オブザーバ設計 17. 制御対象の離散化 18. 2自由度制御系とFF制御設計 19. 多軸制御と座標変換 • 単なるゲイン調整ではないモデルに基づく理論的な制御設計を学んでモータ制御してみたい方。 • TwinCAT3でモータ制御開発を始めたいけど具体的な環境構築が分からない方。 • 制御器/フィルタの設計~実装~解析まで実践的な制御開発を体験してみたい方。 期間 :理論編 (1日間)、実践編(2日間)の計3日間 開催日:応相談 場所 :ベッコフオートメーション株式会社内トレーニングルーム (横浜/名古屋) 対象者 アジェンダ 講師: