PSL_W Ver.1.4


ダウンロード

●概要
  ラダー式プログラマブルコントローラ(光洋電子工業製 KOSTAC SR-20)シミュレータ
  (一部の三菱電機 MELSEC 基本命令も可)

●動作環境
  Windowsアプリ

●プログラマブルコントローラのサポート命令
  LD = STR, LDI = STR NOT,
  AND,OR, ANI = AND NOT, ORI = OR NOT,
  ANB = AND STR, ORB = OR STR,
  MCS, MCR
  OUT, TMR, CNT
  SET, RST, SR (Ver.1.3以降)
  END
 拡張命令(アセンブラ設定ダイアログの拡張命令で有効/無効を設定する)
  Drum Seq. (Ver.1.3以降)
  NOT = INV (Ver.1.3以降)
  UDC : Up/Downカウンタ (Ver.1.3以降)
  PLS, PLF : 立ち上がり,立ち下がりパルス出力 (Ver.1.3以降)

 参考書
  ラダー式プログラマブルコントローラ KOSTAC SR-20 技術資料,光洋電子工業,1985.10
  三菱電機 MELSEC マニュアルおよび資料

●リレー(番号は8進数ではなく10進数)
  000〜009 ボタン(プッシュボタンとトグルボタンの変更可)
  010〜014 接近センサー(アーム用010〜012,テーブル用013,014)
  015〜029 表示ランプ(変更可)
  030〜033 アーム,テーブルの回転方向(アームCW=030,CCW=031,テーブルCW=032,CCW=033)
  034〜047 外部出力用(内部メモリ)(Ver.1.3以降)
  048〜127 キーボード (Ver.1.3以降)
  128〜159 内部リレー(内部メモリ)(Ver.1.3以降)
  160〜299 内部リレー(内部メモリ)
  300〜599 内部リレー(内部メモリ,特殊リレーを除く)(Ver.1.3以降)
  600〜609 カウンタ,タイマ(1s単位)
  610〜619 カウンタ,タイマ(0.1s単位) (Ver.1.3以降)
 特殊リレー(Ver.1.3)
  374    初期リセットリレー(アセンブル後の実行開始時,最初の1スキャンだけONする.出力不可)
  378    常時OFFのリレー(出力不可)
  379    常時ON のリレー(出力不可)
 キーボード(Ver.1.3)
  048〜055($30〜$37)  0 , 1 , 2 , 3 , 4 , 5 , 6 , 7  (0〜9はASCIIコードと同じ)
  056〜063($38〜$3F)  8 , 9 ,INS,DEL, ←, ↑, →, ↓
  064〜071($40〜$47)  SP, A , B , C , D , E , F , G  (A〜ZはASCIIコードと同じ)
  072〜079($48〜$4F)  H , I , J , K , L , M , N , O
  080〜087($50〜$57)  P , Q , R , S , T , U , V , W
  088〜095($58〜$5F)  X , Y , Z ,ENT,PUp,PDn,END,HOME
  096〜103($60〜$67) NP0,NP1,NP2,NP3,NP4,NP5,NP6,NP7
  104〜111($68〜$6F) NP8,NP9,NP*,NP+,NPs,NP-,NP.,NP/
  112〜119($70〜$77)  F1, F2, F3, F4, F5, F6, F7, F8
  120〜127($78〜$7F)  F9,F10,F11,F12,F13,F14,F15,F16

●命令の実行
 ・スキャンサイクルの最初にボタン,センサーの状態が一括入力され,内部メモリに記憶される.接点条件はこの内部メモリの状態を使用する.
 ・アームとテーブル,表示ランプなどの出力の状態は一旦内部メモリに記憶され,スキャンサイクルの最後に出力が一括確定される.
 ・内部リレー,カウンタやタイマはプログラムの実行にしたがい逐次変化する.
 ・出力を接点条件として使用することもできるが,この場合も内部メモリの状態を使用するため,内部リレーと同様にプログラムの実行にしたがい逐次変化する.
 ・入力に出力すると,内部メモリが書き換えられる(エラーとはならない).

