int main(int argc, char *argv[]) { modbus_t *ctx; struct timeval timeout; int ret, i, rc, ii,iii; int nb_pointers; // unit16_t *tab_rp_registers; uint16_t regs[MODBUS_MAX_READ_REGISTERS] = {0}; uint16_t regs2[MODBUS_MAX_READ_REGISTERS] = {0}; char regs3[MODBUS_MAX_READ_REGISTERS] = {0}; FILE *fp = NULL; if(argc < 3){ printf("INsufficient argument"); return -1; } ctx = modbus_new_rtu(MODBUS_SERIAL_DEV, MODBUS_SERIAL_BAUDRATE, MODBUS_SERIAL_PARITY, MODBUS_SERIAL_DATABITS, MODBUS_SERIAL_STOPBITS); if (ctx == NULL) { fprintf(stderr, "Unable to create the libmodbus context\n"); exit(-1); } i = modbus_rtu_get_serial_mode(ctx); if( i == MODBUS_RTU_RS232) { printf("Serial mode = RS232\n"); ret = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232); if(ret < 0) fprintf(stderr, "modbus_rtu_set_serial_mode() error: %s\n", strerror(errno)); } else if(i == MODBUS_RTU_RS485) { printf("Serial mode = RS485\n"); ret = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485); if(ret < 0) fprintf(stderr, "modbus_rtu_set_serial_mode() error: %s\n", strerror(errno)); } else { printf("Serial mode = RS485\n"); ret = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485); if(ret < 0) fprintf(stderr, "modbus_rtu_set_serial_mode() error: %s\n", strerror(errno)); } /* set slave device ID */ modbus_set_slave(ctx, MODBUS_DEVICE_ID); /* Debug mode */ modbus_set_debug(ctx, MODBUS_DEBUG); if (modbus_connect(ctx) == -1) { fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); modbus_free(ctx); return -1; } /* Allocate and initialize the memory to store the registers */ /* nb_points = (UT_REGISTERS_NB > UT_INPUT_REGISTERS_NB) ? UT_REGISTERS_NB : UT_INPUT_REGISTERS_NB; tab_rp_registers = (uint16_t *) malloc(nb_points * sizeof(uint16_t)); memset(tab_rp_registers, 0, nb_points * sizeof(uint16_t)); */ /* write data in test.txt */ fp = fopen("test2.txt", "w"); if(fp == NULL) { printf("fail to open file!\n"); return -1; } for( iii=1; iii <= strtol(argv[2],NULL, 10);iii++) { regs[iii] = strtol(argv[iii+2], NULL, 10); } rc = modbus_write_registers(ctx, strtol(argv[1], NULL, 16), strtol(argv[2], NULL, 10), ®s[1]); if (rc < 0) { fprintf(stderr, "%s\n", modbus_strerror(errno)); } /* read holding registers (0x03 function code) */ rc = modbus_read_registers(ctx, strtol(argv[1], NULL, 16), strtol(argv[2], NULL, 10), regs2); if (rc < 0) { fprintf(stderr, "%s\n", modbus_strerror(errno)); } else { printf("HOLDING REGISTERS:\n"); for (ii=0; ii < rc; ii++) { sprintf(regs3, "%d", regs2[ii]); fputs(regs3, fp); fputs("\n", fp); printf("[%d]=%d\n", ii, regs2[ii]); } } fclose(fp); /* Close the connection */ modbus_close(ctx); modbus_free(ctx); return 0; }
int main(int argc, char *argv[]) { modbus_t *mb; int16_t tab_reg[100]={0}; int tty_fd,key_fd,led_fd; int i = 0, count,regs; int mode; struct input_event ev_key; if (argc < 3) { fprintf(stdout, "Usage: [ UART device ] [ key device ]\n"); exit(0); } mb = modbus_new_rtu(argv[1],115200,'N',8,1);//open port key_fd=open(argv[2],O_RDWR); if (key_fd < 0) { perror("open key device error!\n"); close(key_fd); exit(1); } modbus_set_debug(mb, FALSE); modbus_set_error_recovery(mb, MODBUS_ERROR_RECOVERY_LINK | MODBUS_ERROR_RECOVERY_PROTOCOL); modbus_set_slave(mb,5);//set slave address if(mode=modbus_rtu_get_serial_mode(mb)<0){ printf("get 1 serial mode faild\n"); return -1; } mb=modbus_rtu_set_serial_mode(mb,MODBUS_RTU_RS485); if(mode=modbus_rtu_get_serial_mode(mb)<0){ printf("get 2 serial mode faild\n"); return -1; } if(mode==1) printf("mode:RS485 %d\n",mode); else printf("mode:RS232 %d\n",mode); //modbus_rtu_open_485de(mb,"/sys/class/leds/RS485_TX_RX/brightness"); modbus_connect(mb); led_fd = open("/sys/class/leds/sys_led/brightness", O_RDWR); if (led_fd < 0) { perror("open led device error!\n"); close(led_fd); exit(1); } write(led_fd, "0", 1); for ( ; ; ) { count = read(key_fd, &ev_key, sizeof(struct input_event)); if (count > 0){ if (EV_KEY == ev_key.type){ printf("type:%d, code:%d, value:%d\n", ev_key.type, ev_key.code, ev_key.value); switch(ev_key.code){ case 22: if (0 == ev_key.value) { //modbus_set_slave(mb,5);//set slave address regs=modbus_read_registers(mb, 0x000B,1, tab_reg); // for(i=0;i<regs;i++) // printf("异常光路:[%d]=%d\n",i,tab_reg[i]); // printf("----------------------------------->发出切换指令 A\n"); write(led_fd, "1", 1); sleep(1); // printf("----------------------------------->发出切换指令 B\n"); write(led_fd, "0", 1); //sleep(1); // printf("----------------------------------->发出切换指令 C\n"); } break; case 16: { if (0 == ev_key.value) { modbus_set_slave(mb,2);//set slave address regs=modbus_read_registers(mb, 0x000B,1, tab_reg); for(i=0;i<regs;i++) printf("异常光路:[%d]=%d\n",i,tab_reg[i]); } break; case 17: if (0 == ev_key.value) { modbus_set_slave(mb,3);//set slave address regs=modbus_read_registers(mb, 0x000B,1, tab_reg); for(i=0;i<regs;i++) printf("异常光路:[%d]=%d\n",i,tab_reg[i]); } break; case 18: if (0 == ev_key.value) { modbus_set_slave(mb,4);//set slave address regs=modbus_read_registers(mb, 0x000B,1, tab_reg); for(i=0;i<regs;i++) printf("异常光路:[%d]=%d\n",i,tab_reg[i]); } break; case 19: if (0 == ev_key.value) { modbus_set_slave(mb,1);//set slave address regs=modbus_read_registers(mb, 0x000B,1, tab_reg); for(i=0;i<regs;i++) printf("异常光路:[%d]=%d\n",i,tab_reg[i]); } break; case 20: if (0 == ev_key.value) { modbus_set_slave(mb,6);//set slave address regs=modbus_read_registers(mb, 0x000B,1, tab_reg); for(i=0;i<regs;i++) printf("异常光路:[%d]=%d\n",i,tab_reg[i]); } break; case 21: if (0 == ev_key.value) { modbus_set_slave(mb,7);//set slave address regs=modbus_read_registers(mb, 0x000B,1, tab_reg); for(i=0;i<regs;i++) printf("异常光路:[%d]=%d\n",i,tab_reg[i]); } break; case 15: if (0 == ev_key.value) { modbus_set_slave(mb,8);//set slave address regs=modbus_read_registers(mb, 0x000B,1, tab_reg); for(i=0;i<regs;i++) printf("异常光路:[%d]=%d\n",i,tab_reg[i]); } break; default: printf("无效中断"); break; } } } } } close(key_fd); modbus_close(mb); modbus_free(mb); return 0; }
int main(int argc, char *argv[]) { modbus_t *ctx; struct timeval timeout; int ret, i, rc, ii; int nb_pointers; //unit16_t *tab_rp_registers; uint16_t regs[MODBUS_MAX_READ_REGISTERS] = {0}; char regs2[MODBUS_MAX_READ_REGISTERS]={0}; FILE *fp = NULL; int err, rows, cols; if(argc != 5){ printf("INsufficient argument"); return -1; } err = opendb(); if(err) { /*Database is not open*/ return err; } ctx = modbus_new_rtu(MODBUS_SERIAL_DEV, MODBUS_SERIAL_BAUDRATE, MODBUS_SERIAL_PARITY, MODBUS_SERIAL_DATABITS, MODBUS_SERIAL_STOPBITS); if (ctx == NULL) { fprintf(stderr, "Unable to create the libmodbus context\n"); exit(-1); } i = modbus_rtu_get_serial_mode(ctx); if( i == MODBUS_RTU_RS232) { printf("Serial mode = RS232\n"); ret = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232); if(ret < 0) fprintf(stderr, "modbus_rtu_set_serial_mode() error: %s\n", strerror(errno)); } else if(i == MODBUS_RTU_RS485) { printf("Serial mode = RS485\n"); ret = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485); if(ret < 0) fprintf(stderr, "modbus_rtu_set_serial_mode() error: %s\n", strerror(errno)); } else { printf("Serial mode = RS485\n"); ret = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485); if(ret < 0) fprintf(stderr, "modbus_rtu_set_serial_mode() error: %s\n", strerror(errno)); } /* set slave device ID */ modbus_set_slave(ctx, strtol(argv[2], NULL, 10)); /* Debug mode */ modbus_set_debug(ctx, MODBUS_DEBUG); if (modbus_connect(ctx) == -1) { fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); modbus_free(ctx); return -1; } /* Allocate and initialize the memory to store the registers */ /* nb_points = (UT_REGISTERS_NB > UT_INPUT_REGISTERS_NB) ? UT_REGISTERS_NB : UT_INPUT_REGISTERS_NB; tab_rp_registers = (uint16_t *) malloc(nb_points * sizeof(uint16_t)); memset(tab_rp_registers, 0, nb_points * sizeof(uint16_t)); */ /* write data in test.txt */ fp = fopen("test.txt", "w"); if(fp == NULL) { printf("fail to open file!\n"); return -1; } rc = modbus_read_registers(ctx, strtol(argv[3], NULL, 16), strtol("1", NULL, 10), regs); if (rc < 0) { printf("1234\n"); fprintf(stderr, "%s\n", modbus_strerror(errno)); } else { printf("HOLDING REGISTERS:\n"); for (ii=0; ii < rc; ii++) { sprintf(regs2, "%d", regs[ii]); fputs(regs2, fp); fputs("\n", fp); printf("[%d]=%d\n", ii, regs[ii]); sql_write2(argv[1], argv[2], argv[3], regs2, argv[4]); } if( mysql_query(dp, query)) { fprintf(stderr, "%s\n", mysql_error(dp)); } qp = mysql_store_result(dp); mysql_free_result(qp); mysql_close(dp); } fclose(fp); /* Close the connection */ modbus_close(ctx); modbus_free(ctx); return 0; }
int main(int argc, char *argv[]) { modbus_t *diris; int code; char errmsg[255]; FILE *f_lock; uint16_t tab_reg[64]; int i; int debug=0; if (argc==1) { fprintf(stderr,"Usage: %s <reg>\n", argv[0]); exit(1); } /* Lock file */ srandom(time(NULL)); i=0; f_lock=fopen("/var/run/modbus.lck","r"); while (i < 4 && f_lock>0) { fclose(f_lock); usleep(500000*random()%10); i++; f_lock=fopen("/var/run/modbus.lck","r"); } if (i==4) { fprintf(stderr, "Lock timeout\n"); exit(1); } if (f_lock<0) { f_lock=fopen("/var/run/modbus.lck","a"); fputs("modbus",f_lock); fclose(f_lock); } /* Open Serial Device */ diris=modbus_new_rtu("/dev/ttyUSB0", 9600, 'O', 8, 1); if (diris == NULL) { fprintf(stderr, "Unable to create the libmodbus context\n"); unlink("/var/run/modbus.lck"); return 1; } /* Prepare to connect to Slave */ code=modbus_set_slave(diris, 5); if(code <0) { perror(errmsg); fprintf(stderr,"Set slave error: %s\n",errmsg); unlink("/var/run/modbus.lck"); return 1; } if (debug) modbus_set_debug(diris, 1); if (debug) { /* Check Serial Mode */ code=modbus_rtu_get_serial_mode(diris); if (code=MODBUS_RTU_RS485) { printf("Mode: RS485\n"); } else { printf("Mode: RS232\n"); } } if (debug) { /* Check RTS Mode */ code=modbus_rtu_get_rts(diris); switch(code) { case MODBUS_RTU_RTS_NONE: printf("RTS: None\n"); break; case MODBUS_RTU_RTS_UP: printf("RTS: Up\n"); break; case MODBUS_RTU_RTS_DOWN: printf("RTS: Down\n"); break; default: printf("RTS: Unknown\n"); } printf("RTS: %d\n", code); } /* Change RTS Mode */ modbus_rtu_set_rts(diris, MODBUS_RTU_RTS_UP); if (debug) { code=modbus_rtu_get_rts(diris); switch(code) { case MODBUS_RTU_RTS_NONE: printf("RTS: None\n"); break; case MODBUS_RTU_RTS_UP: printf("RTS: Up\n"); break; case MODBUS_RTU_RTS_DOWN: printf("RTS: Down\n"); break; default: printf("RTS: Unknown\n"); } printf("RTS: %d\n", code); } /* Initiate connect (nothing to do in serial mode) */ if (modbus_connect(diris) == -1) { fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); modbus_free(diris); unlink("/var/run/modbus.lck"); return -1; } if (debug) {printf("Connect OK\n");} /* Do the read */ if (debug) { printf("Reading %s\n", argv[1]); } /* int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); */ code = modbus_read_registers(diris, atoi(argv[1]), 2, tab_reg); if (code == -1) { fprintf(stderr, "%s\n", modbus_strerror(errno)); modbus_close(diris); modbus_free(diris); unlink("/var/run/modbus.lck"); return -1; } /* Display Value returned */ /*for (i=0; i < code; i++) { printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]); } */ if (code==2) { printf("%d\n", tab_reg[1]); } /*printf("Reset IMax\n"); code=modbus_write_register(diris, 1024, 1); if (code == -1) { fprintf(stderr, "%s\n", modbus_strerror(errno)); modbus_close(diris); modbus_free(diris); return -1; }*/ /* Close */ modbus_close(diris); modbus_free(diris); unlink("/var/run/modbus.lck"); return 0; }