相关内容:
linux嵌入式软件中libmudbus库的移植与使用(一)
linux嵌入式软件中libmudbus库的移植与使用(二)
测试环境:
在上一篇文档中,创建的install文件夹下,看到include、lib,以备主程序调用。将install文件夹下include里modbus中.h文件、lib里的直接复制到
含有下面测试代码modbus.c文件夹中。
测试代码modbus.c:
#include<errno.h> #include<string.h> #include <stdio.h> #include <unistd.h> #include <modbus.h> typedef struct { unsigned short null_0; // 0x00 unsigned short key1_state; // 0x01: 按键1状态 unsigned short key2_state; // 0x02: 按键2状态 unsigned short key3_state; // 0x03: 按键3状态 unsigned short key4_state; // 0x04: 按键4状态 unsigned short wifi_comm_state; // 0x05: wifi通讯状态 unsigned short batt_comm_state; // 0x06:电池通讯状态 unsigned short null_1[9]; // 0x07~0xF unsigned short percentage; // 0x10: 电量 unsigned short voltage; // 0x11: 电压 unsigned short in_current; // 0x12: 充电电流 unsigned short out_current; // 0x13: 放电电流 unsigned short ch_state; // 0x14: 充电状态 unsigned short ch_key; // 0x15: 充电按键 }display_t; display_t disp_date; static void display_fresh(void) { // disp_date.key1_state = 1; disp_date.key2_state =1; disp_date.key3_state = 1; disp_date.key4_state =1; } int main(void) { modbus_t *ctx = NULL; #if 0 ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1); //设置从机号码 modbus_set_slave(ctx, 1); //modbus_set_response_timeout(ctx, 3, 0); //sec,usec,超时设置 设置为3s if(modbus_connect(ctx) == -1) { printf("Connection failed: %s ",modbus_strerror(errno)); modbus_free(ctx); } memset(&disp_date, 0, sizeof(display_t)); while(1) { display_fresh(); printf("111:%d,%d,%d,%d,",disp_date.key1_state,disp_date.key2_state,disp_date.key3_state,disp_date.key4_state); modbus_write_registers(ctx, 0, sizeof(display_t)/sizeof(unsigned short), (const uint16_t*)&disp_date); modbus_read_input_registers(ctx, 0, sizeof(display_t)/sizeof(unsigned short), ( uint16_t*)&disp_date); printf("222:%d,%d,%d,%d,",disp_date.key1_state,disp_date.key2_state,disp_date.key3_state,disp_date.key4_state); usleep(50*1000); } #else
ctx = modbus_new_tcp("192.168.43.123", 8080); modbus_set_debug(ctx, TRUE); modbus_set_slave(ctx, 1);//设置从机号码 if (modbus_connect(ctx) == -1) { printf("modbus connection failed: %s ",modbus_strerror(errno)); modbus_free(ctx); } memset(&disp_date, 0, sizeof(display_t)); while(1) { display_fresh(); printf("1111:%d,%d,%d,%d ",disp_date.key1_state,disp_date.key2_state,disp_date.key3_state,disp_date.key4_state); modbus_write_registers(ctx, 0, sizeof(display_t)/sizeof(unsigned short), (const uint16_t*)&disp_date); modbus_read_input_registers(ctx, 0, sizeof(display_t)/sizeof(unsigned short), ( uint16_t*)&disp_date); printf("2222:%d,%d,%d,%d ",disp_date.key1_state,disp_date.key2_state,disp_date.key3_state,disp_date.key4_state); usleep(1000*1000); } #endif modbus_close(ctx); //关闭modbus连接 modbus_free(ctx); //释放modbus资源,使用完libmodbus需要释放掉 return 0; }
makefile:
CROSS = LIB_PWD = $(shell pwd) TARGET_BIN = test CPP = $(CROSS)g++ -std=c++11 CC = $(CROSS)gcc LD = $(CROSS)ld CFLAGS += -I$(shell pwd) CFLAGS += -Wall -g LDFLAGS += -lmodbus -ldl -lm -lrt -L$(LIB_PWD) STATIC_LIB += $(LIB_PWD)/libmodbus.a SRCS = $(wildcard *.c) OBJS = $(patsubst %.c,%.o,$(SRCS)) %.o: %.c $(CPP) $(CFLAGS) -o $@ -c $< all:$(OBJS) $(CPP) -o $(TARGET_BIN) $(OBJS) $(STATIC_LIB) $(LDFLAGS)
find . -name "*.o" | xargs rm -f clean: find . -name "*.o" | xargs rm -f