●アセンブラ
 独自形式なので注意
 ・1行1文.';' 以降コメント.大文字と小文字の区別はない.
  Ver.1.0
    <文> ::= <命令文>
  Ver.1.1および1.2
    <文> ::= <命令文> | <変数定義文>
  Ver.1.3
    <文> ::= <命令文> | <変数定義文> | <プリプロセッサ文>
 ・END命令でアセンブルを終了する.
 ・リレー番号には変数と簡単な整数の演算式が使用できる.(Ver.1.1以降)
  (Ver.1.1は四則演算式のみ.括弧の使用はVer.1.2以降.比較演算子はVer.1.3以降)
  変数は英字または'_'で始まる英数字または'_'からなる文字列.大文字と小文字の区別はない.
  変数は大域変数のみ.
  実行時に動的に変化するのではない.
  リレー番号は,プリプロセッサではなく,アセンブラで処理される.
 ・最初の空白でない文字が'#'である次の構文で変数の値を定義する.再定義可能.
  ラダー図で対応するリレー番号を文字列で表示(表示は3文字まで)できるように登録することもできる.
  ただし,同じ番号に異なった文字列を登録した場合,最後に登録した文字列が表示される.
  逆に,異なった番号に同じ文字列を登録することはできる.
    <変数定義文> ::= # {#}{:} <変数定義式>
      #  :変数の値を定義する.
      ## :変数の値を定義し,文字列も登録する.
      #: :文字列を登録する.
    <変数定義式> ::= <変数> = <整数の演算式>
    <変数> ::= <英字または_> {<英数字または_> | [<整数の演算式>]}
      大文字と小文字の区別はない.
      [ ]は配列ではない.[ ]で囲まれた式の値が文字列に置き換わった変数となる.(Ver.1.3以降)
      例 # I=1
        # A[2+I] = 0 ; これは A3 = 0
    <整数の演算式> ::= <整数の四則演算式> | <整数の演算式> <比較演算子> <整数の四則演算式>
    <比較演算子> ::= == | != | < | > | <= | >=
      比較演算の結果,偽は0, 真は1.
    <定数> ::= <10進数> | $ <16進数> | <文字定数>
    <文字定数> ::= ' <文字> {<文字>} '
      最後の1文字のASCIIコード
 ・関数 (Ver.1.3以降)
    ISDEF(<変数>)       : 変数が定義されていれば1,さもなければ0
    ISBLANK(<引数>)     : 引数が空ならば1,さもなければ0
    ISIDN(<引数1>,<引数2>) : 引数1と引数2の文字列が等しければ1,さもなければ0
    INSTR(<引数1>,<引数2>) : 引数1に引数2の文字列が含まれていれば1,さもなければ0
 ・例
    # a = 2      ; 変数Aの定義
    # Var = 10+a*2  ; 変数VARの定義
    STR Var+1     ; STR 15 と同じ

●プリプロセッサ(Ver.1.3以降)
 独自形式なので注意
 ・最初の空白でない文字が'#'である行を対象とする.
    <プリプロセッサ文> ::= <INCLUDE文> | <論理式展開文> | <REPTブロック> | <IFブロック> | <ERR文>
 ・変数定義文は,プリプロセッサでも評価される.
○INCLUDE文
  指定されたファイルの内容を取り込む.
  現在のファイルのディレクトリ(フォルダ)で探し,次に設定されたインクルードパスで探す.
  インクルードパスは,アセンブラ設定ダイアログの[インクルードパス]に';'で区切って設定する.
  入れ子が深いとエラーとなる.
  取り込まれたファイルにEND命令があると,それ以降はアセンブルされない.
 ・構文
    <INCLUDE文> ::= #INCLUDE <ファイル名> {<引数>{,<引数>}}
  @0〜@9(@の直後の数字1文字)または @[<整数の演算式>] で参照すると,コメントを含め対応する実引数の文字列に置き換わる.
  @Aのようにマッチしないとそのままで,@が2つ続くと1つ削除される.
  引数は10個までで,値渡しではない.途中の実引数を空にすることもできる.
 ・例
    #INCLUDE SUB.PSL x, ab+2, 2, , a+20
