ユーザ用ツール

サイト用ツール


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. PLC基本メモリ

Arduinoプログラムとは異なり、PLCではP・M・D・C・T・Rメモリを使用します。Arduinoコードでは、PLCメモリの割り当て後に残ったSRAMへ変数を割り当てることができます。

メモリは、プログラムの実行中に入力状態、内部条件、計算結果、タイマ値などを保存する領域です。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

Arduinoコードとラダーロジックのメモリ共有

ラダーロジックとArduinoコードは、P・M・D・C・T・Rメモリの同じ保存領域を使用します。一方で書き込んだ値は、もう一方から同じアドレスで読み取れます。

Arduinoコードとラダーロジックが同じPLCメモリを共有する構造

Arduinoコードでは、ラダーアドレスと同じ名前をそのまま使うか、配列形式で記述できます。どちらも同じメモリを参照します。

  • ラダーのM0 ↔ ArduinoコードのM0またはM[0]
  • ラダーのD0 ↔ ArduinoコードのD0またはD[0]
  • ラダーのR0 ↔ ArduinoコードのR0またはR[0]
void loop() {
  M0 = true;    // ラダーのM0ビット接点をON状態にします。
  D0 = 120;     // ラダーとArduinoコードでD0の整数値を共有します。
  R0 = 23.5f;   // ラダーとArduinoコードでR0の実数値を共有します。
 
  ladderLoop(); // 上で保存した値を使ってラダーロジックを実行します。
}

ラダーロジックで変更した値は、ladderLoop()の実行後にArduinoコードから読み取れます。同じスキャン内の読み書き順序は、loop()内でladderLoop()を呼び出す位置に従います。

入出力割り当ての注意: P領域とボード機能に割り当てられたC領域は、ラダースキャン中に実際の入出力と同期します。これらの領域をArduinoコードと共有するときは、設定 → ラダーピンマップ設定でアドレスと入出力方向を先に確認してください。
Pアドレスの注意: Pアドレスはボードのピン編集で確認および変更できます。Pアドレスの入出力方向と物理端子は、プロジェクトで選択したボードの定義に従います。
R値の誤差に関する注意: 32ビット実数は浮動小数点演算の制約により、0.1 + 0.2の結果が正確な0.3ではなく、約0.30000001として保存される場合があります。これはIEEE 754の32ビット浮動小数点を使用するコントローラで共通して考慮する特性です。

2. メモリ領域

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

設定 → メモリ領域設定で、使用するメモリ数を変更できます。(ショートカット: Ctrl + Shift + M

図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. メモリアドレスの読み方

メモリアドレスは、最も単純な形式から始め、必要な要素を一つずつ追加して読みます。

M0、D0、D0.1、WM1.2のメモリアドレス形式

  1. M0: M領域の0番BITアドレスです。
  2. D0: D領域の0番WORDアドレスです。
  3. D0.1: D0 WORD内の2番目のビットです。ビット番号は0から始まります。
  4. WM1.2: M領域をWORDでまとめたWM1内の3番目のビットです。M18と同じビットを示します。

メモリ構造

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

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など同じ規則を使用します。

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

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

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

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

6. 特殊ビットメモリ

@で始まる特殊ビットメモリは、MPINO Studio 2が状態を自動更新します。ラダーのビット接点で使用できます。

形式 動作
@ON 常時ON ビット接点を常に真にする
@OFF 常時OFF ビット接点を常に偽にする
@<ms> 指定した時間の境界を通過するたびに1回、1スキャンだけON @100は100msごとに1スキャンON
@F<ms> 指定時間ON、同じ時間OFFを繰り返す @F1000は1秒ON、1秒OFFを繰り返す

@ON@OFFは大文字と小文字を区別しないため、@on@offも使用できます。

@100と@F1000特殊ビットメモリの時間動作比較

@100は、プログラムのスキャンがちょうど100msの時刻に一致しなくても、境界を通過していれば1回ONになります。一定間隔で値を増やす処理や動作開始条件に使用できます。

@F1000は、状態を手動で反転するコードを書かなくても1秒間隔のON/OFF条件を作ります。

図3. ラダーセルに特殊ビットメモリを入力した例

特殊ビットメモリには次の入力規則があります。

  • @<ms>@F<ms>の時間単位はミリ秒(ms)です。
  • かっこは使いません。@F(1000)ではなく@F1000と入力します。
  • ビット接点だけで使用します。
  • 出力コイルのアドレスには使用しません。

トラブルシューティング

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

関連文書

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki