ja-jp_products:mpaino_8a8r
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| ja-jp_products:mpaino_8a8r [2026/10/07 22:35] – 外部編集 127.0.0.1 | ja-jp_products:mpaino_8a8r [2026/10/25 10:18] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== MPAINO-8A8R ====== | ====== MPAINO-8A8R ====== | ||
| - | MPAINO Seriesは、CPUモジュールとデジタル入力・出力モジュールを組み合わせた組立式の産業用Arduinoです。 \\ | + | MPAINO Seriesは、CPUモジュールとデジタル入力・出力モジュールを組み合わせた産業用Arduinoです。 \\ |
| アナログ入出力、温度センサ入力、高速パルス出力の各モジュールをオプションで追加できます。 \\ | アナログ入出力、温度センサ入力、高速パルス出力の各モジュールをオプションで追加できます。 \\ | ||
| - | 選択したI/ | + | 選択したI/ |
| [[: | [[: | ||
| 行 53: | 行 53: | ||
| | COM1 | D4~D7 | 絶縁デジタル入力4点 | ::: | | | COM1 | D4~D7 | 絶縁デジタル入力4点 | ::: | | ||
| - | デジタル入力はフォトカプラで絶縁されており、DC 5~24VのNPNまたはPNP方式のスイッチやセンサを接続できます。 入力方式は各COM端子の配線極性で選択します。 | + | デジタル入力はフォトカプラで絶縁されており、DC 5~24VのNPNまたはPNP方式のスイッチやセンサを接続できます。入力方式は各COM端子の配線極性で選択します。 |
| * 入力端子にDC 5~24Vが入る構成:該当COMをGNDに接続します。 | * 入力端子にDC 5~24Vが入る構成:該当COMをGNDに接続します。 | ||
| * 入力端子にGNDが入る構成:該当COMをDC 5~24Vに接続します。 | * 入力端子にGNDが入る構成:該当COMをDC 5~24Vに接続します。 | ||
| - | アナログ出力または高速パルス出力オプションのYK、Y2K、K2、Y3、Y4を搭載しても、プログラムではデジタル入力D0~D7を同じように使用します。 その構成ではINT0・INT1を使用できません。 | + | アナログ出力または高速パルス出力オプションのYK、Y2K、K2、Y3、Y4を搭載しても、プログラムではデジタル入力D0~D7を同じように使用します。その構成ではINT0・INT1を使用できません。 |
| ==== プログラム例・デジタル入力 ==== | ==== プログラム例・デジタル入力 ==== | ||
| - | 入力論理番号0~7の状態をdigitalRead()で読み取ります。 現在のILOGICSコアは、端子に印刷された従来の物理D番号を内部で変換します。 | + | 入力論理番号0~7の状態をdigitalRead()で読み取ります。現在のILOGICSコアは、端子に印刷された従来の物理D番号を内部で変換します。 |
| <code cpp> | <code cpp> | ||
| 行 91: | 行 91: | ||
| </ | </ | ||
| - | IdigitalRead(0, | + | IdigitalRead(0, |
| <code cpp> | <code cpp> | ||
| 行 117: | 行 117: | ||
| </ | </ | ||
| - | 入力0に対する3種類のフィルタを比較します。 戻り値はフィルタ処理後のON/ | + | 入力0に対する3種類のフィルタを比較します。戻り値はフィルタ処理後のON/ |
| * '' | * '' | ||
| 行 159: | 行 159: | ||
| </ | </ | ||
| - | Ialt(input, state)は、入力がOFFからONに変わるたびにstateを反転します。 入力0を1回押すと出力64がONになり、もう1回押すとOFFになります。押し続けている間は状態を保持します。 この例ではIbounce(0, | + | Ialt(input, state)は、入力がOFFからONに変わるたびにstateを反転します。入力0を1回押すと出力64がONになり、もう1回押すとOFFになります。押し続けている間は状態を保持します。この例ではIbounce(0, |
| <code cpp> | <code cpp> | ||
| 行 189: | 行 189: | ||
| | COM3 | D68~D71 | リレー出力4点がCOM3を共用 | ::: | | | COM3 | D68~D71 | リレー出力4点がCOM3を共用 | ::: | | ||
| - | リレー出力は無電圧接点です。 ONになると該当出力端子とCOM端子が物理的に接続されるため、DCとACの負荷を制御できます。 負荷電源はリレー出力端子ではなく、COM側に別途接続します。 | + | リレー出力は無電圧接点です。ONになると該当出力端子とCOM端子が物理的に接続されるため、DCとACの負荷を制御できます。負荷電源はリレー出力端子ではなく、COM側に別途接続します。 |
| ^ 項目 ^ 定格 ^ | ^ 項目 ^ 定格 ^ | ||
| 行 198: | 行 198: | ||
| ==== プログラム例・リレー出力 ==== | ==== プログラム例・リレー出力 ==== | ||
| - | 入力0~7を出力64~71に対応させます。 HIGHの場合、無電圧リレー接点がONになります。 | + | 入力0~7を出力64~71に対応させます。HIGHの場合、無電圧リレー接点がONになります。 |
| <code cpp> | <code cpp> | ||
| 行 219: | 行 219: | ||
| | SDA(D20·INT2), | | SDA(D20·INT2), | ||
| - | エンコーダはSDA(D20)をA相、SCL(D21)をB相として接続できます。 SDA・SCLをエンコーダまたは割り込み入力として使用する場合、同じ端子でI²C通信を同時に使用できません。 | + | エンコーダはSDA(D20)をA相、SCL(D21)をB相として接続できます。SDA・SCLをエンコーダまたは割り込み入力として使用する場合、同じ端子でI²C通信を同時に使用できません。 |
| ==== プログラム例・パルスカウント ==== | ==== プログラム例・パルスカウント ==== | ||
| - | I²C端子のSDA(D20)は4.7kΩプルアップ入力です。 この例はI²C通信と同時に使用しないでください。 MPAINOボードパッケージでは、digitalPinToInterrupt()の引数2はデジタル入力2ではなく、SDAに割り当てられた割り込み論理番号です。 SDAがHIGHからLOWに変化するFALLINGエッジをカウントします。 ソフトウェアISRの例であり、最大周波数でのカウントの取りこぼしがないことを保証するものではありません。 | + | I²C端子のSDA(D20)は4.7kΩプルアップ入力です。この例はI²C通信と同時に使用しないでください。MPAINOボードパッケージでは、digitalPinToInterrupt()の引数2はデジタル入力2ではなく、SDAに割り当てられた割り込み論理番号です。SDAがHIGHからLOWに変化するFALLINGエッジをカウントします。ソフトウェアISRの例であり、最大周波数でのカウントの取りこぼしがないことを保証するものではありません。 |
| <code cpp> | <code cpp> | ||
| 行 248: | 行 248: | ||
| ==== プログラム例・エンコーダ入力 ==== | ==== プログラム例・エンコーダ入力 ==== | ||
| - | I²C端子のSDA(D20)は4.7kΩプルアップ入力です。 この例はI²C通信と同時に使用しないでください。 MPAINOボードパッケージでは、digitalPinToInterrupt()の引数2はデジタル入力2ではなく、SDAに割り当てられた割り込み論理番号です。 SDAにA相、SCLにB相を接続します。A相の立ち下がり時にB相がHIGHなら増加、LOWなら減少します。 方向はA・B相の接続によって変わります。 SCLはデジタルモジュールの論理番号と重複するため、実際のピン状態を直接読み取ります。 | + | I²C端子のSDA(D20)は4.7kΩプルアップ入力です。この例はI²C通信と同時に使用しないでください。MPAINOボードパッケージでは、digitalPinToInterrupt()の引数2はデジタル入力2ではなく、SDAに割り当てられた割り込み論理番号です。SDAにA相、SCLにB相を接続します。A相の立ち下がり時にB相がHIGHなら増加、LOWなら減少します。方向はA・B相の接続によって変わります。SCLはデジタルモジュールの論理番号と重複するため、実際のピン状態を直接読み取ります。 |
| <code cpp> | <code cpp> | ||
| 行 290: | 行 290: | ||
| ==== プログラム例・基本通信 ==== | ==== プログラム例・基本通信 ==== | ||
| - | Serial(115200bps)とRS-232(Serial1, | + | Serial(115200bps)とRS-232(Serial1, |
| <code cpp> | <code cpp> | ||
| 行 309: | 行 309: | ||
| </ | </ | ||
| - | Serial(115200bps)とRS-485(Serial2, | + | Serial(115200bps)とRS-485(Serial2, |
| <code cpp> | <code cpp> | ||
| 行 328: | 行 328: | ||
| </ | </ | ||
| - | Serial(115200bps)とUART(Serial3, | + | Serial(115200bps)とUART(Serial3, |
| <code cpp> | <code cpp> | ||
| 行 350: | 行 350: | ||
| ==== プログラム例・I²C通信 ==== | ==== プログラム例・I²C通信 ==== | ||
| - | SDA・SCLのI²C機器アドレスを検索します。 同じ端子を使用するパルス・エンコーダの例と同時に実行しないでください。 | + | SDA・SCLのI²C機器アドレスを検索します。同じ端子を使用するパルス・エンコーダの例と同時に実行しないでください。 |
| <code cpp> | <code cpp> | ||
| 行 397: | 行 397: | ||
| </ | </ | ||
| - | 入力0の状態をM[0]、動作時間(秒)をD[0]に格納し、接続先機器から読み取ります。 RS-485(Serial2)、局番1、9600bps、8N1に設定します。M[0]はFC01・開始アドレス0・1ビット、D[0]はFC03・開始アドレス0・1ワードで読み取ります。 アドレスは実際の送信アドレス(0始まり)を基準とします。 通信関数はloop()ごとに呼び出し、この例では出力を制御しません。 | + | 入力0の状態をM[0]、動作時間(秒)をD[0]に格納し、接続先機器から読み取ります。RS-485(Serial2)、局番1、9600bps、8N1に設定します。M[0]はFC01・開始アドレス0・1ビット、D[0]はFC03・開始アドレス0・1ワードで読み取ります。アドレスは実際の送信アドレス(0始まり)を基準とします。通信関数はloop()ごとに呼び出し、この例では出力を制御しません。 |
| MとDはコアが提供する共有グローバルメモリです。このスケッチは単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | MとDはコアが提供する共有グローバルメモリです。このスケッチは単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | ||
| 行 441: | 行 441: | ||
| </ | </ | ||
| - | RS-485(Serial2)で接続先スレーブのホールディングレジスタ1個を1秒ごとに読み取ります。 相手機器は局番1、9600bps、8N1、FC03・実際の開始アドレス0に設定します。 応答はreceived[0]へ保存し、成功した場合だけ表示します。 エラーコードは16進数で表示します。 上のスレーブ例とは別のスケッチで、M/ | + | RS-485(Serial2)で接続先スレーブのホールディングレジスタ1個を1秒ごとに読み取ります。相手機器は局番1、9600bps、8N1、FC03・実際の開始アドレス0に設定します。応答はreceived[0]へ保存し、成功した場合だけ表示します。エラーコードは16進数で表示します。上のスレーブ例とは別のスケッチで、M/ |
| <code cpp> | <code cpp> | ||
| 行 472: | 行 472: | ||
| **関連する内蔵関数** | **関連する内蔵関数** | ||
| - | === 関数例・LS産電Cnet | + | === 関数例・LS産電Cnet |
| **関数の詳細: | **関数の詳細: | ||
| 行 485: | 行 485: | ||
| </ | </ | ||
| - | 入力0の状態をM[0]、動作時間(秒)をD[0]に格納し、HMIから読み取ります。 接続先機器はLS産電Cnet、RS-232、局番1、9600bps、8N1に設定します。 ビットは%MX00000(M[0])、ワードは%DW0(D[0])を読み取ります。 通信関数はloop()ごとに呼び出し、この例では出力を制御しません。 | + | 入力0の状態をM[0]、動作時間(秒)をD[0]に格納し、HMIから読み取ります。接続先機器はLS産電Cnet、RS-232、局番1、9600bps、8N1に設定します。ビットは%MX00000(M[0])、ワードは%DW0(D[0])を読み取ります。通信関数はloop()ごとに呼び出し、この例では出力を制御しません。 |
| M・D・Rはコアが提供する共有グローバルメモリで、この例ではRを使用しません。Modbusの例とは別に単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | M・D・Rはコアが提供する共有グローバルメモリで、この例ではRを使用しません。Modbusの例とは別に単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | ||
| 行 521: | 行 521: | ||
| ===== オプションモジュール ===== | ===== オプションモジュール ===== | ||
| - | 製品構成に以下のオプションモジュールを追加できます。 選択した構成に組み立てて出荷します。 \\ | + | 製品構成に以下のオプションモジュールを追加できます。選択した構成で組み立てて出荷します。 \\ |
| ユーザーによるI/ | ユーザーによるI/ | ||
| 行 534: | 行 534: | ||
| オプションモジュールを追加した製品はカスタム製作となるため、交換や返金が難しくなります。 | オプションモジュールを追加した製品はカスタム製作となるため、交換や返金が難しくなります。 | ||
| - | 出荷時に該当するオプションモジュールを搭載した製品で使用する例です。 例に示したモジュール構成と実際の出荷構成を一致させてください。 | + | 出荷時に該当するオプションモジュールを搭載した製品で使用する例です。例に示したモジュール構成と実際の出荷構成を一致させてください。 |
| ==== プログラム例・アナログ入力(Xモジュール装着時) ==== | ==== プログラム例・アナログ入力(Xモジュール装着時) ==== | ||
| - | Xモジュールを1台搭載し、Analog Input Module → Xを選択した構成です。 analogRead(0~3)は最初のXモジュールのADS1118生値(0~32767)を読み取ります。 各チャンネルのDIP設定と配線を入力信号に合わせます。 | + | Xモジュールを1台搭載し、Analog Input Module → Xを選択した構成です。analogRead(0~3)は最初のXモジュールのADS1118生値(0~32767)を読み取ります。各チャンネルのDIP設定と配線を入力信号に合わせます。 |
| <code cpp> | <code cpp> | ||
| 行 568: | 行 568: | ||
| </ | </ | ||
| - | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。 両関数はADC入力を指定したmin~maxの範囲へ換算します。 IanalogRead()は小数部を切り捨てた整数、IanalogReadf()は浮動小数点数を返します。 チャンネル0の0~5V入力を、0~100%と電圧でそれぞれ表示します。 チャンネル1の0~20mA入力は、0~20の範囲を指定して実際の電流値として読み取ります。 | + | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。両関数はADC入力を指定したmin~maxの範囲へ換算します。IanalogRead()は小数部を切り捨てた整数、IanalogReadf()は浮動小数点数を返します。チャンネル0の0~5V入力を、0~100%と電圧でそれぞれ表示します。チャンネル1の0~20mA入力は、0~20の範囲を指定して実際の電流値として読み取ります。 |
| <code cpp> | <code cpp> | ||
| 行 601: | 行 601: | ||
| </ | </ | ||
| - | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。 チャンネル1に接続した4~20mAセンサ入力を、ユーザー指定範囲に換算します。 IanalogRead2(チャンネル1, | + | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。チャンネル1に接続した4~20mAセンサ入力を、ユーザー指定範囲に換算します。IanalogRead2(チャンネル1, |
| <code cpp> | <code cpp> | ||
| 行 636: | 行 636: | ||
| </ | </ | ||
| - | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。 analogReadAvg(チャンネル0, | + | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。analogReadAvg(チャンネル0, |
| <code cpp> | <code cpp> | ||
| 行 661: | 行 661: | ||
| ==== プログラム例・NTC温度センサ入力(Xモジュール装着時) ==== | ==== プログラム例・NTC温度センサ入力(Xモジュール装着時) ==== | ||
| - | Xモジュール1台、Analog Input Module → Xの構成で、チャンネル0をNTCモードに設定します。 最初にanalogRead(0)で生値を確認します。 | + | Xモジュール1台、Analog Input Module → Xの構成で、チャンネル0をNTCモードに設定します。最初にanalogRead(0)で生値を確認します。 |
| <code cpp> | <code cpp> | ||
| 行 687: | 行 687: | ||
| </ | </ | ||
| - | Xモジュールのチャンネル0をNTCモードに設定し、NTC 3950 10kΩセンサを接続します。 ntcRead()は摂氏温度×10の整数、ntcReadf()は摂氏の浮動小数点数を返します。 範囲外の入力は-40~120°Cの端点値に制限されるため、断線判定関数として使用しないでください。 | + | Xモジュールのチャンネル0をNTCモードに設定し、NTC 3950 10kΩセンサを接続します。ntcRead()は摂氏温度×10の整数、ntcReadf()は摂氏の浮動小数点数を返します。範囲外の入力は-40~120°Cの端点値に制限されるため、断線判定関数として使用しないでください。 |
| <code cpp> | <code cpp> | ||
| 行 719: | 行 719: | ||
| </ | </ | ||
| - | Fモジュールを1台搭載し、Temperature Sensor Input Module → Fを選択します。 0~3は最初のFモジュールのチャンネルです。 Fモジュールのチャンネル0~3の入力値をシリアルモニタに表示します。 | + | Fモジュールを1台搭載し、Temperature Sensor Input Module → Fを選択します。0~3は最初のFモジュールのチャンネルです。Fモジュールのチャンネル0~3の入力値をシリアルモニタに表示します。 |
| <code cpp> | <code cpp> | ||
| 行 740: | 行 740: | ||
| ==== プログラム例・アナログ出力(Yモジュール装着時) ==== | ==== プログラム例・アナログ出力(Yモジュール装着時) ==== | ||
| - | Yモジュールを1台搭載し、Analog Output Module → Yを選択します。 analogWrite(0~2, | + | Yモジュールを1台搭載し、Analog Output Module → Yを選択します。analogWrite(0~2, |
| <code cpp> | <code cpp> | ||
| 行 766: | 行 766: | ||
| </ | </ | ||
| - | Yモジュールのチャンネル0に整数値で50%、チャンネル1に浮動小数点数で25%を出力します。 min・maxはユーザー値の範囲を指定し、電気的な出力モードはモジュールのDIPスイッチで決まります。 | + | Yモジュールのチャンネル0に整数値で50%、チャンネル1に浮動小数点数で25%を出力します。min・maxはユーザー値の範囲を指定し、電気的な出力モードはモジュールのDIPスイッチで決まります。 |
| <code cpp> | <code cpp> | ||
| 行 783: | 行 783: | ||
| ==== プログラム例・PWM出力(Kモジュール装着時) ==== | ==== プログラム例・PWM出力(Kモジュール装着時) ==== | ||
| - | Kモジュールを1台搭載し、High-Speed Pulse Output Module → Kを選択します。YモジュールはNoneです。 Arduino analogWrite()は20~25、内蔵PWM関数は0~5、GPIO制御は130~135を使用します。 最初のK出力に約50%のデューティ比で出力します。 | + | Kモジュールを1台搭載し、High-Speed Pulse Output Module → Kを選択します。YモジュールはNoneです。Arduino analogWrite()は20~25、内蔵PWM関数は0~5、GPIO制御は130~135を使用します。最初のK出力に約50%のデューティ比で出力します。 |
| <code cpp> | <code cpp> | ||
| 行 808: | 行 808: | ||
| </ | </ | ||
| - | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。 論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。 Kチャンネル0に16ビットの中間デューティ値32768を出力します。 PWM()の標準8ビット範囲は0~255、true指定時は0~65535です。 | + | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。Kチャンネル0に16ビットの中間デューティ値32768を出力します。PWM()の標準8ビット範囲は0~255、true指定時は0~65535です。 |
| <code cpp> | <code cpp> | ||
| 行 830: | 行 830: | ||
| </ | </ | ||
| - | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。 論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。 Kチャンネル0に1kHz、50%のデューティ比で出力します。 コアに独立したFPWM()はありません。FDPWM()を使用します。 | + | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。Kチャンネル0に1kHz、50%のデューティ比で出力します。コアに独立したFPWM()はありません。FDPWM()を使用します。 |
| <code cpp> | <code cpp> | ||
| 行 853: | 行 853: | ||
| </ | </ | ||
| - | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。 論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。 Kチャンネル0に1kHz、50%のパルス100個を1回出力します。 NPWM()はloop()の毎回の処理で呼び出し、delay()は入れません。 | + | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。Kチャンネル0に1kHz、50%のパルス100個を1回出力します。NPWM()はloop()の毎回の処理で呼び出し、delay()は入れません。 |
| <code cpp> | <code cpp> | ||
| 行 876: | 行 876: | ||
| </ | </ | ||
| - | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。 論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。 Kチャンネル0を2秒間ONにし、2秒間停止します。 PWMOFF()フラグの設定後にFDPWM()を呼び出して状態を反映し、GPIO番号130をLOWに維持します。 この停止フラグはNPWM()には適用されません。 | + | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。Kチャンネル0を2秒間ONにし、2秒間停止します。PWMOFF()フラグの設定後にFDPWM()を呼び出して状態を反映し、GPIO番号130をLOWに維持します。この停止フラグはNPWM()には適用されません。 |
| <code cpp> | <code cpp> | ||
| 行 905: | 行 905: | ||
| </ | </ | ||
| - | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。 論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。 K単独構成のTimer1・Timer5を停止・初期化します。 チャンネル0を2秒間出力した後、停止します。 同じタイマを共有するすべてのK出力に影響します。 | + | Kモジュール1台、Yモジュールなし、High-Speed Pulse Output Module → Kの構成です。論理チャンネル0~2はTimer1、3~5はTimer5を共有するため、同じグループでは同じ周波数を使用します。K単独構成のTimer1・Timer5を停止・初期化します。チャンネル0を2秒間出力した後、停止します。同じタイマを共有するすべてのK出力に影響します。 |
| <code cpp> | <code cpp> | ||
ja-jp_products/mpaino_8a8r.1791380127.txt.gz · 最終更新: by 127.0.0.1