○論理式展開文
  論理式をPSLの命令に展開する.変数は評価されず,そのまま書き出され,アセンブラで処理される.
  論理式中の '[' から ']' まではコメントとして無視する.入れ子不可.
 ・構文
    <論理式展開文> ::= # <出力式>
    <出力式> ::= <論理式> | <リレー番号> <出力演算子> <出力式> | <出力演算子> <出力式>
    <出力演算子> ::= <- | <+ | <:
      <- の場合はPSL形式変数, <+ の場合はQuine形式変数, <: の場合は標準形式変数.
      右から左へと評価される.
      複数の形式が混在する場合は,論理式の直前の出力演算子の形式で処理する.
      出力演算子がない論理式の場合は,アセンブラ設定ダイアログの[既定の変数形式]にしたがう.
    <論理式> ::= <項> | <論理式> <論理和演算子> <項>
    <論理和演算子> ::= + | |
    <項> ::= <因子> | <項> <論理積演算子> <因子> | <項> <因子>
    <論理積演算子> ::= * | &
    NOT命令が有効のとき
      <因子> ::= {<否定演算子>} <番号> | {<否定演算子>} ( <論理式> )
    NOT命令が無効のとき(KOSTAC SR-20の場合)
      <因子> ::= {<否定演算子>} <番号> | ( <論理式> )
    <否定演算子> ::= !
    <リレー番号> ::= <番号> | <整数の演算式>
    <番号> ::= <論理変数> | <定数>
    <論理変数> ::= <PSL形式変数> | <Quine形式変数> | <標準形式変数>
    <PSL形式変数> ::= <英大文字> {<英小文字>} {<数字>} | <英小文字> {<英小文字>} {<数字>}
      大文字と小文字の区別はない.
    <Quine形式変数> ::= <英大文字> | <英小文字>
      大文字は正論理を表わし,小文字は否定を表わす.
    <標準形式変数> ::= <英字または_> {<英数字または_>}
      大文字と小文字の区別はない.
    <定数> ::= <10進数> | $ <16進数> | <文字定数> | <文字列>
    <文字定数> ::= ' <文字> {<文字>} '
      最後の1文字のASCIIコード
    <文字列> ::= " <文字> {<文字>} "
      論理式には整数の演算式を記述できないので,整数の演算式は文字列として記述する.
      アセンブラの変数の[<整数の演算式>]は使用できないので,""で囲んで文字列として記述する.
 ・論理式の演算子優先順位と結合規則
  (1) 否定 (NOT): !       右から左 NOT(INV)命令が無効のときは,!<因子> のみで,!(<論理式>) は不可
  (2) 論理積(AND): * または & 左から右 省略可.省略時の論理変数の区切り方は上記参照
  (3) 論理和(OR) : + または | 左がら右
 ・アセンブラ設定ダイアログの[論理式展開方式]で,スタック方式展開と演算方式展開を切り替える.
  スタック方式展開:なるべく式の左から順に展開
  演算方式展開  :演算子の優先順位にしたがって元の式と順序を変えて展開
 ・例
    # "q+1" <- !001(a+"b+1")  ; 出力演算子 <- の左側の "" はなくてもよい
    展開結果
      スタック方式展開  演算方式展開
        STR NOT 001    STR a
        STR a     OR b+1
        OR b+1     AND NOT 001
        AND STR     OUT q+1
        OUT q+1
○REPTブロック
  指定された回数だけ,#REPTと#ENDPの間の文を繰り返し展開する.
  回数が0以下の場合は,展開しない.
  入れ子可.
  IFブロックとREPTブロックは交差させることはできない.
 ・構文
    <REPTブロック> ::= #REPT <整数の演算式>
                 {<文>}
                #ENDP
○IFブロック
  複数の処理の中から1つを選んで展開する.
  式の値が0以外のブロックがあれば,そのブロックのみを展開する.#ELSEIFは複数可.
  いずれの式の値も0のとき,#ELSEがあればその後から#ENDIFの前までを展開し,なければ何も展開しない.
  入れ子可.
 ・構文
    <IFブロック> ::= #IF <整数の演算式>
                {<文>}
              {#ELSEIF <整数の演算式>
                {<文>}}
              {#ELSE
                {<文>}}
              #ENDIF
○ERR文
  エラーメッセージを表示してプリプロセスを終了する.
 ・構文
    <ERR文> ::= #ERR {<文字>}

