ユーザ用ツール

サイト用ツール


ja-jp_products:mpino_studio2:memory

文書の過去の版を表示しています。


MPINO STUDIO 2 Phase 2 · メモリを理解する

このページでは、P・M・D・C・T・Rメモリの違い、アドレス表記、メモリ領域設定、使用メモリマップ、時間で動く特殊接点を説明します。

基準ボード 完了目標
MPINO-8A4R(T)-S メモリアドレスを区別し、プロジェクト内の使用箇所を探せること

Phase 2でメモリを学ぶ順序

スクリーンショットについて: 画面は韓国語UIです。ボタンの位置、アイコン、ショートカットは同じです。

1. メモリとは

メモリは、プログラムの実行中に入力状態、内部条件、計算結果、タイマ値などを保存する領域です。MPINO Studio 2のラダーロジックとArduino Cコードは、このメモリを共有して使用できます。

基本アドレスは、領域を表す文字 + 0から始まる番号で表します。たとえばM10はM領域の11番目、D0はD領域の最初のアドレスです。

P M D C T Rメモリ領域の比較

領域 単位 保存形式 値の範囲
P BIT ボードのデジタル入出力状態 0または1
M BIT 内部BITメモリ 0または1
D WORD 符号付き内部WORDメモリ -32,768 ~ 32,767
C WORD カウンタ値(符号付き内部WORDメモリ) -32,768 ~ 32,767
T WORD タイマ現在値(符号付き内部WORDメモリ) -32,768 ~ 32,767
R Floating Point(32ビット) 内部Floating Pointメモリ(実数メモリ) 約-3.4028235E38 ~ +3.4028235E38
Pアドレスの注意: Pアドレスはボードのピン編集で確認および変更できます。Pアドレスの入出力方向と物理端子は、プロジェクトで選択したボードの定義に従います。
R値の誤差に関する注意: 32ビット実数は浮動小数点演算の制約により、0.1 + 0.2の結果が正確な0.3ではなく、約0.30000001として保存される場合があります。これはIEEE 754の32ビット浮動小数点を使用するコントローラで共通して考慮する特性です。

2. MPINO-8A4R(T)-Sの標準メモリ

MPINO-8A4R(T)-Sを選択したときの標準メモリ数は次のとおりです。

設定 → メモリ領域設定で、使用するメモリ数を変更できます。

図1. メモリ領域ごとの使用数と予想SRAM使用量を確認するメモリ領域設定画面

領域 標準数 標準アドレス範囲
P 64 P0P63
M 1,024 M0M1023
D 200 D0D199
C 100 C0C99
T 128 T0T127
R 50 R0R49

メモリ領域設定画面: P・M・D・C・T・Rの入力欄を空欄にするとボードの標準値を使用します。値を入力すると、そのプロジェクトで使用する数が変更されます。画面下部では予想SRAM使用量と全SRAMを確認できます。

個数と最後のアドレスを混同しないでください。番号は0から始まるため、Dメモリ200個はD0からD199までです。

C領域とボードのピン割当

MPINO-8A4R(T)-Sでは、C0C10メモリにアナログ入力、NTC温度入力、PWMが接続されています。

割り当てるメモリは、設定 → ラダーピンマップ設定で変更できます。

アナログ・PWM出力の注意: アナログ出力またはPWM出力にメモリを割り当てると、そのアドレスの値で出力されるため、Arduinoコードから同じ出力にanalogWrite関連関数を使用できません。analogWrite関連関数を使用する場合は、設定 → ラダーピンマップ設定で対象出力の使用チェックを外してください。

MPINO-8A4R(T)-SのCメモリとボードのピン割当

Cアドレス ボード機能 MCUピン
C0C5 アナログ入力 A0A5
C6C7 NTC温度入力 A6A7
C8C10 PWM出力 D21D23
C11C99 上記機能に直接割り当てられていないC領域 使用目的を確認してから選択
重要: このボードでC0C10を一般的なカウンタアドレスにすると、同じアドレスを使用するボード機能とデータが重なる可能性があります。カウンタを割り当てる前に、ボード・メモリ情報のピンマップ使用メモリマップの両方を確認してください。

割り当てられるアドレスはボードごとに異なり、ユーザーが変更することもできます。設定 → ラダーピンマップ設定で確認してください。

