リネオブログ

MELSEC iQ-R C 言語インテリジェント機能ユニット Linux スタートアップマニュアル ~プログラムの開発 (Python) ~

2021 年 07 月 26 日   Linux 技術ネタ

はじめに

三菱電機社製 MELSEC IQ-R C 言語インテリジェント機能ユニット (RD55UP06-V/RD55UP12-V)で Linux を動かしてみました。その際に必要となった、技術情報をまとめてみました。

本記事は全 3 部構成になっており、今回は「Python でのプログラムの開発」についてご紹介します。
前回の記事はこちら

三菱電機社製 MELSEC IQ-R C 言語インテリジェント機能ユニット (RD55UP06-V/RD55UP12-V)

MELSEC IQ-R C 言語インテリジェント機能ユニット のハードウェアについての詳細や、専用関数については、三菱電機様にお問い合わせください。

Linux に関するお問い合わせは、リネオソリューションズまでご連絡ください。

開発環境のセットアップ

開発環境は Linux イメージにセットアップ済みです。以下のコマンドでセットアップ済みの Python バージョンを確認できます。

 Python バージョン

Python プログラムの実行

(1) Windows PC 上のテキストエディタで以下のプログラムを作成し、"Helloworld.py" で保存してください。

(2) SFTP クライアントを起動して、"Helloworld.py" を C 言語インテリジェント機能ユニットの "/root" にコピーします。

root にコピー

(3) 以下のコマンドでプログラムを実行します。

【実行結果】

実行結果

Python プログラムのデバッグ

(1) デバッグを行う場合は set_trace() をコメントアウトします。Pdb モジュールをインポートし、ステップ実行を開始したい場所に pdb.set_trace() を追加することで、ステップ実行が可能となります。

pdb.set_trace()

(2) Python プログラムを実行すると、set_trace() を追加した箇所で停止します。

プログラムを実行

(3) "n" コマンドで次の行を実行できます。

nコマンド

(4) "c" コマンドで次のブレークポイントまで実行できます。

cコマンド

CPU ユニットとの連携 (Python)

専用関数

CPU ユニットと連携する手段として、"C 言語インテリジェント機能ユニット専用関数(以降、CITL 関数)" と "MELSEC iQ-R シリーズ通信関数(以降、MDR関数)" の 2 つの専用関数が用意されています。
仕様は C 言語と同じです。

シーケンサ CPU 連携用プログラムの作成

(1) プログラムの作成

プログラムの作成

① CITL 関数及び MDR 関数を使用するプログラムの先頭には、ライブラリ関数のモジュールをインポートしてください。

プログラム インポートの必要なモジュール
CITL 関数を使用するプログラム from CITL_LinuxPy import *
MDR 関数を使用するプログラム

② CITL 関数及び MDR 関数の実行前には、必ず一度だけ以下の初期化関数を実行してください。関数実行によりシーケンサ CPU 連携に必要なモジュールがメモリ上にロードされます。関数未実行の場合、専用関数を実行することはできません。

プログラム 実行の必要な関数
CITL 関数を使用するプログラム CITLAppInit()
MDR 関数を使用するプログラム mdrAppInit()

シーケンサ CPU との連携例

シーケンサ CPU と連携するためのプログラム例を示します。
各機能の詳細は「MELSEC iQ-R C 言語インテリジェント機能ユニットユーザーズマニュアル(応用編)[SH-081564]」の「1.1.プログラム関連機能」を参照願います。

(1) C 言語インテリジェント機能ユニットへのバッファメモリアクセス

CITL_ToBuf/CITL_FromBuf 関数を使用して C 言語インテリジェント機能ユニットのバッファメモリにアクセスできます。

【プログラム例】
以下の例では、C 言語インテリジェント機能ユニットのバッファメモリアドレス "16384" への値書込みと読出しを行います。

プログラム例1

(2) シーケンサ CPU へのデバイスメモリアクセス

MDR 関数を使用してシーケンサ CPU のデバイスメモリにアクセスできます。

【プログラム例】
以下の例では、シーケンサ CPU の D0 デバイスへの値書込みと読出しを行います。