●例題(DATAディレクトリ内)
(注意)
 ・ファイルの拡張子は.PSL..TRTや.EXPはQuineによる論理回路設計用ファイル.
 ・例題は内部リレーはメモリで,プログラムの先頭から順次実行されるものとして作成してあるため,実際のリレーでうまく動くとは限らない.
 ・CP/Mから変換したファイルは,EOF(0x1A)以降はゴミ.(このプログラムでは無視される)
○EX
・Ex0 自己保持回路
  押しボタンスイッチ(001)を押すとア−ムが右回転(030)をはじめ,押しボタンスイッチ(002)を押すと停止.
・Ex1 回転動作
  ア−ムが原位置(010)にあるとき,押しボタンスイッチ(000)を押すと,ア−ムが右回転(030)をはじめ,右下(012)までくると停止.
・Ex2 回転動作(通過確認)
  ア−ムが原位置(010)にあるとき,押しボタンスイッチ(000)を押すと,ア−ムが右回転をはじめ,右上(011)を通過後,ア−ムはさらに回転を続け右下(012)までくると停止.
・Ex3 往復運動
  ア−ムが原位置(010)にあるとき,押しボタンスイッチ(000)を押すと,ア−ムが右回転をはじめ,右下(012)までくると停止.ア−ムは直ちに左回転をはじめ右上(011)までくると停止.ア−ムは直ちに右回転をはじめ原位置(010)までくると停止.
・Ex4 同期運動
  Ex3において,ア−ムが動き出すと同時にテ−ブルも原位置(013)から左回転をはじめ,ア−ムが原位置(010)に停止したあとテ−ブルは原位置(013)に達するまで回転を続け,原位置(013)で停止.
・Ex5 繰り返し動作
  Ex4の一連の動作を5秒休止で3回行う.
(注意)
 ・EX0A など,コンソール版の例題とは異なり,出力が後の方に記述してあるものもある.
 ・別解あり.
○TEXT
 参考書の該当ページ参照(同じ名前で"_A"付きは,出力リレー番号を変えて統一した物)
○COMB
 組み合わせ回路
○FF
 RS*, JK_FF*, D_FF*, T_FF* フリップフロップ
○COUNTER
 CNT* カウンタ
○SHIFTREG
 SR* シフトレジスタ
○SUB
 INCLUDE用サブプログラム
○TEST
 テスト用

●操作方法
・[ファイル]メニューの[新規作成]で左中央のエディットビューにプログラマブルコントローラの命令で記述したプログラムを新規に作成後,
 [実行]メニューの[アセンブル]でアセンブルする.
 プログラムを修正した場合は,アセンブルする必要がある.
 プログラムファイル(拡張子.PSLのテキスト形式)を開いた場合は,自動でアセンブルされる.
・エラーがあれば,左下のビューに表示される.
 [実行]メニューの[アセンブル リスト]でアセンブル結果や[プリプロセス出力]でプリプロセッサの出力を表示させることができる.
 左下のビューをクリックして文字列を選択し,[編集]メニューの[コピー]で選択された文字列をコピーできる.
・エラーがなくても,ラダー図が描けないことがある.
・エラーがなければ,[実行]メニューの[実行開始]で連続実行し,[停止]で停止させる.
 ブレークポイントが設定されていれば,停止する.
 [実行開始]で現在のプログラムカウンタの位置から続けて実行する.
 [1サイクル実行]は1スキャンサイクル毎に実行,停止する.
 [ステップ実行]は1命令毎に実行,停止する.(同一サイクル内で後方にある実行済み命令の状態変化は意味がないので注意)
・エディットビューの命令のある行番号を左ダブルクリックするか,右下のラダー図ビューで記号を左ダブルクリックするとブレークポイントを設定または解除できる.
 ブレークポイントの「直前」はその命令を実行する直前に停止する.
 「On時」および「Off時」はその命令実行後の状況に応じて停止する.この場合,プログラムカウンタは次の命令を指す.
・実行時には,右上のパネルビューでボタンを操作する.
 [オプション]メニューの各コマンドでプッシュボタンとトグルボタンを切り替えたり,モニタ表示を変更したりできる.
 モニタ表示は選択されたリレーの状態を表示する.モニタ表示に出力を選択している場合は,内部メモリの状態または確定出力を表示する.
 モニタ表示部を左ダブルクリックすると,On/Offを設定できる.
