PHP код:
//gcc mbmaster.c -o mbmaster `pkg-config --libs --cflags libmodbus`
//==========================
// Modbus RTU Master
//==========================
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h>
#define INT_REGS 10 //10 регистров
//============================
int main(int argc, char *argv[])
{
uint16_t tab_reg[INT_REGS];
modbus_t *ctx;
modbus_mapping_t *mb_mapping;
int rc;
int i;
char c;
ctx = modbus_new_rtu("/dev/ttyUSB0", 9600, 'N', 8, 1);
if (ctx == NULL) { fprintf(stderr, "Unable to create the modbus context\n"); return -1; }
modbus_set_slave(ctx, 1); //id=1
if (modbus_connect(ctx) == -1) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
//основной цикл
for(;;) {
rc = modbus_read_registers(ctx, 0, INT_REGS, tab_reg);
if (rc == -1) {
fprintf(stderr, "Read - %s\n", modbus_strerror(errno));
//return -1;
}
if (rc != -1) {
for (i=0; i < rc; i++) { printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]); }
}
scanf ("%c",&c);
if (c =='a') tab_reg[0] = 1; // посылаем ардуине команды с клавиатуры
if (c =='s') tab_reg[0] = 0;
if (c =='z') tab_reg[1] = 11;
if (c =='q') break;
rc = modbus_write_registers(ctx, 0, 1, tab_reg);
if (rc == -1) { fprintf(stderr, "Write - %s\n", modbus_strerror(errno)); }
} //for cycle
printf("Quit mbmaster: %s\n", modbus_strerror(errno));
modbus_close(ctx);
modbus_free(ctx);
return 0;
}