プログラム例2

(3) シーケンサ CPU からのユーザプログラム実行

専用命令 (G(P).CEXECUTE) を使用して、CITL_EntryDedicatedInstFunc 関数で登録したルーチン(ユーザプログラム)をシーケンサ CPU から実行することができます。

【シーケンサ側のプログラム例】
MELSEC iQ-R プログラミングマニュアル (ユニット専用命令編) [SH-081975]の「13 C 言語インテリジェント機能ユニット用命令」を参照願います。

【プログラム例】
以下の例では、シーケンサ CPU の専用命令 (G(P).CEXECUTE) 実行時に C 言語インテリジェント機能ユニットのバッファメモリアドレス "16384" の値を加算する関数 "func" を呼び出します。バッファメモリ値が 5 を超えた場合にはプログラムを終了します。

プログラム例3

Linux では CITL_EntryDedicatedInstFunc 関数を実行後にユーザプログラムを終了した場合、登録したルーチンは実行されません。登録するルーチンを継続して実行したい場合は、CITL_EntryDedicatedInstFunc 関数実行後にユーザプログラムが終了しないよう待機処理を入れてください。

Appendix A 機能一覧

C 言語インテリジェント機能ユニット (RD55UP06-V/RD55UP12-V) にて Linux を起動した場合に使用できる機能を以下に示します。

各機能の詳細は「MELSEC iQ-R C 言語インテリジェント機能ユニットユーザーズマニュアル(応用編)[SH-081564]」を参照してください。

機能 対応 補足

プログラム関連機能

デバイスアクセス機能

ラベル交信機能

×

CPU ユニットからのユーザプログラム実行機能

CPU ユニットへの割込み機能

×

データ解析機能

Python で対応

CPU ユニットからのデータ解析・統計解析実行機能

×

CPU ユニットから FB・専用命令を実行すると 2802 エラーとなります。

Ethernet 通信機能

FTP 機能

SFTP で対応

Telnet 機能

SSH で対応

RAS 機能

プログラム監視 (WDT) 機能

×

エラー履歴機能

イベント履歴機能

自己診断機能

×

VxWorks を起動して対応

初期化機能

SD メモリカードイメージの再書込みで対応

セキュリティ機能

個体情報読出し機能

MAC アドレスで対応

ファイルアクセス制限機能

Linux の標準機能で対応

サービス・アカウント設定機能

Linux の標準機能で対応

IP フィルタ機能

iptables で対応

時刻同期機能

収集機能

×

オンラインユニット交換機能

×

Linux は SD メモリカード装着必須のため、オンライン交換は未対応。

ファームウェアアップデート機能

SD メモリカードイメージの更新で対応

◎:Linux や OSS の優れた機能で対応可能 ○:VxWorks 同等の機能あり ×:機能なし

Appendix B 関数一覧

C 言語インテリジェント機能ユニット (RD55UP06-V/RD55UP12-V) にて Linux を起動した場合に使用できる関数を以下に示します。

各関数の仕様は「MELSEC iQ-R C 言語インテリジェント機能ユニット プログラミングマニュアル [SH-081565] 」を参照願います。

C 言語インテリジェント機能ユニット専用関数
関数名 対応 関数名 対応

CITLAppInit

CITL_SetCollectData

×

CITL_ChangeFileSecurity

×

CITL_SetLEDStatus

CITL_ClearError

CITL_SetSyncTimeStatus

×

CITL_DisableYInt

×

CITL_ShutdownRom

×

CITL_EnableYInt

×

CITL_StartCollectData

×

CITL_EntryDedicatedInstFunc

CITL_StartWDT

×

CITL_EntryTimerEvent

×

CITL_StopCollectData

×

CITL_EntryWDTInt

×

CITL_StopWDT

×

CITL_EntryYInt

×

CITL_SyncTime

×

CITL_FromBuf

CITL_SysClkRateGet

×

CITL_GetCollectData

×

CITL_SysClkRateSet

×

CITL_GetCounterMicros

×

CITL_ToBuf

CITL_GetCounterMillis

×

CITL_UnmountMemoryCard

