DesignSpark Electrical Logolinkedin
Menu 検索
フォーラムで質問

Industrial Shields社が提供するArduinoベースのPLC(シーケンサ)を使ってみる

この記事ではIndustrial Shields社のシーケンサ(PLC)(ARDBOX IS.AB20AN.base)をご紹介します。Industrial Shields社についてはこちらの記事をご覧ください

ARDBOX IS.AB20AN.baseについて

title

ARDBOX IS.AB20AN.baseの概観

24Vdcで駆動するArduinoLeonardベースのPLCです。入力がI0.0からI0.9まで、出力がQ0.0からQ0.9までのそれぞれ10ポートが内蔵されています。

動作説明

title

ARDBOX IS.AB20AN.base(A面)

(a) Arduino Leonard内蔵のため、ArduinoIDEからの書き込みなどはmicro USBケーブルを利用して書き込みます。

(b) Micro USBケーブルでPCと接続したとき、本体に電源を繋いだときにはPOWER LEDが点灯します。

(c) 入出力信号が生じると、そのポートに対応するLEDが点灯します。

title

ARDBOX IS.AB20AN.base(B面)

(d) PLCへの入力はセンサと通信の両方から可能です。通信に使用するポートと方式に応じて、該当するスイッチをOFF側に倒すことで通信機能が有効になります。

(e) SPI通信、RS485、RS232、ISCの通信方式に対応しています。

(f) 入力ポートのうち、I0.0はデジタル入力のみに対応しています(I0.1(-)と書かれたポートは実際はI0.0(-)のプリントミスだと考えられます)。I0.1からI0.9については、9ポートはアナログ入力(0-10Vdc) / PNPデジタル入力※(24Vdc)に対応しています。

 title

ARDBOX IS.AB20AN.base(C面)

(g) 出力ポートのうち3ポート(Q0.7からQ0.9)がPNPデジタル出力※(24Vdc)に対応しています。またQ0.6ポートはアナログ出力とPWMの2種類に対応し、その他のQ0.0からQ0.5はアナログ出力(0-10Vdc) / デジタル出力(24Vdc)およびPWM(24Vdc)を切り替えることが可能です。

(h) Q0.0からQ0.5は出力の電圧と波形を切り替えることが可能です。アナログ出力(0-10Vdc)を使用するポートは電圧と波形の切替スイッチをそれぞれON側に、デジタル出力(24Vdc)およびPWM(24Vdc)を使用するポートはそれぞれのスイッチをOFF側にしてください。

ピンレイアウトとユーザーマニュアルは商品ページのDocument filesから入手できます。また、基本的な入出力の方法についてはIndustrial Shields社が運営しているブログでも解説されています。

※デジタル出力にはPNP形式(無負荷時OFF)とNPN形式(無負荷時ON)の2通りがあります。PNP形式は出力線が破損等によりアース(地面に短絡)した場合でも誤作動がないことから安全上の理由により主に欧州で用いられることが多いです。日本ではNPN形式が主流のため使用するセンサの出力形式などに注意が必要です。

使用例

今回は物体の搬送をイメージして、物体の接近を検知してモータの動きを止め、数秒後に再起動させるデモを組みました。これを応用すれば、搬送される物体の位置から複数のベルトコンベアを制御する(次のベルトコンベアを起動させ前のコンベアを停止させるタイミングをコントロールする)ことが可能になると考えられます。

title

ハードウェア構成

フォトインタラプタの状態変化で接近を検知し、ARDBOX IS.AB20AN.baseを通じてモータを制御しています。Arduino LeonardのピンアサインよりI0.0は割り込み処理が可能です。これを利用してピン状態がHighからLowに変化した場合にモータの駆動モードを切り替えるプログラムを作成しました。起動時に電圧が必要になることを考慮して、起動時、回転時、停止時の3種類の駆動モードによりモータへの印加電圧を変化させています。

実際の動作を動画でご覧ください。

作成したプログラムは以下のようになっています。

int Q01 = 11;//出力
int I00 = 2;//割り込み入力

int Vmotor = 2 ;//回転時のモータ電圧
int Vinit = 4; //起動時のモータ電圧
int Vs = 24; //供給電圧

int vol_init = map(Vinit, 0, Vs, 0, 255);
int vol = map(Vmotor, 0, Vs, 0, 255);
int mode = 2;//モード 2>起動 1>回転 0>停止

int waittime = 2000; //再起動までの待ち時間

void setup() {
pinMode(Q01, OUTPUT);
pinMode(I00, INPUT);
attachInterrupt(1, motorstop, FALLING);
}
void loop() {
if (mode == 2) {//起動
analogWrite(Q01, vol_init);
delay(20);
mode = 1;
} else if (mode == 1) {//回転
analogWrite(Q01, vol);
delay(15);
} else {//停止
analogWrite(Q01, 0);
delay(waittime);
mode = 2;
}
}

void motorstop() {//フォトインタラプタの出力 HIGH>LOW でモータ切替
mode = 0;
}

szkm さんはまだ自己紹介を入力されていません...

1 Mar 2017, 9:45