modbus_set_slave(modbus_t *ctx, int slave)函数详解 libmodbus库详解系列

翻译自:http://libmodbus.org/docs/v3.1.4/modbus_set_slave.html

名称

modbus_set_slave - 设定从机号码(slave number)

函数

int modbus_set_slave(modbus_t *ctx, int slave);

描述

modbus_set_slave() 用于设定libmodbus环境中的slave数值。

此动作取决于网络和设备的角色。

RTU

定义远程设备的从站ID以在主站模式下进行通信,或将内部从站ID设置为从站模式。 根据协议,Modbus设备只接受包含了其从机号码(slave number)或特殊广播号码的消息。

TCP

如果消息必须到达串行网络上的设备,则仅在TCP中需要从站号码。 某些不兼容的设备或软件(例如modpoll)使用从站ID作为单元标识符,这是不正确的(参见Modbus Messaging Implementation Guide v1.0b的第23页)没有从站值,故障的远程设备或软件会丢弃请求! 特殊值MODBUS_TCP_SLAVE(0xFF)可用于TCP模式以恢复默认值。

广播地址是 MODBUS_BROADCAST_ADDRESS 。 当您希望网络中的所有Modbus设备都收到请求时,必须使用此特殊值。

返回值

成功则返回0,否者返回-1并将errno设定为下面定义的值之一。

错误

EINVAL

slave number 为空。

例子

modbus_t *ctx;

ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);
if (ctx == NULL) {
    fprintf(stderr, "Unable to create the libmodbus context\n");
    return -1;
}

rc = modbus_set_slave(ctx, YOUR_DEVICE_ID);
if (rc == -1) {
    fprintf(stderr, "Invalid slave ID\n");
    modbus_free(ctx);
    return -1;
}

if (modbus_connect(ctx) == -1) {
    fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
    modbus_free(ctx);
    return -1;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章