ModbusTCPSlaveユニット

最終更新日: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

uint
1で起動 0で停止
起動中は入力データ_4の値を更新
01 ADC_1_Start/Stop

uint
1で起動 0で停止
起動中は入力データ_5の値を更新
02 予備:ADC_2_Start/Stop

uint
1で起動 0で停止
03 予備:ADC_3_Start/Stop

uint
1で起動 0で停止
04 ADCサンプリングレート

uint
ADC0/1共通のサンプリングレート
05 予備    
06 DAC_0

int
 -10V=-32768 +10V=32767
07 DAC_1

int
 -10V=-32768 +10V=32767
08 DAC_0_Start/Stop

uint
1で起動 0で停止
09 DAC_1_Start/Stop

uint
1で起動 0で停止
10 カウンタ入力0Start/Stop

uint
1で計測中 0で停止 入力データ_8に現在値
11 カウンタ入力1Start/Stop

uint
1で計測中 0で停止 入力データ_9に現在値
12 タイマ/クロック切替0

uint
0:未使用 1:タイマ 2:クロック
13 タイマ/クロック切替1

uint
14 TimerSet0HIGH

U32
1usecタイマカウント or 出力パルス数
カウント中内部入力INPUT_14_ONカウントアップでOFF
15 TimerSet0LOW
16 TimerSet1HIGH

U32
1usecタイマカウント or 出力パルス数
カウント中内部入力INPUT_15_ONカウントアップでOFF
17 TimerSet1LOW
18 クロック周波数0

uint
0-50000 0〜5000Hz で x10値
19 Duty比0

uint
0-100
20 クロック周波数1

uint
0-50000 0〜5000Hz で x10値
21 Duty比1

uint
0-100
22 タイマ・クロック0Start/Stop

uint
1で計測中 0で停止
23 タイマ・クロック1Start/Stop

uint
1で計測中 0で停止
24 入力値_0_上限値

I16
この値を入力値0と比較してアラートとして設定
上限>下限が不成立の場合は比較せずアラートFALSE
25 入力値_0_下限値

I16
26 入力値_1_上限値

I16
この値を入力値1と比較してアラートとして設定
上限>下限が不成立の場合は比較せずアラートFALSE
27 入力値_1_下限値

I16
28 入力値_2_上限値

I16
この値を入力値2と比較してアラートとして設定
上限>下限が不成立の場合は比較せずアラートFALSE
29 入力値_2_下限値

I16
30 入力値_3_上限値

I16
この値を入力値3と比較してアラートとして設定
上限>下限が不成立の場合は比較せずアラートFALSE
31 入力値_3_下限値

I16
32 入力値_4_上限値

I16
この値を入力値4と比較してアラートとして設定
上限>下限が不成立の場合は比較せずアラートFALSE
33 入力値_4_下限値

I16
34 入力値_5_上限値

I16
この値を入力値5と比較してアラートとして設定
上限>下限が不成立の場合は比較せずアラートFALSE
35 入力値_5_下限値

I16
36 入力値_6_上限値

I16
この値を入力値6と比較してアラートとして設定
上限>下限が不成立の場合は比較せずアラートFALSE
37 入力値_6_下限値

I16
38 入力値_7_上限値

I16
この値を入力値7と比較してアラートとして設定
上限>下限が不成立の場合は比較せずアラートFALSE
39 入力値_7_下限値

I16

Input(04)
アドレス 機能 ByteH ByteL 備考
00 入力データ_0

int
温度 25.45℃ =>  2545
01 入力データ_1

uint
湿度 50.89% =>  5089
02 入力データ_2

uint
気圧 1033.25hPa  =>  1033
03 入力データ_3

予約
 
04 入力データ_4

ADC_0
-10V=-32768 +10V=32767 実際には
05 入力データ_5

ADC_1
06 入力データ_6

DAC_0
-10V=-32768 +10V=32767 実際には0-3.3V
07 入力データ_7

DAC_1
08 入力データ_8

カウンタ入力値0
 
09 入力データ_9

カウンタ入力値1
 
10 入力データ_10

カウンタ出力値0
 
11 入力データ_11

カウンタ出力値1
 
12 入力データ_12

西暦
現在時刻
TZ:タイムゾーン 日本の場合+9=90ハワイ-8=-80
59分01秒=59×256+01=15105(0x5901)
13 入力データ_13

14 入力データ_14

TZ

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社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。