×

CITL_GetErrInfo

CITL_WaitCollectDataRecvEvent

×

CITL_GetFileSecurity

×

CITL_WaitSwitchEvent

×

CITL_GetIDInfo

CITL_WaitTimerEvent

×

CITL_GetLEDStatus

CITL_WaitYEvent

×

CITL_GetSerialNo

CITL_X_In_Bit

CITL_GetSwitchStatus

×

CITL_X_In_Word

CITL_GetTime

×

CITL_X_Out_Bit

CITL_GetUnitStatus

×

CITL_X_Out_Word

CITL_MountMemoryCard

×

CITL_Y_In_Bit

CITL_RegistEventLog

CITL_Y_In_Word

CITL_ResetWDT

×

  • 新規対応 ○対応 ×未対応

ISR 用 C 言語インテリジェント機能ユニット専用関数

Linux では使用できません。

MELSEC iQ-R シリーズ通信関数
関数名 対応 関数名 対応

mdrAppInit

mdrRandR

mdrClose

mdrRandRLabel

×

mdrControl

×

mdrRandW

mdrDevRst

mdrRandWLabel

×

mdrDevSet

mdrReceive

mdrGetLabelInfo

×

mdrSend

mdrInit

mdrTypeRead

mdrOpen

  • 新規対応 ○対応 ×未対応

データ解析関数

Linux では使用できません。

統計解析関数

Linux では使用できません。

Appendix C 新規関数仕様

CITLAppInit

CITL 関数の実行に必要なモジュールのロードと初期化を行います。

■形式

short CITLAppInit(void)

■引数

  なし

■説明

  • CITL 関数の実行に必要なモジュールのロードと初期化を行います。
  • モジュールのロードと初期化が完了するまで本関数は終了しません。

■戻り値

戻り値 内容

0(0000H)

正常終了

0(0000H)以外

異常終了

mdrAppInit

MDR 関数の実行に必要なモジュールのロードと初期化を行います。

■形式

short mdrAppInit(void)

■引数

  なし

■説明

  • mdr 関数の実行に必要なモジュールのロードと初期化を行います。
  • モジュールのロードと初期化が完了するまで本関数は終了しません。

■戻り値

戻り値 内容

0(0000H)

正常終了

0(0000H)以外

異常終了

Appendix D アクセス可能範囲

C 言語インテリジェント機能ユニット (RD55UP06-V/RD55UP12-V) の管理 CPU にアクセスできます。

詳細は「MELSEC iQ-R C 言語インテリジェント機能ユニットプログラミングマニュアル [SH-081565] 」の「1.3章アクセス範囲」を参照してください。

Appendix E 入出力信号

C 言語インテリジェント機能ユニット (RD55UP06-V/RD55UP12-V) にて Linux を起動した場合に使用可能な XY 信号を以下に示します。

各入出力信号の詳細は「MELSEC iQ-R C 言語インテリジェント機能ユニットユーザーズマニュアル(応用編)[SH-081564]」を参照ください。

入力信号
デバイスNo. 信号名称 対応

X0

ユニット READY※

X1

SD メモリカード装着状態

X2

標準 ROM シャットダウン状態

×

X3

ユーザスクリプト実行状態

×

XF

ERR LED 状態

X10

ユーザ使用可能エリア0

X11

ユーザ使用可能エリア1

X12

ユーザ使用可能エリア2

X13

ユーザ使用可能エリア3

X14

ユーザ使用可能エリア4

X15

ユーザ使用可能エリア5

X16

ユーザ使用可能エリア6

X17

ユーザ使用可能エリア7

X18

ユーザ使用可能エリア8

X19

ユーザ使用可能エリア9

X1A

ユーザ使用可能エリア10

X1B

ユーザ使用可能エリア11

X1C

ユーザ使用可能エリア12

X1D

ユーザ使用可能エリア13

X1E

ユーザ使用可能エリア14

X1F

ユーザ使用可能エリア15

○:使用可能 ×:使用不可

※Linuxをシャットダウンした場合にもOFFとなります。

出力信号
デバイスNo. 信号名称 対応

YF