3. データ幅を理解する

データ幅は、一度に読み書きするビット数です。扱える値の範囲とメモリ使用量が変わります。

BIT BYTE WORD DWORDのサイズと値の範囲

データ幅 サイズ 符号付き値の範囲 主な用途
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範囲を超えます。

4. メモリアドレスの読み方

長いアドレスは左から、データ幅の接頭辞メモリ領域アドレス番号ビット番号に分けて読みます。

WM1.3を構成要素ごとに読む方法

たとえばWM1.3は次の意味です。

  1. W: WORD幅でまとめて見ます。
  2. M: 内部ビットメモリ領域です。
  3. 1: WORDアドレスです。WM0の次にある2番目のWORDグループを示します。
  4. .3: そのWORD内の4番目のビットです。ビット番号も0から始まります。

メモリをまとめる構造

ビット、バイト、ワード、ダブルワード、実数のメモリ構造です。

P MビットメモリとD C T WORDメモリをBYTE WORD DWORDとしてまとめる構造

P・M領域では、個別のBITアドレスを8個、16個、32個ずつまとめ、BYTE・WORD・DWORDとして読みます。小さいアドレスが最下位ビットになるため、WM0.0M0WM1.3M19と同じビットを示します。

D・C・T領域では、一つのアドレスが1 WORDです。連続する二つのWORDをまとめるとDWORDになり、DD0D0D1DD1D2D3を結合します。CとTもDC0DT0など同じ規則を使用します。

幅の接頭辞とビットアクセス

表記 使用できる領域
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では、最初のDDWORD幅の接頭辞、2番目のDDメモリ領域です。同じ文字でも役割を分けて読んでください。

次の表記は使用できません。

  • BD0のようにD・C・T領域へBまたはWを付ける表記
  • R領域への幅の接頭辞
  • R領域への.nビット番号

アドレス入力欄でエラーが表示された場合は、表記だけでなく、選択した領域がその幅とビットアクセスに対応しているか確認します。

5. メモリ領域サイズを確認する

メニューから設定 → メモリ領域設定を選択するか、Ctrl+Shift+Mを押します。

次の順序で確認します。

  1. 現在のプロジェクトのボードがMPINO-8A4R(T)-Sであることを確認します。
  2. P、M、D、C、T、R入力欄の個数を確認します。
  3. 値を入力していない空欄は、選択したボードの標準値を使用します。
  4. 下部の予想SRAM使用量と全SRAMを確認します。
  5. 全容量を超えると表示が赤くなり、設定を保存できません。
  6. 変更が必要な場合は値を入力して保存を選択します。
  7. ダイアログを閉じ、Ctrl+Sで変更を.mp2プロジェクトに保存します。

明確な理由がなければボードの標準値を維持してください。個数を増やすと使用できるアドレスが増えますが、SRAM使用量も増えます。個数を減らすと既存のラダーセルやArduino Cコードが範囲外を参照する可能性があるため、変更の前後に使用メモリマップを確認します。

6. プロジェクトで使用中のメモリを探す

メニューから表示 → 使用メモリマップを選択するか、Ctrl+Shift+Lを押します。

図2. 使用メモリマップでアドレスと参照箇所を確認する画面

使用メモリマップは次のように使います。

  1. 上部のP, M, D, C, T, Rタブで領域を選択します。
  2. ラダーとコードのフィルタで確認するソースを絞ります。
  3. アドレス検索欄にアドレスを入力してEnterを押します。
  4. 色が付いたアドレスセルは、現在のプロジェクトで使用中です。
  5. 使用中のセルを選択すると、下部に参照箇所が表示されます。
  6. 参照項目を選ぶと、該当するラダーセルまたはコード位置へ移動できます。
  7. ダイアログを閉じて再度開いてもタブとスクロール位置は維持されます。アプリを再起動すると初期化されます。

Phase 1プロジェクトで確認する

  1. Phase 1で保存したプロジェクトを開きます。
  2. Ctrl+Shift+Lを押します。
  3. Pタブを選択します。
  4. P0P32が使用中と表示されることを確認します。
  5. P0を選択し、ladderLoopのNO接点参照を確認します。
  6. P32を選択し、出力コイル参照を確認します。

