0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PLCでもぐらたたき

Last updated at Posted at 2021-10-03

PLC(三菱MELSEC-Fシリーズ)を触る機会があり作ってみたので、記念に残してみるテスト。
直す余地は大量にありそうな気はするものの、もう触る機会は今後ないので修正はされない模様。

仕様

  • 開始時Y0〜Y3(ランプを想定)をすべてONにする
  • 開始1秒以降にX0(ボタンを想定)をONにするとY0〜Y3をすべてOFFにしてスタート
  • スタートしたら0.5秒後にランダムに決定したY0〜Y3のうちどれか1つYaをONにする
  • Yaに対応するX0〜X3をON(Y0がONならX0をON、Y1がONならX1をON...)にすると得点を+1してYaをOFFに
  • 対応しないX0〜X3をONにした場合は誤答数を+1する(引き続きYaはONのまま)
  • 指定時間(レベルにより異なる)内に対応するX0〜X3がONにならなかった場合誤答数を+1してYaをOFFに
  • YaがOFFになれば0.5秒後にランダムに決定したYaをONにする(4行目へ戻って下記ゲームオーバーまで繰り返し)
  • 指定した得点に達した場合はレベルを+1し、YaがOFFになるまでの指定時間を短縮する
  • 指定した誤答数に達した場合はゲームオーバーとしてY0〜Y3をすべてONにする
  • ゲームオーバーから3秒後にX0をONにすると、Y0〜Y3をすべてOFFにし、得点・レベル・誤答数等を初期化して再スタート(3行目へ)

ラダー図

PLCモグラたたき(モニタモードにすると得点表示するよ)
    |
    |   M8001
   0|----|  |----------------------------------------------[MOV    K0   D20      ]
    |   表示用  |                                                        得点
    |          |
    |          |-------------------------------------------[MOV    K0   D30      ]
    |          |                                                        レベル
    |          |
    |          --------------------------------------------[MOV    K0   D10      ]
    |                                                                   誤答数
    |
    |
乱数を取得s(M1はRND命令M90は線形合同法)
    |
    |     M0         M60
  16|----|  |--------|/|----------------------------------[PLF         M1       ]
    |  乱数開始     GAMEOVER                                            乱数取得
    |
    |
RND命令で乱数の取得
    |
    |     M1
  20|----|  |----------------------------------------------[RND         D0       ]
    |  乱数取得 |                                                        乱数
    |          |
    |          --------------------------------------------[SET         M2       ]
    |                                                                   剰余計算
    |
    |
答えを4通りにするために乱数を基に剰余を求める
    |
    |     M2
  25|----|  |------------------------------------------[DIV    D0    K4    D1    ]
    |  剰余計算 |                                               乱数         商
    |          |
    |          |-------------------------------------------[SET         M3       ]
    |          |                                                        回答表示
    |          |
    |          --------------------------------------------[RST         M2       ]
    |                                                                   剰余計算
    |
    |
乱数の剰余から表示するランプの設定
    |
    |     M3
  35|----|  |----[=  D2    K0   ]--------------------------[SET         M20      ]
    |  回答表示 |     剰余                                                PL1
    |          |
    |          |-[=  D2    K1   ]--------------------------[SET         M21      ]
    |          |     剰余                                                PL2
    |          |
    |          |-[=  D2    K2   ]--------------------------[SET         M22      ]
    |          |     剰余                                                PL3
    |          |
    |          |-[=  D2    K3   ]--------------------------[SET         M23      ]
    |          |     剰余                                                PL4
    |          |
    |          |-------------------------------------------[SET         M30      ]
    |          |                                                        タイマ設定
    |          |
    |          --------------------------------------------[RST         M3       ]
    |                                                                   回答表示
    |
    |
時間切れのタイマーを設定
    |
    |    M60         M30                                                   D40
  67|----|/|--------|  |----------------------------------------------(T0       )
    |  GAMEOVER    タイマ設定                                                時間切れ
    |
    |
ボタン入力の処理と正答誤答のカウント
    |
    |    M60         M10        M20
  72|----|/|--------|  |-------|  |-----------------------[SET         M40      ]
    | GAMEOVER |     PB1  |     PL1  |                                  回答処理
    |          |          |          |
    |          |          |          ----------------------[INCP        D20      ]
    |          |          |                                             得点
    |          |          |    M20
    |          |          -----|/|------------------------[INCP        D10      ]
    |          |                PL1                                     誤答数
    |          |
    |          |    M11        M21
    |          |----|  |-------|  |------------------------[SET         M40      ]
    |          |    PB2   |    PL2   |                                  回答処理
    |          |          |          |
    |          |          |          ----------------------[INCP        D20      ]
    |          |          |                                             得点
    |          |          |    M21
    |          |          -----|/|------------------------[INCP        D10      ]
    |          |               PL2                                      誤答数
    |          |
    |          |    M12        M22
    |          |----|  |-------|  |------------------------[SET         M40      ]
    |          |    PB3   |    PL3   |                                  回答処理
    |          |          |          |
    |          |          |          ----------------------[INCP        D20      ]
    |          |          |                                             得点
    |          |          |    M22
    |          |          -----|/|------------------------[INCP        D10      ]
    |          |               PL3                                      誤答数
    |          |
    |          |     M13       M23
    |          -----|  |-------|  |------------------------[SET         M40      ]
    |                PB4   |   PL4    |                                 回答処理
    |                      |          |
    |                      |          ---------------------[INCP        D20      ]
    |                      |                                            得点
    |                      |    M23
    |                      -----|/|-----------------------[INCP        D10      ]
    |                           PL4                                     誤答数
    |
    |