エラークリア要求

Y10

ユーザ使用可能エリア0

Y11

ユーザ使用可能エリア1

Y12

ユーザ使用可能エリア2

Y13

ユーザ使用可能エリア3

Y14

ユーザ使用可能エリア4

Y15

ユーザ使用可能エリア5

Y16

ユーザ使用可能エリア6

Y17

ユーザ使用可能エリア7

Y18

ユーザ使用可能エリア8

Y19

ユーザ使用可能エリア9

Y1A

ユーザ使用可能エリア10

Y1B

ユーザ使用可能エリア11

Y1C

ユーザ使用可能エリア12

Y1D

ユーザ使用可能エリア13

Y1E

ユーザ使用可能エリア14

Y1F

ユーザ使用可能エリア15

○:使用可能 ×:使用不可

Appendix F バッファメモリ

C 言語インテリジェント機能ユニットにて Linux を起動した場合に使用可能なバッファメモリを以下に示します。

各バッファメモリの詳細は「MELSEC iQ-R C 言語インテリジェント機能ユニットユーザーズマニュアル(応用編)[SH-081564]」を参照ください。

RD55UP06-V の場合
アドレス10進(16進) 用途 名称 対応

0 (0H)

ユニット状態エリア

RUN LED状態

1 (1H)

ERR LED状態

2 (2H)

CARD RDY LED状態

3 (3H)

USER LED状態

4~19 (4H~13H)

システムエリア

20 (14H)

ユニット動作状態

21~46 (15H~2EH)

システムエリア

47~54 (2FH~36H)

CH1用ネットワーク接続状態エリア

IPアドレス(文字列表記)

55~56 (37H~38H)

IPアドレス

57~58 (39H~3AH)

サブネットマスク

59~60 (3BH~3CH)

デフォルトゲートウェイ

61~69(3DH~45H)

システムエリア

70

CH1用共通設定状態エリア

CH1の使用有無

×

71~72 (47H~48H)

IPアドレス

×

73~74 (49H~4AH)

サブネットマスク

×

75~76 (4BH~4CH)

デフォルトゲートウェイ

×

77~80(4DH~50H)

システムエリア

81~88(51H~58H)

CH2用ネットワーク接続状態エリア

IPアドレス(文字列表記)

×

89~90(59H~5AH)

IPアドレス

×

91~92(5BH~5CH)

サブネットマスク

×

93~94(5DH~5EH)

デフォルトゲートウェイ

×

95~103(5FH~67H)

システムエリア

104(68H)

CH2用共通設定状態エリア

CH2の使用有無

×

105~106(69H~6AH)

IPアドレス

×

107~108(6BH~6CH)

サブネットマスク

×

109~110(6DH~6EH)

デフォルトゲートウェイ

×

111~139(6FH~8BH)

システムエリア

140 (8CH)

現在エラーエリア

エラーコード

141 (8DH)

システムエリア

142~147 (8EH~93H)

時刻

148~149 (94H~95H)

システムエリア

150 (96H)

エラーログエリア

エラー発生回数

151 (97H)

エラーログ書込みポインタ

152 (98H)

エラーログエリア1

153 (99H)

154~159 (9AH~9FH)

160~161 (A0H~A1H)

162~311 (A2H~137H)

エラーログ2~16

312~799 (138H~31FH)

システムエリア

600

起動中のOS

(0:VxWorks, 1:RD55UP06-V用Debian Linux, 2:RD55UP12-V用Debian Linux)

601

Linuxイメージ メジャーバージョン 例:Ver.1.11.01の場合1

602

Linuxイメージ マイナーバージョン(1) 例:Ver.1.11.01の場合11

603

Linuxイメージ マイナーバージョン(2) 例:Ver.1.11.01の場合1

800 (320H)

データ収集状態エリア

データ欠測状態

×

801 (321H)

データ収集状態

×

802~803 (322H~323H)

システムエリア

900 (384H)

ファームウェアアップデート履歴格納エリア

ファームウェアアップデート異常終了発生有無

×

901~909 (385H~38DH)

システムエリア

×

910 (38EH)

