Free Modbusライブラリの紹介
Free Modbusは使いやすいModbus RTUライブラリで、複数の独立したModbus RTUスレーブを同時に実行できます。このライブラリの特徴は、0 xxxx ~ 4 xxxxのレジスタ空間を直接使用し、レジスタマッピングなどの面倒な作業を手動で処理する必要がなく、使用するレジスタの最大数を制限できることです。タイマーインタフェースとシリアルインタフェースを提供し、ハードウェア要件に応じて構成でき、Modbus通信の従来の使用に非常に沿っています。

取扱説明書
Free Modbusライブラリを使用する基本的な手順は次のとおりです。
- 機からの構築1.1ライブラリの導入:Free Modbusライブラリをプロジェクトに追加し、ヘッダーファイル#include“mdrtuslave.h”を導入します。1.2 Modbus RTUスレーブの作成:
#include mdrtuslave.h"
#define SLAVE_ID 5
#define BUAD_RATE 96 00
static ModbusRTUSlaveHandler mdhandler;
static mdVOID popchar ModbusRTUSlaveHandler mdU8c
{
//ここにシリアル送信コードを追加
}
static void ModbusInit
{
struct ModbusRTUSlaveRegisterInfo;
info.slaveId = SLAVE_ID;
info.usartBaudRate = BUAD_RATE;
info.mdRTUPopChar = popchar;
mdCreateModbusRTUSlave mdhandler info;
}
ModbusInit ModbusInit ModbusInit nParticle;1.3ハートビート関数の呼び出し:
#define TIMER_UTIME 100 //タイマ周期は100us
static void timer_handler void//100usタイマーコールバック関数
{
mdhandler-portRTUTimerTick mdhandler TIMER_UTIME;
}1.4シリアルポートからのデータ受信:
static void usart_rec_handler char *buf size_t len //シリアル受信割り込み関数
{
for size_t i = 0; i; i++
{
mdhandler-portRTUPushChar mdhandler buf[i];
}
}- スレーブ·レジスタへの書き込みと読み取り2.1入力コイルの読み取り:
mdBit bitビット;
mdu 32 addr = 0;
mdSTATUS ret;
ret = ler-register-ReadInputCoil ler-registerbit; //入力コイルを読み取り、デバイスアドレスは10001
if ret ==
{
printf読み込みに失敗しました\n;
}2.2読み取り保持レジスタ:
mdu 16データ;
mdu 32 addr = 0;
mdSTATUS ret;
ret = ler-register-ReadRegister ler-registerdata; //40001の保持レジスタを読み込む
if ret ==
{
printf読み込みに失敗しました\n;
}2.3入力コイルへの書き込み:
mdBitビット= mdHigh;
mdu 32 addr = 0;
mdSTATUS ret;
ret = mdhandler-registerPool-mdWriteInputCoil mdhandler-registerPool addr bit; //入力コイルへの書き込み、アドレス10001、ハイレベル
if ret ==
{
printf書き込みに失敗しました\n;
}2.4書き込み保持レジスタ:
U16 data = 0x1234;
mdu 32 addr = 0;
mdSTATUS ret;
ret = mdhandler-registerPool-mdWriteHoldRegister mdhandler-registerPool addr data; //書き込み保持レジスタ、アドレス40001、サイズ0x1234
if ret ==
{
printf書き込みに失敗しました\n;
}2.5その他のレジスタ操作API(推奨):
/* 推奨されません */
mdSTATUS *mdReadBit RegisterPoolHandle handler mdU32 addr mdBit *bit;
mdSTATUS *mdWriteBit RegisterPoolHandle handler mdU32addr mdBit bit;
mdSTATUS *mdReadBits RegisterPoolHandle handler mdU32addr mdU32len mdBit *bits;
mdSTATUS *mdWriteBits RegisterPoolHandle handler mdU32 addr mdU32 len mdBit *bits;
mdSTATUS *mdReadU16 RegisterPoolHandle handler mdU32addr mdU16 *data;
mdSTATUS *mdWriteU16 RegisterPoolHandle handler mdU32 addr mdU16 data;
mdSTATUS *mdReadU16s RegisterPoolHandle handler mdU32addr mdU32len mdU16 *data;
mdSTATUS *mdWriteU16s RegisterPoolHandle handler mdU32 addr mdU32 len mdU16 *data;
/* お勧め **
mdSTATUS *mdReadCoil RegisterPoolHandle handler mdU32addr mdBit* bit; //デバイスアドレス1~10000、addr=0 -デバイス1
mdSTATUS *mdReadCoils RegisterPoolHandle handler mdU32 addr mdU32 len mdBit* bits;
mdSTATUS *mdWriteCoil RegisterPoolHandle handler mdU32addr mdBit bit;
mdSTATUS *mdWriteCoils RegisterPoolHandle handler mdU32addr mdU32len mdBit* bits;
mdSTATUS *mdReadInputCoil RegisterPoolHandle handler mdU32addr mdBit* bit; //デバイスアドレス10001~20000、addr=0 -デバイス10001
mdSTATUS *mdReadInputCoils RegisterPoolHandle handler mdU32 addr mdU32 len mdBit* bits;
mdSTATUS *mdWriteInputCoil RegisterPoolHandle handler mdU32addr mdBit bit;
mdSTATUS *mdWriteInputCoils RegisterPoolHandle handler mdU32 addr mdU32 len mdBit* bits;
mdSTATUS *mdReadInputRegister RegisterPoolHandle handler mdU32addr mdU16 * data;//デバイスアドレス30001~40000、addr=0 -デバイス30001
mdSTATUS *mdReadInputRegisters RegisterPoolHandle handler mdU32 addr mdU32 len mdU16* data;
mdSTATUS *mdWriteInputRegister RegisterPoolHandle handler mdU32addr mdU16data;
mdSTATUS *mdWriteInputRegisters RegisterPoolHandle handler mdU32addr mdU32len mdU16* data;
mdSTATUS *mdReadHoldRegister RegisterPoolHandle handler mdU32addr mdU16 * data;//デバイスアドレス40001~50000、addr=0 -デバイス40001
mdSTATUS *mdReadHoldRegisters RegisterPoolHandle handler mdU32addr mdU32len mdU16* data;
mdSTATUS *mdWriteHoldRegister RegisterPoolHandle handler mdU32 addr mdU16 data;
mdSTATUS *mdWriteHoldRegisters RegisterPoolHandle handler mdU32addr mdU32len mdU16* data;mdRead Coil、mdRead InputCoil、mdRead InputRegisterなどの他のレジスタ操作APIもあり、Modbus変数アドレスの仕様により準拠しており、レジスタ値の読み書きを容易にします。
Modbus変数アドレス
Modbus変数アドレスは、Modbus通信の異なるレジスタの位置とタイプを表します。これらのアドレスはModbusプロトコルの一部であり、読み書きするレジスタを指定するために使用される。一般的なModbus変数アドレスとその意味は次のとおりです。
- 0 xxxx:これはコイルレジスタアドレスで、機能コード01(コイルの読み取り)と機能コード05(個々のコイルの書き込み)に対応します。開閉装置などの制御に使用され、読み書きが可能です。
- 1 xxxx:これは入力コイルレジスタアドレスで、関数コード02(入力コイルの読み取り)に対応します。これらは入力信号を表すために使用され、通常は読み取り専用です。
- 3 xxxx:これは入力レジスタアドレスで、関数コード04(入力レジスタの読み取り)に対応します。各レジスタは16ビットの符号なし整数を表し、通常は読み取り専用です。
- 4 xxxx:これはホールドレジスタアドレスで、機能コード03(ホールドレジスタの読み取り)、機能コード06(単一のホールドレジスタの書き込み)、および機能コード16(複数のホールドレジスタの書き込み)に対応します。デバイスのパラメータ、ステータスなどの情報を格納するために使用され、読み書きが可能です。
これらのアドレスタイプと関数コードはModbus通信の中核部分であり、デバイスのさまざまなレジスタを読み書きして監視および制御することができます。
要約すると、Free ModbusライブラリはModbus RTUスレーブを作成し、レジスタの読み書き操作を実行する便利な方法を提供します。Modbus変数アドレスは、さまざまなレジスタのタイプと機能を定義します。
下載看看是否為免費modbus開發庫
….