時間内にボタンが押されなかった処理、誤答としてカウント
    |
    |     T0          M40
 125|----|  |--------|/|----------------------------------[INCP        D10      ]
    |   時間切れ    回答処理 |                                             誤答数
    |                     |
    |                     ---------------------------------[SET         M40      ]
    |                                                                   回答処理
    |
    |
正解または時間切れなのでいったん消灯して0.5秒待ち
    |
    |    M60         M40
 131|----|/|--------|  |----------------------------------[RST         M20      ]
    | GAMEOVER    回答処理 |                                             PL1
    |                     |
    |                     |--------------------------------[RST         M21      ]
    |                     |                                             PL2
    |                     |
    |                     |--------------------------------[RST         M22      ]
    |                     |                                             PL3
    |                     |
    |                     |--------------------------------[RST         M23      ]
    |                     |                                             PL4
    |                     |                                                K5
    |                     ---------------------------------------------(T1       )
    |                                                                    次問題待
    |
    |
0.5秒経ったので初期化して次の問題へ
    |
    |     T1
 140|----|  |----------------------------------------------[SET         M50      ]
    |   次問題待                                                         初期化
    |
    |
問題の初期化処理
    |
    |     M50
 142|----|  |----------------------------------------------[RST         M30      ]
    |    初期化 |                                                        タイマ設定
    |          |
    |          |-------------------------------------------[RST         M40      ]
    |          |                                                        回答処理
    |          |
    |          |-------------------------------------------[RST         M50      ]
    |          |                                                        初期化
    |          |
    |          --------------------------------------------[PLF         M0       ]
    |                                                                   乱数開始
    |
    |
一定数正解した場合のレベルアップの処理
    |
 148|-[>= D20  D50 ]--[< D20  D51 ]------------------------[MOV      K1     D30  ]
    |     得点 LV1点     得点  LV2点 |                                        レベル
    |                              |
    |                              ------------------------[MOV      D6     D40  ]
    |                                                                LV1時  TO時間
    |
 168|-[>= D20  D51 ]--[< D20  D52 ]------------------------[MOV      K2     D30  ]
    |     得点 LV2点     得点  LV3点 |                                        レベル
    |                              | 
    |                              ------------------------[MOV      D62    D40  ]
    |                                                                LV2時  TO時間
    |
 188|-[>= D20  D52 ]--[< D20  D53 ]------------------------[MOV      K3     D30  ]
    |     得点 LV3点     得点  LV4点 |                                        レベル
    |                              |
    |                              ------------------------[MOV      D63    D40  ]
    |                                                                LV3時  TO時間
    |
 208|-[>= D20  D53 ]---------------------------------------[MOV      K4     D30  ]
    |    得点  LV4点|                                                        レベル
    |              |
    |              ----------------------------------------[MOV      D64    D40  ]
    |                                                                LV4時  TO時間
    |
    |
一定数誤答した場合のゲームオーバーの処理、全部ランプ点灯して待ち
    |
 223|-[>=       D10         D70        ]-------------------[SET         M60      ]
    |          誤答数      誤答終了                                       GAMEOVER
    |     M60
 229|----|  |----------------------------------------------[SET         M20      ]
    | GAMEOVER |                                                        PL1
    |          |
    |          |-------------------------------------------[SET         M21      ]
    |          |                                                        PL2
    |          |
    |          |-------------------------------------------[SET         M22      ]
    |          |                                                        PL3
    |          |
    |          |-------------------------------------------[SET         M23      ]
    |          |                                                        PL4
    |          |                                                           D80
    |          --------------------------------------------------------(T2       )
    |                                                                     GO待ち
    |
    |
