int setRTUmode(void){
int success;

success = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
if (success == 0) {
#ifdef DEBUG_ENABLED
  qWarning() << "RTU set succesfully";
#endif
    return 1;
}else {
#ifdef DEBUG_ENABLED
 fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
#endif

    return 0;
    }
}
Beispiel #2
0
modbus_t* modbus_new_rtu_device(const char* serial_port, int slaveAddr)
{
	modbus_t* context = modbus_new_rtu(serial_port, 
		modbus_baud_rate_device_water_cool_boxihua,
		modbus_parity_device_water_cool_boxihua,
		modbus_databit_device_water_cool_boxihua,
		modbus_stopbit_device_water_cool_boxihua);

	if (context == NULL)
	{
		my_log_error("modbus_new_rtu");
		return NULL;
	}

#ifdef HAVE_DECL_TIOCSRS485
	if (modbus_rtu_set_serial_mode(context, modbus_serial_mode_device_water_cool_boxihua) < 0)
	{
		my_log_error("modbus_rtu_set_serial_mode");
		return NULL;
	}

#endif 

	if (modbus_set_slave(context, slaveAddr) < 0)
	{
		my_log_error("modbus_set_slave");
		return NULL;
	}

	if (modbus_connect(context) < 0)
	{
		my_log_error("modbus_connect");
		return NULL;
	}

	return context;
}
Beispiel #3
0
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), &regs[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;
}
Beispiel #4
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;
}
Beispiel #5
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;
}