文書の過去の版を表示しています。
目次
MPINO STUDIO 2 Phase 2 · メモリを理解する
MPINO Studio 2を初めて使用する方のためのメモリ基礎文書です。Phase 1で作成したプロジェクトを開き、P・M・D・C・T・Rメモリの違い、アドレス表記、メモリ領域設定、使用箇所の確認、時間で動く特殊接点を順に学びます。
| アプリケーション | 基準ボード | 完了目標 |
|---|---|---|
| MPINO Studio 2 | MPINO-8A4R(T)-S | メモリアドレスを区別し、プロジェクト内の使用箇所を探せること |
スクリーンショットについて: 画面は韓国語UIです。ボタンの位置、アイコン、ショートカットは同じです。
1. 始める前に
次のものを準備します。
- MPINO Studio 2をインストールしたPC
- Phase 1で保存した
.mp2プロジェクト - MPINO-8A4R(T)-Sボード
- 最後の点滅実習をボードで確認する場合はMPダウンロードケーブル
この文書の大部分はボードを接続しなくても確認できます。書き込み実習では最初に出力負荷を外し、Phase 1で使用したボードとポートをもう一度確認してください。
このPhaseを完了すると、次の操作ができます。
- アドレスの先頭文字から保存される値の種類を判断する。
- 必要な値の範囲に合わせてBIT・BYTE・WORD・DWORDを選ぶ。
WM1.3のようなアドレスを幅、領域、番号、ビットに分けて読む。- メモリ領域のサイズと予想SRAM使用量を確認する。
- プロジェクト内で特定のアドレスを使用している場所を探す。
@100と@F1000の時間動作の違いを説明する。
2. メモリとは
メモリは、プログラムの実行中に入力状態、内部条件、計算結果、タイマ値などを保存する領域です。MPINO Studio 2のラダーロジックとArduino Cコードは同じメモリを使用できます。
基本アドレスは、領域を表す文字 + 0から始まる番号で表します。たとえばM10はM領域の11番目、D0はD領域の最初のアドレスです。
| 領域 | 基本単位 | 保存する値 | 初めて使うときの基準 |
|---|---|---|---|
P | BIT | ボードのデジタル入出力状態 | 物理端子と入出力方向を選択したボードのピンマップで確認します。 |
M | BIT | 外部端子に直接接続されない内部ON/OFF状態 | 運転許可、シーケンス状態、インターロック結果などの補助条件に使います。 |
D | WORD | 符号付き整数と計算結果 | 数量、設定値、整数として扱う変換済みセンサ値に使います。 |
C | WORD | カウンタ値 | 選択したボードでCアドレスがアナログ入力やPWM出力などに割り当てられていないか先に確認します。 |
T | WORD | タイマ経過値 | ラダータイマが使用する時間データを保存します。 |
R | 32ビット実数 | 小数点を含む値 | 温度、比率、換算値など、実数計算が必要なデータに使います。 |
Pアドレスの注意:P0がすべてのボードで入力を意味するわけではありません。入出力方向と物理端子は、プロジェクトで選択したボード定義に従います。
R値の比較: 実数計算では小さな丸め誤差が生じることがあります。計算した実数を制御条件に使う場合は、用途に合った許容範囲を設けて比較してください。
3. MPINO-8A4R(T)-Sの標準メモリ
MPINO-8A4R(T)-Sを選択したときの標準メモリ数は次のとおりです。
| 領域 | 標準数 | 標準アドレス範囲 |
|---|---|---|
P | 64 | P0 ~ P63 |
M | 1,024 | M0 ~ M1023 |
D | 200 | D0 ~ D199 |
C | 100 | C0 ~ C99 |
T | 128 | T0 ~ T127 |
R | 50 | R0 ~ R49 |
個数と最後のアドレスを混同しないでください。番号は0から始まるため、Dメモリ200個はD0からD199までです。
C領域とボードのピン割当
MPINO-8A4R(T)-Sでは、C領域の先頭部分がボード機能に割り当てられています。
| Cアドレス | ボード機能 | MCUピン |
|---|---|---|
C0 ~ C5 | アナログ入力 | A0 ~ A5 |
C6 ~ C7 | NTC温度入力 | A6 ~ A7 |
C8 ~ C10 | PWM出力 | D21 ~ D23 |
C11 ~ C99 | 上記機能に直接割り当てられていないC領域 | 使用目的を確認してから選択 |
重要: このボードでC0~C10を一般的なカウンタアドレスにすると、同じアドレスを使用するボード機能とデータが重なる可能性があります。カウンタを割り当てる前に、ボード・メモリ情報のピンマップと使用メモリマップの両方を確認してください。
ほかのMPINO製品ではメモリ数とピン割当が異なる場合があります。別のボードプロジェクトにこのアドレス表をそのまま適用しないでください。
4. データ幅を理解する
データ幅は、一度に読み書きするビット数です。扱える値の範囲とメモリ使用量が変わります。
| データ幅 | サイズ | 符号付き値の範囲 | 主な用途 |
|---|---|---|---|
| BIT | 1ビット | 0または1 | 接点、コイル、ON/OFF状態 |
| BYTE | 8ビット | -128 ~ 127 | 小さい整数 |
| WORD | 16ビット | -32,768 ~ 32,767 | 一般的な整数、D・C・Tの基本値 |
| DWORD | 32ビット | -2,147,483,648 ~ 2,147,483,647 | WORD範囲を超える大きな整数 |
Rも32ビットを使用しますが、DWORD整数ではなく実数を保存する別の領域です。どちらも32ビットという理由だけで、RメモリをDWORDアクセスと同じように扱わないでください。
幅を選ぶときは、現在値だけでなく計算後の最大値も確認します。1msごとに1日加算する値は86,400,000になり、WORD範囲を超えます。
5. メモリアドレスの読み方
長いアドレスは左から、データ幅の接頭辞、メモリ領域、アドレス番号、ビット番号に分けて読みます。
たとえばWM1.3は次の意味です。
W: WORD幅でまとめて見ます。M: 内部ビットメモリ領域です。1: アドレスグループ番号1です。.3: そのWORD内の4番目のビットです。ビット番号も0から始まります。
幅の接頭辞とビットアクセス
| 表記 | 使用できる領域 | 例 |
|---|---|---|
B接頭辞 | P, M | BP0, BM1 |
W接頭辞 | P, M | WP0, WM1 |
D接頭辞 | P, M, D, C, T | DM0, DD2, DC31 |
.nビット番号 | P・Mの幅アクセス, D, C | WM1.3, D0.15 |
DD2では、最初のDがDWORD幅の接頭辞、2番目のDがDメモリ領域です。同じ文字でも役割を分けて読んでください。
次の表記は使用できません。
BD0のようにD・C・T領域へBまたはWを付ける表記- R領域への幅の接頭辞
- R領域への
.nビット番号
アドレス入力欄でエラーが表示された場合は、表記だけでなく、選択した領域がその幅とビットアクセスに対応しているか確認します。
6. メモリ領域サイズを確認する
メニューから設定 → メモリ領域設定を選択するか、Ctrl+Shift+Mを押します。
次の順序で確認します。
- 現在のプロジェクトのボードがMPINO-8A4R(T)-Sであることを確認します。
- P、M、D、C、T、R入力欄の個数を確認します。
- 値を入力していない空欄は、選択したボードの標準値を使用します。
- 下部の予想SRAM使用量と全SRAMを確認します。
- 全容量を超えると表示が赤くなり、設定を保存できません。
- 変更が必要な場合は値を入力して保存を選択します。
- ダイアログを閉じ、
Ctrl+Sで変更を.mp2プロジェクトに保存します。
初めて使用する場合は、明確な理由がなければボードの標準値を維持してください。個数を増やすと使用できるアドレスが増えますが、SRAM使用量も増えます。個数を減らすと既存のラダーセルやArduino Cコードが範囲外を参照する可能性があるため、変更の前後に使用メモリマップを確認します。
7. プロジェクトで使用中のメモリを探す
メニューから表示 → 使用メモリマップを選択するか、Ctrl+Shift+Lを押します。
使用メモリマップは次のように使います。
- 上部の
P,M,D,C,T,Rタブで領域を選択します。 - ラダーとコードのフィルタで確認するソースを絞ります。
- アドレス検索欄にアドレスを入力して
Enterを押します。 - 色が付いたアドレスセルは、現在のプロジェクトで使用中です。
- 使用中のセルを選択すると、下部に参照箇所が表示されます。
- 参照項目を選ぶと、該当するラダーセルまたはコード位置へ移動できます。
- ダイアログを閉じて再度開いてもタブとスクロール位置は維持されます。アプリを再起動すると初期化されます。
Phase 1プロジェクトで確認する
- Phase 1で保存したプロジェクトを開きます。
Ctrl+Shift+Lを押します。Pタブを選択します。P0とP32が使用中と表示されることを確認します。P0を選択し、ladderLoopのNO接点参照を確認します。P32を選択し、出力コイル参照を確認します。
アドレスを変更するときやメモリ領域を縮小するときは、先にこの画面を確認すると重複使用と範囲エラーを減らせます。
8. 時間で動く特殊接点
@で始まる特殊接点は、一般的なP・Mメモリアドレスと異なり、時間の経過に合わせてMPINO Studio 2が状態を自動更新します。
| 形式 | 動作 | 例 |
|---|---|---|
@<ms> | 指定した時間の境界を通過するたびに1回、1スキャンだけON | @100は100msごとに1スキャンON |
@F<ms> | 指定時間ON、同じ時間OFFを繰り返す | @F1000は1秒ON、1秒OFFを繰り返す |
@100は、プログラムのスキャンがちょうど100msの時刻に一致しなくても、境界を通過していれば1回ONになります。一定間隔で値を増やす処理や動作開始条件に使用できます。
@F1000は、状態を手動で反転するコードを書かなくても1秒間隔のON/OFF条件を作ります。
特殊接点には次の入力規則があります。
- 時間単位はミリ秒(ms)です。
- かっこは使いません。
@F(1000)ではなく@F1000と入力します。 - 接点セルまたは立上り・立下りエッジセルだけで使用します。
- 出力コイルのアドレスには使用しません。
@ONのような任意の名前は使用できません。
9. 実習 · P32を1秒間隔で点滅させる
Phase 1回路のP0接点を@F1000特殊接点に変更して動作を確認します。
- Phase 1プロジェクトを開き、ファイル → 名前を付けて保存で
phase2-memory.mp2として保存します。 - 出力負荷が外れていることを確認します。
ladderLoopでP0接点セルを選択します。Enterを押すかダブルクリックしてセル編集画面を開きます。- アドレスを
@F1000に変更して確定します。 - 出力コイルのアドレスは
P32のままにします。 Ctrl+Rでビルドし、正常に終了することを確認します。- MPダウンロードケーブルを接続し、右下でポートを選択します。
Ctrl+Uで書き込みます。- Phase 1でモニタリングポートを設定済みの場合は、
Ctrl+Mでリアルタイムラダーモニタリングを有効にします。 @F1000接点とP32コイルが約1秒ON、1秒OFFを繰り返すことを確認します。
実習後に物理入力の確認へ戻す場合は、接点アドレスをP0へ戻してから、もう一度ビルドして書き込んでください。
10. 状況別のメモリ選択基準
| 保存する値 | 最初に検討する領域 | 確認する内容 |
|---|---|---|
| 実際のデジタル入出力 | P | 選択したボードのピンマップと入出力方向 |
| ラダー内部のON/OFF条件 | M | 同じアドレスを別の回路ですでに使用していないか |
| 一般的な整数と計算結果 | D | 結果がWORD範囲を超えないか |
| カウンタ現在値 | C | Cアドレスがボードピン割当と重ならないか |
| タイマ経過値 | T | 同じタイマアドレスを重複使用していないか |
| 小数点を含む値 | R | 実数計算に合った比較許容範囲 |
| 周期的な接点条件 | @<ms>, @F<ms> | 1スキャンか、繰り返すON/OFF状態か |
11. 完了チェック
次の項目を説明または確認できればPhase 2は完了です。
P,M,D,C,T,Rの用途を区別できる。- MPINO-8A4R(T)-Sの
C0~C10がボード機能に割り当てられていることを説明できる。 - BIT、BYTE、WORD、DWORDのサイズと符号付き値の範囲を確認した。
WM1.3とDD2を各文字の役割に分けて読める。Ctrl+Shift+Mでメモリ領域設定を開ける。Ctrl+Shift+LでP0とP32の使用箇所を探した。@100と@F1000の違いを説明できる。- 実習を別プロジェクトとして保存し、ビルド結果を確認した。
トラブルシューティング
| 症状 | 確認する項目 |
|---|---|
| 入力したアドレスが許可されません。 | 領域文字、アドレス範囲、B/W/D接頭辞への対応、.nビットアクセスへの対応を順に確認します。 |
| メモリ領域設定を保存できません。 | 予想SRAM使用量が全SRAMを超え、赤色で表示されていないか確認します。 |
| 使用メモリマップにアドレスが表示されません。 | 正しい領域タブとラダー・コードフィルタを選び、アドレスを入力してEnterを押します。 |
| Cカウンタ値が予想と異なります。 | MPINO-8A4R(T)-SのC0~C10ボードピン割当との重複を先に確認します。 |
@F1000を入力できません。 | 出力コイルではなく接点またはエッジセルを選択しているか、かっこを付けていないか確認します。 |
| P32が点滅しません。 | @F1000とP32コイルが同じ回路にあり、ビルド・ポート選択・書き込みが正常に完了したか確認します。 |



