• Linux c 开发19 libmodbus显示浮点数示例


    1、使用MThing模拟数据
    image
    注意:
    (1)箭头处一定留空,不然只有本机能收到数据,一开始误以为这是绑定监听IP,被坑了好长时间。
    会提示:error connection reset by peer: read
    (2)如果端口配置错误会提示:
    [Errno 9] Bad file descriptor
    (3)另外设置处于选中状态时也会无法获取数据。

    2、模拟一个浮点数
    image
    3、代码如下

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <errno.h>
    #include "./include/modbus.h"
    #include <unistd.h>
    int main(void)
    {
    	modbus_t *ctx;
    	uint16_t tab_reg[32] = {0};
    
    	ctx = modbus_new_tcp("192.168.3.118", 502); //由于是tcp client 连接,在同一程序中相同的端口可以连接多次
    	modbus_set_debug(ctx, TRUE);				//设置debug模式
    	modbus_set_slave(ctx, 1);		    //从机地址
    	modbus_connect(ctx);
    	modbus_set_response_timeout(ctx, 50, 10000000);
        	modbus_set_error_recovery(ctx,
                                  MODBUS_ERROR_RECOVERY_LINK | MODBUS_ERROR_RECOVERY_PROTOCOL);
    	
    	while (1)
    	{
    		//printf("test\n");
    		int regs = modbus_read_registers(ctx, 100, 2, tab_reg);
    		//printf("test1\n");
    		// regs=modbus_write_register(mb,0x00,94);
    		float f=modbus_get_float_dcba(tab_reg);	
    		printf("%d %d %d %d %d %f\n", regs, tab_reg[0], tab_reg[1], tab_reg[2], tab_reg[3],f);
    		sleep(3);
    	}
    
    	modbus_close(ctx);
    	modbus_free(ctx);
    	return 0;
    }
    

    4、运行结果
    image

  • 相关阅读:
    STL中set求交集、并集、差集的方法
    Vijos 1308 埃及分数(迭代加深搜索)
    POJ 1161 Walls(Floyd , 建图)
    UVa 1601 万圣节后的早晨
    dp之完全背包
    dp之取数字问题
    dp之最长公共子序列
    枚举排列
    poj 3187 暴力枚举
    poj 2431 优先队列,贪心
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/15907008.html
Copyright © 2020-2023  润新知