最新のファームウェアアップデート情報

×

911 (38FH)

×

912 (390H)

×

913 (391H)

×

914 (392H)

×

915 (393H)

×

916 (394H)

×

917 (395H)

×

918 (396H)

×

919 (397H)

最新のファームウェアアップデート結果

×

920 (398H)

×

921 (399H)

ファームウェアアップデート履歴格納エリア

前回のファームウェアアップデート情報

×

922 (39AH)

×

923 (39BH)

×

924 (39CH)

×

925 (39DH)

×

926 (39EH)

×

927 (39FH)

×

928 (3A0H)

×

929 (3A1H)

×

930 (3A2H)

前回のファームウェアアップデート結果

×

931 (3A3H)

×

932~16383

(3A4H~3FFFH)

システムエリア

16384~2097151

(4000H~1FFFFFH)

ユーザエリア

○:使用可能 ●:新規追加 ×:使用不可

RD55UP12-Vの場合
アドレス10進(16進) 用途 名称 対応

0 (0H)

ユニット状態エリア

RUN LED状態

1 (1H)

ERR LED状態

2 (2H)

CARD RDY LED状態

3 (3H)

USER LED状態

4~19 (4H~13H)

システムエリア

20 (14H)

ユニット動作状態

21~46 (15H~2EH)

システムエリア

47~54 (2FH~36H)

CH1用ネットワーク接続状態エリア

IPアドレス(文字列表記)

55~56 (37H~38H)

IPアドレス

57~58 (39H~3AH)

サブネットマスク

59~60 (3BH~3CH)

デフォルトゲートウェイ

61~69 (3DH~45H)

システムエリア

70 (46H)

CH1用共通設定状態エリア

CH1の使用有無

×

71~72 (47H~48H)

IPアドレス

×

73~74 (49H~4AH)

サブネットマスク

×

75~76 (4BH~4CH)

デフォルトゲートウェイ

×

77~80 (4DH~50H)

システムエリア

81~88 (51H~58H)

CH2用ネットワーク接続状態エリア

IPアドレス(文字列表記)

89~90 (59H~5AH)

IPアドレス

91~92 (5BH~5CH)

サブネットマスク

93~94 (5DH~5EH)

デフォルトゲートウェイ

104 (68H)

CH2用共通設定状態エリア

CH2の使用有無

×

105~106 (69H~6AH)

IPアドレス

×

107~108 (6BH~6CH)

サブネットマスク

×

109~110 (6DH~6EH)

デフォルトゲートウェイ

×

111~139 (6FH~8BH)

システムエリア

140 (8CH)

現在エラーエリア

エラーコード

141 (8DH)

システムエリア

142~147 (8EH~93H)

時刻

148~149 (94H~95H)

システムエリア

150 (96H)

エラーログエリア

エラー発生回数

151 (97H)

エラーログ書込みポインタ

152 (98H)

エラーログエリア1

153 (99H)

154~159 (9AH~9FH)

160~161 (A0H~A1H)

162~311 (A2H~137H)

エラーログ2~16

312~799 (138H~31FH)

システムエリア

600

起動中のOS

(0:VxWorks, 1:RD55UP06-V用Debian Linux, 2:RD55UP12-V用Debian Linux)

601

Linuxイメージ メジャーバージョン 例:Ver.1.11.01の場合1

602

Linuxイメージ マイナーバージョン(1) 例:Ver.1.11.01の場合11

603

Linuxイメージ マイナーバージョン(2) 例:Ver.1.11.01の場合1

800 (320H)

データ収集状態エリア

データ欠測状態

×

801 (321H)

データ収集状態

×

802~803 (322H~323H)

システムエリア

900 (384H)

ファームウェアアップデート履歴格納エリア

ファームウェアアップデート異常終了発生有無

×

901~909 (385H~38DH)

システムエリア

×

910 (38EH)

最新のファームウェアアップデート情報

×

911 (38FH)

×

912 (390H)

×

913 (391H)

×

914 (392H)

×

915 (393H)

×

916 (394H)

×

917 (395H)

×

918 (396H)

×

919 (397H)

最新のファームウェアアップデート結果

×

920 (398H)

×

921 (399H)

ファームウェアアップデート履歴格納エリア

前回のファームウェアアップデート情報

×

922 (39AH)

×

923 (39BH)

×

924 (39CH)

×

925 (39DH)

×

926 (39EH)

×

927 (39FH)

×

928 (3A0H)

×

929 (3A1H)

×

930 (3A2H)

前回のファームウェアアップデート結果

×

931 (3A3H)

×

932~16383

(3A4H~3FFFH)

システムエリア

16384~2097151

(4000H~1FFFFFH)

ユーザエリア

○:使用可能 ●:新規追加 ×:使用不可

Appendix G 使用可能な SD メモリカード

SD メモリカードは 4GB 以上の三菱電機製 SD メモリカードを使用してください。

品名 内容

NZ1MEM-4GBSD

SDメモリカード(4GB)

NZ1MEM-8GBSD

SDメモリカード(8GB)

NZ1MEM-16GBSD

SDメモリカード(16GB)

組込みLinuxセキュリティ基礎講座
Vigiles サポート
Yocto Project よもやま話
Yocto よもやま話 第 14 回 「Yocto 4.3 Nanbield リリース」
Yocto よもやま話 第 14 回 「Yocto 4.3 Nanbield リリース」

2024 年 03 月 26 日 Yocto Project よもやま話

Yocto よもやま話 第 13 回 「Yocto Project の最新動向 2023 夏」
Yocto よもやま話 第 13 回 「Yocto Project の最新動向 2023 夏」

2023 年 07 月 25 日 Yocto Project よもやま話

Yocto よもやま話 第 12 回 「Yocto Project 始めます その 2」
Yocto よもやま話 第 12 回 「Yocto Project 始めます その 2」

2023 年 06 月 20 日 Yocto Project よもやま話

Linux 技術ネタ
RISC-Vについて学ぶ-後編
RISC-Vについて学ぶ-後編

2024 年 01 月 10 日 Linux 技術ネタ

RISC-Vについて学ぶ-前編
RISC-Vについて学ぶ-前編

2023 年 12 月 12 日 Linux 技術ネタ

イベントレポート
EdgeTech+ West 2024 出展レポート
EdgeTech+ West 2024 出展レポート

2024 年 07 月 26 日 イベントレポート

Advanced Technology Forum 2024 Summer 参加レポート
Advanced Technology Forum 2024 Summer 参加レポート

2024 年 07 月 09 日 イベントレポート

リクルート
新卒採用、絶賛募集中!
新卒採用、絶賛募集中!

2023 年 05 月 30 日 リクルート

国立大学オンライン研修レポート 2022
国立大学オンライン研修レポート 2022

2022 年 09 月 27 日 リクルート

信州リネオ便り
社内BBQを開催しました!
社内BBQを開催しました!

2024 年 09 月 25 日 信州リネオ便り

夏季休業明け、スイカを頂きました!
夏季休業明け、スイカを頂きました!

2024 年 08 月 20 日 信州リネオ便り

逃げ上手の聖地、諏訪大社上社前宮
逃げ上手の聖地、諏訪大社上社前宮

2024 年 08 月 07 日 信州リネオ便り

ソリューション統括部
シリコンバレー探検記 2019 ~番外編~
シリコンバレー探検記 2019 ~番外編~

2019 年 12 月 10 日 ソリューション統括部

シリコンバレー探検記 2019 ~後編~
シリコンバレー探検記 2019 ~後編~

2019 年 12 月 10 日 ソリューション統括部

シリコンバレー探検記 2019 ~前編~
シリコンバレー探検記 2019 ~前編~

2019 年 12 月 10 日 ソリューション統括部

マーケティング統括部
大成功決起大会!!(ET2019)
大成功決起大会!!(ET2019)

2019 年 12 月 13 日 マーケティング統括部

ESEC 2019 決起大会
ESEC 2019 決起大会

2019 年 04 月 25 日 マーケティング統括部

シリコンバレー探検記 その 2
シリコンバレー探検記 その 2

2018 年 12 月 18 日 マーケティング統括部