1. راهاندازی MODBUS MASTER
1.1 مقداردهی اولیه Master
//Master تعریف متغیرهای ModbusMasterConfig_t modbusMasterCom1; ModbusMasterConfig_t modbusMasterCom2; //COM1 برای Master مقداردهی اولیه ModbusMaster_Init(&modbusMasterCom1, 1, 1); // Address: 1, COM Port: 1 ModbusMaster_Enable(&modbusMasterCom1, true); //COM2 برای Master مقداردهی اولیه ModbusMaster_Init(&modbusMasterCom2, 2, 2); // Address: 2, COM Port: 2 ModbusMaster_Enable(&modbusMasterCom2, true);
1.2 تنظیم پارامترهای ارتباطی
//Master برای COM1 تنظیم پارامترهای COM1.Baudrate = 9600; COM1.WordLength = UART_WORDLENGTH_8B; COM1.Parity = UART_PARITY_NONE; COM1.StopBits = UART_STOPBITS_1; // Master برای COM2 تنظیم پارامترهای COM2.Baudrate = 19200; COM2.WordLength = UART_WORDLENGTH_8B; COM2.Parity = UART_PARITY_EVEN; COM2.StopBits = UART_STOPBITS_1;
2. خواندن رجیسترها (Read Functions)
2.1 خواندن Holding Registers
//Holding Register خواندن یک
bool readSingleHoldingRegister() {
bool result = ModbusMaster_ReadHoldingRegisters(
&modbusMasterCom1, // Master Config
&modbusData, // Slave Config
1, // Slave ID
100, // Start Address
1 // Quantity
);
if (result) {
uint16_t value = modbusData.holding_registers[0];
// پردازش مقدار خوانده شده
return true;
}
return false;
}
//Holding Register خواندن چندین
bool readMultipleHoldingRegisters() {
bool result = ModbusMaster_ReadHoldingRegisters(
&modbusMasterCom1, // Master Config
&modbusData, // Slave Config
1, // Slave ID
200, // Start Address
10 // Quantity (10 registers)
);
if (result) {
for (int i = 0; i < 10; i++) {
uint16_t value = modbusData.holding_registers[i];
// پردازش هر مقدار
}
return true;
}
return false;
}
2.2 خواندن Input Registers
//Input Registers خواندن bool readInputRegisters() { bool result = ModbusMaster_ReadInputRegisters( &modbusMasterCom1, // Master Config 1, // Slave ID 300, // Start Address 5 // Quantity ); if (result) { for (int i = 0; i < 5; i++) { uint16_t value = modbusMasterCom1.input_registers[i]; // پردازش مقدار } return true; } return false; }
2.3 خواندن Coils
//Coils خواندن
bool readCoils() {
bool result = ModbusMaster_ReadCoils(
&modbusMasterCom1, // Master Config
1, // Slave ID
0, // Start Address
16 // Quantity
);
if (result) {
for (int i = 0; i < 16; i++) {
bool coilState = modbusMasterCom1.coils[i];
//Coil پردازش وضعیت
}
return true;
}
return false;
}
2.4 خواندن Discrete Inputs
//Discrete Inputs خواندن
bool readDiscreteInputs() {
bool result = ModbusMaster_ReadDiscreteInputs(
&modbusMasterCom1, // Master Config
1, // Slave ID
0, // Start Address
8 // Quantity
);
if (result) {
for (int i = 0; i < 8; i++) {
bool inputState = modbusMasterCom1.discrete_inputs[i];
// پردازش وضعیت Discrete Input
}
return true;
}
return false;
}
3. نوشتن رجیسترها (Write Functions)
3.1 نوشتن یک Holding Register
//Holding Register نوشتن یک
bool writeSingleHoldingRegister() {
bool result = ModbusMaster_WriteSingleRegister(
&modbusMasterCom1, // Master Config
1, // Slave ID
100, // Register Address
1234 // Value
);
return result;
}
. 3.2 نوشتن چندین Holding Register
//Holding Register نوشتن چندین
bool writeMultipleHoldingRegisters() {
uint16_t values[5] = {100, 200, 300, 400, 500};
bool result = ModbusMaster_WriteMultipleRegisters(
&modbusMasterCom1, // Master Config
1, // Slave ID
200, // Start Address
values, // Values Array
5 // Quantity
);
return result;
}
3.3 نوشتن یک Coil
//Coil نوشتن یک
bool writeSingleCoil() {
bool result = ModbusMaster_WriteSingleCoil(
&modbusMasterCom1, // Master Config
1, // Slave ID
0, // Coil Address
true // Value (true/false)
);
return result;
}
3.4 نوشتن چندین Coil
// نوشتن چندین Coil
bool writeMultipleCoils() {
uint8_t coilValues[8] = {1, 0, 1, 0, 1, 0, 1, 0};
bool result = ModbusMaster_WriteMultipleCoils(
&modbusMasterCom1, // Master Config
1, // Slave ID
0, // Start Address
coilValues, // Values Array
8 // Quantity
);
return result;
}