アドレスを変更するときやメモリ領域を縮小するときは、先にこの画面を確認すると重複使用と範囲エラーを減らせます。

7. 時間で動く特殊接点

@で始まる特殊接点は、一般的なP・Mメモリアドレスと異なり、時間の経過に合わせてMPINO Studio 2が状態を自動更新します。

@100と@F1000特殊接点の時間動作比較

形式 動作
@<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条件を作ります。

図3. ラダーセルに特殊接点を入力した例

特殊接点には次の入力規則があります。

  • 時間単位はミリ秒(ms)です。
  • かっこは使いません。@F(1000)ではなく@F1000と入力します。
  • 接点セルまたは立上り・立下りエッジセルだけで使用します。
  • 出力コイルのアドレスには使用しません。
  • @ONのような任意の名前は使用できません。

8. 実習 · P32を1秒間隔で点滅させる

Phase 1回路のP0接点を@F1000特殊接点に変更して動作を確認します。

  1. Phase 1プロジェクトを開き、ファイル → 名前を付けて保存phase2-memory.mp2として保存します。
  2. 出力負荷が外れていることを確認します。
  3. ladderLoopP0接点セルを選択します。
  4. Enterを押すかダブルクリックしてセル編集画面を開きます。
  5. アドレスを@F1000に変更して確定します。
  6. 出力コイルのアドレスはP32のままにします。
  7. Ctrl+Rでビルドし、正常に終了することを確認します。
  8. MPダウンロードケーブルを接続し、右下でポートを選択します。
  9. Ctrl+Uで書き込みます。
  10. Phase 1でモニタリングポートを設定済みの場合は、Ctrl+Mでリアルタイムラダーモニタリングを有効にします。
  11. @F1000接点とP32コイルが約1秒ON、1秒OFFを繰り返すことを確認します。

実習後に物理入力の確認へ戻す場合は、接点アドレスをP0へ戻してから、もう一度ビルドして書き込んでください。

9. 状況別のメモリ選択基準

保存する値 最初に検討する領域 確認する内容
実際のデジタル入出力 P 選択したボードのピンマップと入出力方向
ラダー内部のON/OFF条件 M 同じアドレスを別の回路ですでに使用していないか
一般的な整数と計算結果 D 結果がWORD範囲を超えないか
カウンタ現在値 C Cアドレスがボードピン割当と重ならないか
タイマ経過値 T 同じタイマアドレスを重複使用していないか
小数点を含む値 R 実数計算に合った比較許容範囲
周期的な接点条件 @<ms>, @F<ms> 1スキャンか、繰り返すON/OFF状態か

10. 完了チェック

次の項目を説明または確認できればPhase 2は完了です。

  • P, M, D, C, T, Rの用途を区別できる。
  • MPINO-8A4R(T)-SのC0C10がボード機能に割り当てられていることを説明できる。
  • BIT、BYTE、WORD、DWORDのサイズと符号付き値の範囲を確認した。
  • WM1.3DD2を各文字の役割に分けて読める。
  • Ctrl+Shift+Mでメモリ領域設定を開ける。
  • Ctrl+Shift+LP0P32の使用箇所を探した。
  • @100@F1000の違いを説明できる。
  • 実習を別プロジェクトとして保存し、ビルド結果を確認した。

トラブルシューティング

症状 確認する項目
入力したアドレスが許可されません。 領域文字、アドレス範囲、B/W/D接頭辞への対応、.nビットアクセスへの対応を順に確認します。
メモリ領域設定を保存できません。 予想SRAM使用量が全SRAMを超え、赤色で表示されていないか確認します。
使用メモリマップにアドレスが表示されません。 正しい領域タブとラダー・コードフィルタを選び、アドレスを入力してEnterを押します。
Cカウンタ値が予想と異なります。 MPINO-8A4R(T)-SのC0C10ボードピン割当との重複を先に確認します。
@F1000を入力できません。 出力コイルではなく接点またはエッジセルを選択しているか、かっこを付けていないか確認します。
P32が点滅しません。 @F1000P32コイルが同じ回路にあり、ビルド・ポート選択・書き込みが正常に完了したか確認します。

関連文書

ja-jp_products/mpino_studio2/memory.1788859744.txt.gz · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki