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;
}

 

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