・停止時に,[実行]メニューの[原点復帰]でアームとテーブル(以降ロボット)を初期位置に戻す.
 左上のロボットビューをクリック後,テンキーの'1'〜'3'および'7'〜'9'でロボットを回転させる.
・内部リレーなどを初期状態に戻すためには,アセンブルし直す.
・パネルビューを除き,クリックしたビューを印刷できる.
・右下のラダー図ビューをクリックして,[編集]メニューの[コピー]でラダー図を文字列としてコピーできる.
 (a接点は'H',b接点は'N',配線は'-'や'|'など)
 ただし,ラダー図からプログラムに変換することはできない.
・ラダー図にコメントを表示している場合,ラダー図ビューでコメント表示位置を左ダブルクリックするとコメントを追加・修正できる.
 ただし,追加・修正したコメントは保存できない.また,プログラムを修正したり,アセンブラ設定を変更したりすると,コメントは初期化される.
・[ファイル]メニューの[保存]でエディットビューのプログラムをテキストファイルとして保存する.
・[オプション]メニューの[ログ設定]で指定した条件でリレーの状態(0か1)を記録し,csvファイルに書き出すことができる.
 [番号]   :ログを取りたいリレー番号をコンマ','で区切って指定する.表示用文字列を使用することもできる.例:0,1,2,Q0-Q1,M60
         設定時に登録されている文字列を使用するため,別のプログラムやアセンブルし直した場合は再設定が必要である.
 [記録]   :[出力確定後]か[逐次出力時]かを選択する.[逐次出力時]の場合,1スキャンサイクルに付き (カウンタ等を含む出力の数+2(一括入出力分))のデータが記録される.
 [開始トリガ]:記録開始の設定
  [変化時]    :入出力のいずれの変化をトリガとしてログを開始するかを指定する.トリガ後のログを取るスキャンサイクルを指定する.その後,変化がない間は記録されない.
  [入力シーケンス]:[オプション]メニューの[入力シーケンス]で読み込まれている入力シーケンスにしたがってログを取る.何サイクル毎に次の入力データを使用するかを指定する.
            上記[変化時]と排他的.
 [同一データ]:ログをファイルに保存するとき,1スキャンサイクル分のデータを何個書き出すかを指定する.
         [出力確定後]の記録で[出力確定補正]がチェックされている場合,[逐次出力時]と1スキャンサイクルあたりのデータ数が同じになる.
 [オフセット]:複数のリレーのログを書き出すときの1リレーあたりの間隔を指定する.リレーの値は0か1で,最後の番号はオフセットが0となる.Excelで散布図として表示するときは1.5などとするとよい.
 なお,ログ開始時に指定されたリレーの状態が記録される.
・[オプション]メニューの[入力シーケンス]で自動設定する入力シーケンスをcsvファイルから読み込む.
 最初の空白でない文字が ';' の行はコメント行として読み飛ばす.それ以外はデータ行とみなす.
 コメント行で"Log"を含むと,ログを取りたいリレー番号の指定となる.
 データ行の1行目は入力リレー番号を指定する.入力リレー以外を指定しても無視する.
 データ行の2行目以降はデータを0か0以外の数字で記述する.
 データ読み込み後,[実行開始]で実行すると,1スキャンサイクルにつき1行ずつデータが入力に設定され,データの最後で実行が停止する.
 同じデータで再実行させる場合は,再度読み込むか,[ログ設定]で[入力シーケンス]を選択する.

●履歴
 Ver.1 16/11 コンソール版のPSL32から移植
 Ver.1.1 16/12 ラダー図の表示変更.変数追加.ブレークポイント追加
 Ver.1.2 17/12 モニタ表示変更.式で括弧の使用可
 Ver.1.3 18/09 NOT(INV), SET, RST, SR, Drum Seq.命令, UDC, PLS, PLF,プリプロセッサの追加
 Ver.1.3a 19/03 例題の追加
 Ver.1.4 19/07 ログ,入力シーケンスの追加



本プログラムをインストールおよび使用することによって発生したいかなる損害等に対しても一切責任を負いません。