リネオブログ

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

2021 年 06 月 24 日   Linux 技術ネタ

はじめに

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

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

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

MELSEC IQ-R C 言語インテリジェント機能ユニット のハードウェアについての詳細や、専用関数については、三菱電機様にお問い合わせください。Linux に関するお問い合わせは、リネオソリューションズ株式会社 ( sales@lineo.co.jp ) までご連絡ください。

開発環境のセットアップ

(1) SSH クライアントで Linux にリモートログインします。

(2) Linux のテキストエディタで "/etc/apt/source.list" を開き、以下を追加して保存してください。

【追加項目】
deb http://ftp.de.debian.org/debian stretch main

追加項目

(3) "apt-get update" を実行し、パッケージリストの更新を行いますパッケージリストの更新

(4) "apt-get install" で開発用のパッケージをインストールします。開発用のパッケージをインストール

【インストールするパッケージ】
  • autoconf
  • libtool
  • automake
  • build-essential
  • gdb
[ポイント]
本書では C 言語インテリジェント機能ユニット上でプログラムのビルドとデバッグを行うセルフ開発環境の構築を行います。ホスト PC でビルドを行うクロス開発環境については、Timesys 社の "TimeStorm" が利用可能です。
"TimeStorm" についてはリネオソリューションズ株式会社へお問合せください。

C 言語プログラムのビルド

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

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

rootにコピー

(3) 以下のビルドコマンドを実行します。

ビルドコマンドを実行

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

プログラムを実行

【実行結果】

実行結果

C 言語プログラムのデバッグ

GDB (GNU デバッガ) を使ってプログラムのデバッグを行います。詳細な使い方は GNU の WEB サイトでご確認ください。

(1) デバッグを行う場合は以下のようにオプションをつけてビルドコマンドを実行します。

ビルドコマンドを実行

(2) 以下のコマンドで gdb を実行します。

gdbを実行

【実行結果】

実行結果

(3)"b" コマンドで "main" 関数にブレークポイントを設定します。

ブレークポイントを設定

(4) プログラムが実行されると、ブレークポイントを設定した "main" 関数の先頭行でストップします。

関数の先頭行でストップ

(5) "n" コマンドを実行するとステップ実行されます。

ステップ実行

(6)"u" コマンドを実行すると、ループを抜けるまで処理が実行されます。

ループを抜けるまで処理が実行

(7)"q" コマンドでデバッグを終了できます。

デバッグを終了

CPU ユニットとの連携( C 言語)

専用関数

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

シーケンサ CPU 連携用プログラムのビルド

(1) プログラムの作成

(1) プログラムの作成

① CITL 関数及び MDR 関数を使用するプログラムの先頭には、ライブラリ関数のヘッダファイルをインクルードしてください。ヘッダファイルは専用サイトからダウンロードしてください。

プログラム インクルードの必要なヘッダファイル

CITL 関数を使用するプログラム

#include "CITLFunc.h"

MDR 関数を使用するプログラム

#include "MDRFunc.h"

【ヘッダファイルのダウンロード先】

mitsubishi-CITL-linux-registration

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

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

(3) ビルド

ビルドする場合は、以下のように "/usr/lib/citl" と "/usr/lib" ライブラリをリンクしてビルドを実行してください。

gcc <FILENAME> -Wall -L"/usr/lib/citl" -L"/usr/lib" -lCommManager -lECHLP_PRJ -lECMPL -lVxCITLFunc -lVxMDRFunc -lVxMDRFuncW -lVxInteliDed -lVxWorksSysDrv -lVxMRbfOS -lVxMRbfDrv -lINFO_PRJ -lCTRL_PRJ -lBASE_PRJ -lTAG_PRJ -lv2lin-0.1 -ldl -lpthread -lLinuxEmu -lrt -o <OUTFILE>

<FILENAME> ビルド対象となるソースコード名 (***.c, ***.cpp)

<OUTFILE> 出力対象となる実行ファイル名 (拡張子は未指定)

シーケンサ 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" を呼び出します。バッファメモリ値が 3 を超えた場合にはプログラムを終了します。

プログラム例 3

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

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 用

第3部、プログラム開発 (Python) 編

Yocto Project 公式実践講座 5 月 ~ 7 月 開催分 受講お申込み受付中!
Yocto Project よもやま話
新企画「Yocto Project よもやま話」の連載を始めます
新企画「Yocto Project よもやま話」の連載を始めます

2022 年 04 月 28 日 Yocto Project よもやま話

Linux 技術ネタ
イベントレポート
ET & IoT 2021 レポート
ET & IoT 2021 レポート

2021 年 12 月 01 日 イベントレポート

組込み総合技術展 Embedded Technology 2019 レポート
組込み総合技術展 Embedded Technology 2019 レポート

2019 年 12 月 13 日 イベントレポート

組込み総合技術展 関西 ETWest2019 レポート
組込み総合技術展 関西 ETWest2019 レポート

2019 年 06 月 20 日 イベントレポート

リクルート
違うズラ
違うズラ

2018 年 10 月 26 日 リクルート

信州で人生がかわる
信州で人生がかわる

2018 年 07 月 24 日 リクルート

新入社員インタビュー
新入社員インタビュー

2017 年 02 月 28 日 リクルート

北小野通信
入笠山ハイキング その 2
入笠山ハイキング その 2

2019 年 10 月 09 日 北小野通信

入笠山ハイキング その 1
入笠山ハイキング その 1

2019 年 10 月 09 日 北小野通信

氷の世界
氷の世界

2019 年 01 月 22 日 北小野通信

ソリューション統括部
シリコンバレー探検記 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 日 マーケティング統括部