ゲームオーバー後のボタン入力待ち
    |
    |     M10         M60         T2
 237|----|  |--------|  |--------|  |----------------------[RST         M20      ]
    |    PB1       GAMEOVER    GO待ち   |                                PL1
    |                                  |
    |                                  |-------------------[RST         M21      ]
    |                                  |                                PL2
    |                                  |
    |                                  |-------------------[RST         M22      ]
    |                                  |                                PL3
    |                                  |
    |                                  |-------------------[RST         M23      ]
    |                                  |                                PL4
    |                                  |
    |                                  |-------------------[MOV    K0   D10      ]
    |                                  |                                誤答数
    |                                  |
    |                                  |-------------------[MOV    K0   D20      ]
    |                                  |                                得点
    |                                  |
    |                                  |-------------------[MOV    K0   D30      ]
    |                                  |                                レベル
    |                                  |
    |                                  |-------------------[MOV    D60  D40      ]
    |                                  |                          LV0時 TO時間
    |                                  |
    |                                  |-------------------[MOV    K30  D80      ]
    |                                  |                                GO待ち
    |                                  |
    |                                  |-------------------[SET         M50      ]
    |                                  |                                初期化
    |                                  |
    |                                  --------------------[RST         M60      ]
    |                                                                   GAMEOVER
    |
    |
ゲームの初期化
    |
    |    M70
 271|----|  |----------------------------------------------[MOV    K10  D50      ]
    |  初期設定 |                                                        LV1点
    |          |
    |          |-------------------------------------------[MOV    K50  D51      ]
    |          |                                                        LV2点
    |          |
    |          |-------------------------------------------[MOV    K80  D52      ]
    |          |                                                        LV3点
    |          |
    |          |-------------------------------------------[MOV    K100 D53      ]
    |          |                                                        LV4点
    |          |
    |          |-------------------------------------------[MOV    K30  D60      ]
    |          |                                                        LV0時
    |          |
    |          |-------------------------------------------[MOV    K20  D61      ]
    |          |                                                        LV1時
    |          |
    |          |-------------------------------------------[MOV    K15  D62      ]
    |          |                                                        LV2時
    |          |
    |          |-------------------------------------------[MOV    K10  D63      ]
    |          |                                                        LV3時
    |          |
    |          |-------------------------------------------[MOV    K5   D64      ]
    |          |                                                        LV4時
    |          |
    |          |-------------------------------------------[MOV    K10  D70      ]
    |          |                                                        誤答終了
    |          |
    |          |-------------------------------------------[MOV    K10  D80      ]
    |          |                                                        GO待ち
    |          |
    |          |-------------------------------------------[MOV    K1   D0       ]
    |          |                                                        乱数
    |          |
    |          |-------------------------------------------[SET         M60      ]
    |          |                                                        GAMEOVER
    |          |
    |          --------------------------------------------[RST         M70      ]
    |                                                                   初期設定
    |
    |
PLC電源投入時の初期処理
    |
    |    M80
 334|----|  |----------------------------------------------[SET         M70      ]
    |   スタート                                                         初期設定
    |    M8000
 336|----|  |----------------------------------------------[PLS         M80      ]
    |   スタート                                                         スタート
    |
    |
ボタンを補助リレーに紐づけ、あと適当にインターロック
    |
    |    X0000       X0001       X0002       X0003
 339|----|  |--------|/|--------|/|--------|/|-----------[PLF         M10      ]
    |    PB1         PB2         PB3         PB4                        PB1
    |    X0001       X0000       X0002       X0003
 345|----|  |--------|/|--------|/|--------|/|-----------[PLF         M11      ]
    |    PB2         PB1         PB3         PB4                        PB2
    |    X0002       X0000       X0001       X0003
 351|----|  |--------|/|--------|/|--------|/|-----------[PLF         M12      ]
    |    PB3         PB1         PB2         PB4                        PB3
    |    X0003       X0000       X0001       X0002
 357|----|  |--------|/|--------|/|--------|/|-----------[PLF         M13      ]
    |    PB4         PB1         PB2         PB3                        PB4
    |
    |
ランプを補助リレーに紐づけ
    |
    |    M20
 363|----|  |----------------------------------------------------------(Y0000    )
    |    PL1                                                               PL1
    |    M21
 365|----|  |----------------------------------------------------------(Y0001    )
    |    PL2                                                               PL2
    |    M22
 367|----|  |----------------------------------------------------------(Y0002    )
    |    PL3                                                               PL3
    |    M23
 369|----|  |----------------------------------------------------------(Y0003    )
    |    PL4                                                               PL4
    |
    |
RND命令がない場合は線形合同法を使おう
    |
    |     M90
 371|----|  |----------------------------------------[DMUL   K717  D0     D90    ]
    | 線形合同  |                                                   乱数    A*X
    |          |
    |          |-------------------------------------[DADD   D90   K17    D92    ]
    |          |                                             A*X         A*X+B
    |          |
    |          |-------------------------------------[DDIV   D92   K8191  D100   ]
    |          |                                             A*X+B         商
    |          |
    |          |-[<   D102     K0   ]----------------[DMUL   D102  K-1    D102   ]
    |          |       剰余                                   剰余         剰余
    |          |
    |          |-------------------------------------[MOV    D102         D0     ]
    |          |                                             剰余          乱数
    |          |
    |          --------------------------------------------[SET         M2       ]
    |                                                                   剰余計算
    |
 437|------------------------------------------------------------------[END      ]



0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?