Codesys# CAM制御でマスターとスレーブの動きを連携!2軸構成でCAMテーブルの作成から実装まで

今回は、CODESYS SoftMotionを使って、マスター軸とスレーブ軸をCAM(電子カム)で同期制御する方法を解説します。「CAMTABLEの作成」から「プログラムへの実装」、そして「スレーブ軸の変化を可視化するHMI画面」まで、ひと通りの流れを丁寧にまとめました。

さ、FAを楽しもう。

codesys-cam-control-2axis-camtable-to-hmi

Reference Link

CMZ#FC641_Part01_コントローラーを立ち上げよう
Codesys# CMZ FCT641とOMRONサーボをつないで2軸制御してみよう
Codesys# GearInで軸同期!OMRONサーボをマスター・スレーブ連動してみよう

http://soup01.com/ja/2025/06/14/post-12073/

Beckhoff#TE2000 Opening Connection to server failedの解決方法

前書き

いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。

技術は独り占めせず、届けるもの

私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。

また、もしあなたの現場で…

  • 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
  • 「EtherCAT通信でうまくいかない部分を検証してほしい」
  • 「新しいリモートI/Oを試したいけど社内に検証環境がない」

など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。

支援のかたち

現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。

メンバーシップ(ラジオの応援)

Fullさんとのラジオをより充実させるための支援プランです。

https://note.com/fulhause/membership/join

Amazonギフトリスト

コンテンツ制作に必要な機材・書籍をリストにしています。

https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share

Patreon(ブログ・動画活動への応援)

月額での小さなご支援が、記事の執筆・検証環境の充実につながります。

https://www.patreon.com/user?u=84249391

Paypal

小さな支援が大きな力になります。

https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP

知ってたら助かること、届けたいだけです

あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。

soup01threes*gmail.com

https://x.com/3threes2

技術はひとりじゃもったいない。

電子CAM(Electronicカム)とは?

CAMは「電子カム(Electronic CAM)」のことを指していて、本来の「カム機構(メカ的なやつ)」をソフトウェア的に再現する制御手法です。

  • CAM(カム):卵みたいな変形ディスク
  • FOLLOWER(フォロワ):カムの形状に合わせて上下に動く部品
  • カムが回転することで、フォロワーが規則的な高さ運動をする

CAM活用できるところ…

使用シーン内容
包装機主軸の動きに合わせて、カッターや折り機を動かす
ロール搬送回転するローラーに合わせて、切断タイミングを一致させる
ラベラー缶やボトルが一定の位置に来たときだけ、ラベルを貼る
プレス機送り軸とプレスの打ち抜きを完全に同期させる
ロボット連携ロボットと搬送ラインをCAMで同期して「追従させる」

メカ式CAMと電子CAMの違い?

メカ式CAMソフト式(電子)CAM
CAM形状で動きを制御データ(CAMテーブル)で動きを制御
実際にカム部品を使うサーボモータ+PLCで再現
精度・調整は機械でやる精密制御や切替もソフトで自由に!

MC_CamIn とは?

マスター軸とスレーブ軸をカムプロファイルで同期させるためのFB(Function Block)で、

つまり「この動きに合わせて、この動きにぴったり追従させて」って命令を発行します。

インタフェース

INPUT

名前説明
ExecuteBOOL実行トリガ(立ち上がりで処理開始)
CamTableSMC_CAMTableCAMプロファイル(カムテーブル)
MasterOffsetLREALマスター軸のオフセット位置(位置補正)
SlaveOffsetLREALスレーブ軸のオフセット位置(位置補正)
StartModeMC_CamStartModeCAM開始のタイミング設定(自動/即時など)
BufferModeMC_BufferModeCAMの割り込み/バッファモードの指定

OUTPUT

名前説明
DoneBOOLCAM開始処理が正常に完了したらTRUE
BusyBOOL実行中(処理中)であればTRUE
ActiveBOOLCAM制御が現在アクティブであればTRUE
CommandAbortedBOOL他の命令により中断された場合にTRUE
ErrorBOOLエラー発生時にTRUE
ErrorIDUDINTエラーの詳細コード(識別用)

INOUT

名前説明
MasterAXIS_REFマスター軸の参照(CAMの基準になる軸)
SlaveAXIS_REFスレーブ軸の参照(CAMで制御される軸)

Example

こちらはMC_CamInの使用例です。

VAR
  fbCamIn : MC_CamIn;
  axisMaster : Axis_Ref;
  axisSlave : Axis_Ref;
  camProfile : SMC_CAMTable;
END_VAR

fbCamIn(
  Execute := bStartCam,
  Master := axisMaster,
  Slave := axisSlave,
  CamTable := camProfile,
  StartMode := MC_CamStartMode.Automatically,
  BufferMode := MC_BufferMode.Buffered
);

MC_CamTableSelect とは?

CAM制御で「どのカムテーブルを使うか?」を選択・適用するための、すごく重要なファンクションブロックです。それはマスター軸とスレーブ軸をCAMでつなぐ前に、どのカムパターンを使うかを準備・選択する処理をします。

インタフェース

INPUT

名前説明
ExecuteBOOLテーブル切替の実行トリガ(立ち上がり)
CamTableSMC_CAMTable適用したいカムテーブルデータ
PeriodicBOOLTRUE:周期カム、FALSE:非周期カム
MasterAbsoluteBOOLTRUEでマスター軸を絶対位置で扱う
SlaveAbsoluteBOOLTRUEでスレーブ軸を絶対位置で扱う

OUT

名前説明
DoneBOOL切替完了時TRUE
BusyBOOL実行中TRUE
ErrorBOOLエラー発生時TRUE
ErrorIDUDINTエラー内容のIDコード
CamTableIDUINT適用中のCAMテーブルID(管理用)

INOUT

名前説明
MasterAXIS_REFマスター軸への参照(同期元)
SlaveAXIS_REFスレーブ軸への参照(同期対象)

MC_CamOut とは?

MC_CamIn と対して、「CAM同期を終了する」ためのファンクションブロックです。例えば、MC_CamIn で、主軸の回転に合わせて切断軸を同期させ、カットが終わったら 、MC_CamOut で同期解除し、スレーブ軸を MC_MoveHome で初期位置に戻したいとき、CAM解除が必要になります。

インタフェース

INPUT

名前説明
ExecuteBOOLCAM解除のトリガ(立ち上がりで処理開始)
SlaveAXIS_REFCAM同期を解除するスレーブ軸

OUTPUT

名前説明
DoneBOOLCAM解除処理が完了したらTRUE
BusyBOOL実行中(解除処理中)でTRUE
ErrorBOOLエラーが発生したらTRUE
ErrorIDUDINTエラーの詳細コード

INOUT

名前説明
SlaveAXIS_REFスレーブ軸の参照(CAMで制御される軸)

Example

こちらはMC_CamOutの使用例です。

VAR
  fbCamOut : MC_CamOut;
END_VAR

fbCamOut(
  Execute := bReleaseCam,
  Slave := axisSlave
);

Implementation

CAMテーブル追加

CodesysでCAMを使用するにはCAM テーブルを追加する必要があり、Application>右クリック>Add Object>Cam Tableします。

Done!新しいCAM Tableが追加されました。こちらはCAM テーブルにある各図の意味合いを説明します。

① 最上段(黒):スレーブ位置 vs マスター位置

このグラフがCAMの本体で、マスターがどれだけ動いたときに、スレーブはどこにいるべきかを示しています。下図では緩やかに上昇しているので、スレーブがなめらかに上昇するプロファイルになっています。

内容
横軸master position(マスター軸の位置)
縦軸slave position(スレーブ軸の位置)

② 2段目(青):スレーブ速度

ここではスレーブのマスター軸に対する速度変化を確認できます。最初と最後に山がある → 加速・減速してることあり、また真ん中はフラットであることは、一定速度で動いています。

内容
横軸master position
縦軸slave velocity(スレーブの速度)

③ 3段目(緑):スレーブ加速度

ここでは「スレーブの動きがどれだけ速く変化してるか(加減速)」を示しています。上下にうねる波形 → 加速→減速→一定→また加速→減速…って動きがわかります。また、中央で 0 は安定区間(定速運転)です。

内容
横軸master position
縦軸acceleration(スレーブの加速度)

④ 最下段(オレンジ):スレーブのジャーク(加加速度)

Jerkは「加速度の変化速度」で、急激な動きの変化があるとき、ここを大きく設定してください。下図の波形が滑らかで小さい ので、 機械に優しい動きになります。注意するのは急な山があると振動や衝撃の原因になります。

内容
横軸master position
縦軸jerk(加加速度)

Program

こちらは今回記事で追加したプログラムです。

こちらはMC_CamTableSelect FBを使用し、適切なCAMテーブルを取得します。

CAMテーブルを取得したあと、そのデータをMC_CamINに渡します。同時に、MasterとSlave軸を設定します。

Visu

最後はCodesysのMC_CamIN・MC_CamOut・MC_CamTableSelectテンプレートを使用し、画面を作成します。

Result

こちらはマスターがCAMで0→360に移動するとき、スレーブ軸の動きになります。

こちらはマスターがCAMで360→0に移動するとき、スレーブ軸の動きになります。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする