ST言語で機械保全技能士の課題回答2

ラダープログラムは少し書けますが、メーカー問わず扱うことのできるST言語を勉強中です。ST言語はテキストベースのプログラミング言語でC言語に似た構文を持ちます。勉強の環境としてはキーエンスPLC(KV-8000)でシミュレータエディットで動作確認しながらしています。

まずはキーエンスのプログラムをかける人でもわかるように、変数を扱わずにプログラム作成をしています。

■KV-8000機器構成

入力:R34000~

出力:R34100~

2級向け回路

どうしてもカウンタを使わないと作成できませんでした。

ラダープログラムだとカウンタなしで作成できます。

//ランプタイマー設定
TMR (MR2004, T1, 20);
TMR (MR4000, T2, 30);
TMR (MR4002, T3, 5);
TMR (MR4004, T4, 5);

//ランプ停止条件
IF R34002 THEN
MR1000 := FALSE;
MR1002 := FALSE;
RES(MR2002);
DM1002 := 0;
RES(MR3002);
RES(MR4000);
RES(MR4002);
RES(MR4004);
DM1000 := 0;
END_IF;

/////////////////////////////////////////

WLランプオルタネイト回路
MR3000 := LDP(R34000); //PB↑
IF ((MR3000 AND (NOT MR3002)) OR ((NOT MR3000) AND MR3002)) THEN
MR3002 := TRUE;
ELSE
MR3002 := FALSE;
END_IF;

//WLランプ出力
R34100 := MR3002;
//////////////////////////////////////
IF R34000 THEN
MR1000 := TRUE;
END_IF;

IF R34001 THEN
MR1002 := TRUE;
END_IF;

//YLランプ
MR2000 := LDP(R34001); //PB↑
IF MR2000 THEN
INC(DM1002);
END_IF;

IF (DM1000 =1) AND (DM1002 =1) THEN
SET(MR2002);
END_IF;

IF MR2002 AND (DM1000 =2) THEN
RES(MR2002);
SET(MR2004);
END_IF;

IF (DM1000 =3) AND (DM1002 =2) THEN
SET(MR2006);
END_IF;

IF (MR2006) AND (R34002) THEN
SET(MR2004);
END_IF;

//YLランプ停止
IF T1 = TRUE THEN
RES(MR1000);
RES(MR1002);
RES(MR2004);
RES(MR2006);
END_IF;

//YLランプ出力
R34101 := MR2002 OR MR2004 OR MR2006;
///////////////////////////GLランプ運転

IF MR3000 THEN
INC(DM1000);
END_IF;

IF DM1000 = 2 THEN
SET(MR5000);
ELSE
RES(MR5000);
END_IF;

MR5002 := LDP(MR5000); //PB↑

IF MR5002 THEN
SET(MR4000);
SET(MR4002);
END_IF;

IF T2 = TRUE THEN
RES(MR4002);
RES(MR4004);
END_IF;

IF T3 = TRUE THEN
RES(MR4002);
SET(MR4004);
END_IF;

//GLランプ停止
IF T4 = TRUE THEN
MR4004 := TRUE;
MR4002 := FALSE;
END_IF;

IF T4 = TRUE THEN
MR4002 := TRUE;
MR4004 := FALSE;
END_IF;

//GL出力
R34102 := (DM1000 = 1) OR (MR4002 = TRUE) OR (DM1000 = 3) ;

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA