最終更新日:2021年3月9日
作成日:2021年2月9日
ModbusSlaveデバイスのテンプレートを用意しておこうと考えました。
※基板サイズについてEagleの制限を考慮して修正しました。世の中には機能固定されたI/Oユニットは多々あります。こちらの方が使いやすいと云う考えもあります。が、かゆいところに手が届くデバイスがあっても良いのかと思いました。※industrialshields社のModbusモデルに近いかな
代表的なI/Oを予め準備しておいて接続されていなければスキップするような仕組みで扱います。Modbusデバイスのメリットを考えてみました。規格化された通信仕様のため、クライアントのソフトが汎用品で賄うことが出来ます。
OSの垣根を越えてiPhoneやNexus7でもフリーソフトで制御出来ます。※とはいうものの直感的な使い方とはいきませんが。制御用電源はUSBから5V500mAの供給で賄います。接点入出力はDC24Vに対応します。もしAC電源のON/OFF制御する場合は、リレーユニットを介して実現します。
ADC(ADS1125)は0V〜+10Vを16bit分解能で扱います。2ch用意します。
DAC(MCP4725)は0V〜+5Vを12bit分解能で扱います。2ch用意します。(01)Coil接点 16点 フォトカプラによる絶縁出力(オープンコレクタ) 24Vが掛かることを想定しています。
※内部では32点(2word)分確保していますが、外部端子としては16点とします。(02)Read接点 16点 フォトカプラ入力 24V入力を想定して、22KΩの制限抵抗を入れています。
※内部では32点(2word)分確保していますが、外部端子としては16点とします。
入力レジスタ値に対するアラート表示もします。(03)保持レジスタ 16ワード 入力レジスタ値に対するアラート設定値やDAC出力値、カウンタ設定値等を入力設定出来ます。
(04)入力レジスタ 16ワード デバイスの情報や特定の入力値を表示します。
Coil(01) | ||
アドレス | 機能 | 備考 |
00 | 外部出力OUTPUT_0 | フォトカプラ出力0-0 0-3が共通GND |
01 | 外部出力OUTPUT_1 | フォトカプラ出力0-1 0-3が共通GND |
02 | 外部出力OUTPUT_2 | フォトカプラ出力0-2 0-3が共通GND |
03 | 外部出力OUTPUT_3 | フォトカプラ出力0-3 0-3が共通GND |
04 | 外部出力OUTPUT_4 | フォトカプラ出力1-0 0-3が共通GND |
05 | 外部出力OUTPUT_5 | フォトカプラ出力1-1 0-3が共通GND |
06 | 外部出力OUTPUT_6 | フォトカプラ出力1-2 0-3が共通GND |
07 | 外部出力OUTPUT_7 | フォトカプラ出力1-3 0-3が共通GND |
08 | 外部出力OUTPUT_8 | フォトカプラ出力2-0 0-3が共通GND |
09 | 外部出力OUTPUT_9 | フォトカプラ出力2-1 0-3が共通GND |
10 | 外部出力OUTPUT_10 | フォトカプラ出力2-2 0-3が共通GND |
11 | 外部出力OUTPUT_11 | フォトカプラ出力2-3 0-3が共通GND |
12 | 予約 | |
13 | 予約 | |
14 | 予約 | |
15 | 予約 | |
16 | 内部出力OUTPUT_0 | |
17 | 内部出力OUTPUT_1 | |
18 | 内部出力OUTPUT_2 | |
19 | 内部出力OUTPUT_3 | |
20 | 内部出力OUTPUT_4 | |
21 | 内部出力OUTPUT_5 | |
22 | 内部出力OUTPUT_6 | |
23 | 内部出力OUTPUT_7 | |
24 | 内部出力OUTPUT_8 | |
25 | 内部出力OUTPUT_9 | |
26 | 内部出力OUTPUT_10 | |
27 | 内部出力OUTPUT_11 | |
28 | 内部出力OUTPUT_12 | |
29 | 内部出力OUTPUT_13 | |
30 | 内部出力OUTPUT_14 | |
31 | 内部出力OUTPUT_15 |
Input(02) | ||
アドレス | 機能 | 備考 |
00 | 外部入力PUT_0 | フォトカプラAC入力0-0 0-3が共通GND |
01 | 外部入力PUT_1 | フォトカプラAC入力0-1 0-3が共通GND |
02 | 外部入力PUT_2 | フォトカプラAC入力0-2 0-3が共通GND |
03 | 外部入力PUT_3 | フォトカプラAC入力0-3 0-3が共通GND |
04 | 外部入力PUT_4 | フォトカプラAC入力1-0 0-3が共通GND |
05 | 外部入力PUT_5 | フォトカプラAC入力1-1 0-3が共通GND |
06 | 外部入力PUT_6 | フォトカプラAC入力1-2 0-3が共通GND |
07 | 外部入力PUT_7 | フォトカプラAC入力1-3 0-3が共通GND |
08 | 外部入力PUT_8 | フォトカプラAC入力2-0 0-3が共通GND |
09 | 外部入力PUT_9 | フォトカプラAC入力2-1 0-3が共通GND |
10 | 外部入力PUT_10 | フォトカプラAC入力2-2 0-3が共通GND |
11 | 外部入力PUT_11 | フォトカプラAC入力2-3 0-3が共通GND |
12 | 予約 | |
13 | 予約 | |
14 | 予約 | |
15 | 予約 | |
16 | 内部入力INPUT_0 | 入力値_0_アラート |
17 | 内部入力INPUT_1 | 入力値_1_アラート |
18 | 内部入力INPUT_2 | 入力値_2_アラート |
19 | 内部入力INPUT_3 | 入力値_3_アラート |
20 | 内部入力INPUT_4 | 入力値_4_アラート |
21 | 内部入力INPUT_5 | 入力値_5_アラート |
22 | 内部入力INPUT_6 | 入力値_6_アラート |
23 | 内部入力INPUT_7 | 入力値_7_アラート |
24 | 内部入力INPUT_8 | ADC_0_RUN |
25 | 内部入力INPUT_9 | ADC_1_RUN |
26 | 内部入力INPUT_10 | DAC_0_RUN |
27 | 内部入力INPUT_11 | DAC_1_RUN |
28 | 内部入力INPUT_12 | CI_0_RUN カウント中はON |
29 | 内部入力INPUT_13 | CI_1_RUN カウント中はON |
30 | 内部入力INPUT_14 | CO_0_RUN TimeUpで↓ |
31 | 内部入力INPUT_15 | CO_1_RUN TimeUpで↓ |
Hold(03) | ||||
アドレス | 機能 | ByteH | ByteL | 備考 |
00 | ADC_0_Start/Stop |
|
1で起動 0で停止 起動中は入力データ_4の値を更新 |
|
01 | ADC_1_Start/Stop |
|
1で起動 0で停止 起動中は入力データ_5の値を更新 |
|
02 | 予備:ADC_2_Start/Stop |
|
1で起動 0で停止 | |
03 | 予備:ADC_3_Start/Stop |
|
1で起動 0で停止 | |
04 | ADCサンプリングレート |
|
ADC0/1共通のサンプリングレート | |
05 | 予備 | |||
06 | DAC_0 |
|
-10V=-32768 +10V=32767 | |
07 | DAC_1 |
|
-10V=-32768 +10V=32767 | |
08 | DAC_0_Start/Stop |
|
1で起動 0で停止 | |
09 | DAC_1_Start/Stop |
|
1で起動 0で停止 | |
10 | カウンタ入力0Start/Stop |
|
1で計測中 0で停止 入力データ_8に現在値 | |
11 | カウンタ入力1Start/Stop |
|
1で計測中 0で停止 入力データ_9に現在値 | |
12 | タイマ/クロック切替0 |
|
0:未使用 1:タイマ 2:クロック | |
13 | タイマ/クロック切替1 |
|
||
14 | TimerSet0HIGH |
|
1usecタイマカウント or 出力パルス数 カウント中内部入力INPUT_14_ONカウントアップでOFF |
|
15 | TimerSet0LOW | |||
16 | TimerSet1HIGH |
|
1usecタイマカウント or 出力パルス数 カウント中内部入力INPUT_15_ONカウントアップでOFF |
|
17 | TimerSet1LOW | |||
18 | クロック周波数0 |
|
0-50000 0〜5000Hz で x10値 | |
19 | Duty比0 |
|
0-100 | |
20 | クロック周波数1 |
|
0-50000 0〜5000Hz で x10値 | |
21 | Duty比1 |
|
0-100 | |
22 | タイマ・クロック0Start/Stop |
|
1で計測中 0で停止 | |
23 | タイマ・クロック1Start/Stop |
|
1で計測中 0で停止 | |
24 | 入力値_0_上限値 |
|
この値を入力値0と比較してアラートとして設定 上限>下限が不成立の場合は比較せずアラートFALSE |
|
25 | 入力値_0_下限値 |
|
||
26 | 入力値_1_上限値 |
|
この値を入力値1と比較してアラートとして設定 上限>下限が不成立の場合は比較せずアラートFALSE |
|
27 | 入力値_1_下限値 |
|
||
28 | 入力値_2_上限値 |
|
この値を入力値2と比較してアラートとして設定 上限>下限が不成立の場合は比較せずアラートFALSE |
|
29 | 入力値_2_下限値 |
|
||
30 | 入力値_3_上限値 |
|
この値を入力値3と比較してアラートとして設定 上限>下限が不成立の場合は比較せずアラートFALSE |
|
31 | 入力値_3_下限値 |
|
||
32 | 入力値_4_上限値 |
|
この値を入力値4と比較してアラートとして設定 上限>下限が不成立の場合は比較せずアラートFALSE |
|
33 | 入力値_4_下限値 |
|
||
34 | 入力値_5_上限値 |
|
この値を入力値5と比較してアラートとして設定 上限>下限が不成立の場合は比較せずアラートFALSE |
|
35 | 入力値_5_下限値 |
|
||
36 | 入力値_6_上限値 |
|
この値を入力値6と比較してアラートとして設定 上限>下限が不成立の場合は比較せずアラートFALSE |
|
37 | 入力値_6_下限値 |
|
||
38 | 入力値_7_上限値 |
|
この値を入力値7と比較してアラートとして設定 上限>下限が不成立の場合は比較せずアラートFALSE |
|
39 | 入力値_7_下限値 |
|
Input(04) | ||||
アドレス | 機能 | ByteH | ByteL | 備考 |
00 | 入力データ_0 |
|
温度 25.45℃ => 2545 |
|
01 | 入力データ_1 |
|
湿度 50.89% => 5089 |
|
02 | 入力データ_2 |
|
気圧 1033.25hPa => 1033 |
|
03 | 入力データ_3 |
|
||
04 | 入力データ_4 |
|
-10V=-32768 +10V=32767 実際には | |
05 | 入力データ_5 |
|
||
06 | 入力データ_6 |
|
-10V=-32768 +10V=32767 実際には0-3.3V | |
07 | 入力データ_7 |
|
||
08 | 入力データ_8 |
|
||
09 | 入力データ_9 |
|
||
10 | 入力データ_10 |
|
||
11 | 入力データ_11 |
|
||
12 | 入力データ_12 |
|
現在時刻 TZ:タイムゾーン 日本の場合+9=90ハワイ-8=-80 59分01秒=59×256+01=15105(0x5901) |
|
13 | 入力データ_13 |
|
|
|
14 | 入力データ_14 |
|
|
|
15 | 入力データ_15 |
|
|
|
16 | VenderString_0_1 | ‘\0’ | ‘’ | ベンタ名31max文字+\0 |
17 | VenderString_2_3 | ‘’ | ‘’ | |
18 | VenderString_4_5 | ‘’ | ‘’ | |
19 | VenderString_6_7 | ‘’ | ‘’ | |
20 | VenderString_8_9 | ‘’ | ‘’ | |
21 | VenderString_10_11 | ‘’ | ‘’ | |
22 | VenderString_12_13 | ‘’ | ‘’ | |
23 | VenderString_14_15 | ‘’ | ‘’ | |
24 | VenderString_16_17 | ‘’ | ‘’ | |
25 | VenderString_18_19 | ‘’ | ‘’ | |
26 | VenderString_20_21 | ‘’ | ‘’ | |
27 | VenderString_22_23 | ‘’ | ‘’ | |
28 | VenderString_24_25 | ‘’ | ‘’ | |
29 | VenderString_26_27 | ‘’ | ‘’ | |
30 | VenderString_28_29 | ‘’ | ‘’ | |
31 | VenderString_30_31 | ‘’ | ‘’ | |
32 | ProductString_0_1 | ‘\0’ | ‘’ | 製品名31max文字+\0 |
33 | ProductString_2_3 | ‘’ | ‘’ | |
34 | ProductString_4_5 | ‘’ | ‘’ | |
35 | ProductString_6_7 | ‘’ | ‘’ | |
36 | ProductString_8_9 | ‘’ | ‘’ | |
37 | ProductString_10_11 | ‘’ | ‘’ | |
38 | ProductString_12_13 | ‘’ | ‘’ | |
39 | ProductString_14_15 | ‘’ | ‘’ | |
40 | ProductString_16_17 | ‘’ | ‘’ | |
41 | ProductString_18_19 | ‘’ | ‘’ | |
42 | ProductString_20_21 | ‘’ | ‘’ | |
43 | ProductString_22_23 | ‘’ | ‘’ | |
44 | ProductString_24_25 | ‘’ | ‘’ | |
45 | ProductString_26_27 | ‘’ | ‘’ | |
46 | ProductString_28_29 | ‘’ | ‘’ | |
47 | ProductString_30_31 | ‘’ | ‘’ | |
48 | SystemVerValue0_1 | ‘\1’ | ‘\0’ |
システムバージョン表記 バイト単位で0/1/2/3 |
49 | SystemVerValue2_3 | ‘\0’ | ‘\0’ | |
50 | FirmwareVerVarlue0_1 | ‘\1’ | ‘\0’ |
ファームウエアバージョン表記 バイト単位で0/1/2/3 |
51 | FirmwareVerVarlue2_3 | ‘\0’ | ‘\0’ | |
52 | 予約 | ‘’ | ‘’ | |
53 | 予約 | ‘’ | ‘’ | |
54 | 予約 | ‘’ | ‘’ | |
55 | 予約 | ‘’ | ‘’ | |
56 | 予約 | ‘’ | ‘’ | |
57 | 予約 | ‘’ | ‘’ | |
58 | 予約 | ‘’ | ‘’ | |
59 | 予約 | ‘’ | ‘’ | |
60 | 予約 | ‘’ | ‘’ | |
61 | 予約 | ‘’ | ‘’ | |
62 | 予約 | ‘’ | ‘’ | |
63 | 予約 | ‘’ | ‘’ |
ソースコードも添えておきます。
このコードを実行するに当たり追加が必要なライブラリは、
オブジェクト自体はベクター殿のストレージをお借りしています。
https://www.vector.co.jp/vpack/browse/person/an051501.html 免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。