ja-jp_products:mpaino_48a48t
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| ja-jp_products:mpaino_48a48t [2026/10/07 22:35] – 外部編集 127.0.0.1 | ja-jp_products:mpaino_48a48t [2026/10/25 10:18] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== MPAINO-48A48T ====== | ====== MPAINO-48A48T ====== | ||
| - | MPAINO Seriesは、CPUモジュールとデジタル入力・出力モジュールを組み合わせた組立式の産業用Arduinoです。 \\ | + | MPAINO Seriesは、CPUモジュールとデジタル入力・出力モジュールを組み合わせた産業用Arduinoです。 \\ |
| アナログ入出力、温度センサ入力、高速パルス出力の各モジュールをオプションで追加できます。 \\ | アナログ入出力、温度センサ入力、高速パルス出力の各モジュールをオプションで追加できます。 \\ | ||
| - | 選択したI/ | + | 選択したI/ |
| [[: | [[: | ||
| 行 55: | 行 55: | ||
| | モジュール5 | COM0 \\ COM1 | D40~D43 \\ D44~D47 | 絶縁デジタル入力8点 | ::: | | | モジュール5 | COM0 \\ COM1 | D40~D43 \\ D44~D47 | 絶縁デジタル入力8点 | ::: | | ||
| - | デジタル入力はフォトカプラで絶縁されており、DC 5~24VのNPNまたはPNP方式のスイッチやセンサを接続できます。 入力方式は各モジュールのCOM端子の配線極性で選択します。 | + | デジタル入力はフォトカプラで絶縁されており、DC 5~24VのNPNまたはPNP方式のスイッチやセンサを接続できます。入力方式は各モジュールのCOM端子の配線極性で選択します。 |
| * 入力端子にDC 5~24Vが入る構成:該当COMをGNDに接続します。 | * 入力端子にDC 5~24Vが入る構成:該当COMをGNDに接続します。 | ||
| 行 62: | 行 62: | ||
| ==== プログラム例・デジタル入力 ==== | ==== プログラム例・デジタル入力 ==== | ||
| - | 入力論理番号0~47の状態をdigitalRead()で読み取ります。 現在のILOGICSコアは、端子に印刷された従来の物理D番号を内部で変換します。 | + | 入力論理番号0~47の状態をdigitalRead()で読み取ります。現在のILOGICSコアは、端子に印刷された従来の物理D番号を内部で変換します。 |
| <code cpp> | <code cpp> | ||
| 行 89: | 行 89: | ||
| </ | </ | ||
| - | IdigitalRead(0, | + | IdigitalRead(0, |
| <code cpp> | <code cpp> | ||
| 行 113: | 行 113: | ||
| </ | </ | ||
| - | 入力0に対する3種類のフィルタを比較します。 戻り値はフィルタ処理後のON/ | + | 入力0に対する3種類のフィルタを比較します。戻り値はフィルタ処理後のON/ |
| * '' | * '' | ||
| 行 153: | 行 153: | ||
| </ | </ | ||
| - | 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> | ||
| 行 187: | 行 187: | ||
| | モジュール5 | D104~D111 | P24 \\ N24 | 絶縁SINKトランジスタ出力8点 | ::: | | | モジュール5 | D104~D111 | P24 \\ N24 | 絶縁SINKトランジスタ出力8点 | ::: | | ||
| - | 各モジュールのP24にDC 5~24V電源を接続し、N24にその電源のGNDを接続します。 ONになると、選択した出力端子からそのモジュールのN24に接続されたGNDが出力されます。 | + | 各モジュールのP24にDC 5~24V電源を接続し、N24にその電源のGNDを接続します。出力がONになると、選択した出力端子がそのモジュールのN24を介して電源のGNDに接続されます。 |
| ^ 項目 ^ 定格 ^ | ^ 項目 ^ 定格 ^ | ||
| 行 196: | 行 196: | ||
| ==== プログラム例・トランジスタ出力 ==== | ==== プログラム例・トランジスタ出力 ==== | ||
| - | 入力0~47を出力64~111に対応させます。 HIGHの場合、SINKトランジスタ出力がONになります。 | + | 入力0~47を出力64~111に対応させます。HIGHの場合、SINKトランジスタ出力がONになります。 |
| <code cpp> | <code cpp> | ||
| 行 216: | 行 216: | ||
| | 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> | ||
| 行 245: | 行 245: | ||
| ==== プログラム例・エンコーダ入力 ==== | ==== プログラム例・エンコーダ入力 ==== | ||
| - | 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> | ||
| 行 287: | 行 287: | ||
| ==== プログラム例・基本通信 ==== | ==== プログラム例・基本通信 ==== | ||
| - | Serial(115200bps)とRS-232(Serial1, | + | Serial(115200bps)とRS-232(Serial1, |
| <code cpp> | <code cpp> | ||
| 行 306: | 行 306: | ||
| </ | </ | ||
| - | Serial(115200bps)とRS-485(Serial2, | + | Serial(115200bps)とRS-485(Serial2, |
| <code cpp> | <code cpp> | ||
| 行 325: | 行 325: | ||
| </ | </ | ||
| - | Serial(115200bps)とUART(Serial3, | + | Serial(115200bps)とUART(Serial3, |
| <code cpp> | <code cpp> | ||
| 行 347: | 行 347: | ||
| ==== プログラム例・I²C通信 ==== | ==== プログラム例・I²C通信 ==== | ||
| - | SDA・SCLのI²C機器アドレスを検索します。 同じ端子を使用するパルス・エンコーダの例と同時に実行しないでください。 | + | SDA・SCLのI²C機器アドレスを検索します。同じ端子を使用するパルス・エンコーダの例と同時に実行しないでください。 |
| <code cpp> | <code cpp> | ||
| 行 392: | 行 392: | ||
| </ | </ | ||
| - | 入力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はコアが提供する共有グローバルメモリです。このスケッチは単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | ||
| 行 434: | 行 434: | ||
| </ | </ | ||
| - | 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> | ||
| 行 465: | 行 465: | ||
| **関連する内蔵関数** | **関連する内蔵関数** | ||
| - | === 関数例・LS産電Cnet | + | === 関数例・LS産電Cnet |
| **関数プロトタイプ** | **関数プロトタイプ** | ||
| 行 476: | 行 476: | ||
| </ | </ | ||
| - | 入力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の例とは別に単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | ||
| 行 512: | 行 512: | ||
| ===== オプションモジュール ===== | ===== オプションモジュール ===== | ||
| - | 出荷時に該当するオプションモジュールを搭載した製品で使用する例です。 例に示したモジュール構成と実際の出荷構成を一致させてください。 | + | 出荷時に該当するオプションモジュールを搭載した製品で使用する例です。例に示したモジュール構成と実際の出荷構成を一致させてください。 |
| ==== プログラム例・アナログ入力(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> | ||
| 行 544: | 行 544: | ||
| </ | </ | ||
| - | 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> | ||
| 行 575: | 行 575: | ||
| </ | </ | ||
| - | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。 チャンネル1に接続した4~20mAセンサ入力を、ユーザー指定範囲に換算します。 IanalogRead2(チャンネル1, | + | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。チャンネル1に接続した4~20mAセンサ入力を、ユーザー指定範囲に換算します。IanalogRead2(チャンネル1, |
| <code cpp> | <code cpp> | ||
| 行 608: | 行 608: | ||
| </ | </ | ||
| - | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。 analogReadAvg(チャンネル0, | + | Xモジュールのチャンネル0を0~5V、チャンネル1を電流入力モードに設定した例です。analogReadAvg(チャンネル0, |
| <code cpp> | <code cpp> | ||
| 行 633: | 行 633: | ||
| ==== プログラム例・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> | ||
| 行 657: | 行 657: | ||
| </ | </ | ||
| - | 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> | ||
| 行 687: | 行 687: | ||
| </ | </ | ||
| - | 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> | ||
| 行 708: | 行 708: | ||
| ==== プログラム例・アナログ出力(Yモジュール装着時) ==== | ==== プログラム例・アナログ出力(Yモジュール装着時) ==== | ||
| - | Yモジュールを1台搭載し、Analog Output Module → Yを選択します。 analogWrite(0~2, | + | Yモジュールを1台搭載し、Analog Output Module → Yを選択します。analogWrite(0~2, |
| <code cpp> | <code cpp> | ||
| 行 732: | 行 732: | ||
| </ | </ | ||
| - | Yモジュールのチャンネル0に整数値で50%、チャンネル1に浮動小数点数で25%を出力します。 min・maxはユーザー値の範囲を指定し、電気的な出力モードはモジュールのDIPスイッチで決まります。 | + | Yモジュールのチャンネル0に整数値で50%、チャンネル1に浮動小数点数で25%を出力します。min・maxはユーザー値の範囲を指定し、電気的な出力モードはモジュールのDIPスイッチで決まります。 |
| <code cpp> | <code cpp> | ||
| 行 749: | 行 749: | ||
| ==== プログラム例・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> | ||
| 行 772: | 行 772: | ||
| </ | </ | ||
| - | 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> | ||
| 行 792: | 行 792: | ||
| </ | </ | ||
| - | 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> | ||
| 行 813: | 行 813: | ||
| </ | </ | ||
| - | 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> | ||
| 行 834: | 行 834: | ||
| </ | </ | ||
| - | 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> | ||
| 行 861: | 行 861: | ||
| </ | </ | ||
| - | 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_48a48t.1791380127.txt.gz · 最終更新: by 127.0.0.1
