You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The version of libmodbus in the Windows system: V3.1.1
The version of libmodbus in the Ubuntu system: V3.0.6
I recently encountered some issues while developing using the libmodbus library. The development scenario is that I need to use the libmodbus library as a communication protocol and use the QT framework to monitor power devices in real-time. The program runs on Jetson Nano.
I found that the instruction reading program I wrote can be implemented on the Windows and can successfully read the parameters of the power supply; However, when porting this program to run on Ubuntu, it cannot effectively read the parameters of the power supply, Error code prompt when I run the program:"failed to receive confirmation: Invalid argument".
I use modbus_send_raw_request() to send read instructions and modbus_receive_confirmation() to receive returned information. However, it is the same program that cannot be transferred from Windows to Ubuntu. Is this caused by different versions of the library?
In addition, I also found that the reason why the program can run on Windows but cannot run on Ubuntu may be related to the version, as the formal parameters of modbus_set_response_timeout() may also be different due to different versions?
Tips: modbus_set_response_timeout() have three arguments in Windows(libmodbus V3.1.1),but it only have two arguments in Ubuntu(libmodbus V3.0.6)
Here is my program for writing and reading commands:
modbus_t* Light::writeBytes()
{
uint8_t m_sendData[6] = {0x01,0x03,0x00,0x00,0x00,0x08};
m_sendData[0] = 0x01;
modbus_t *m_modbus = NULL;
m_modbus = modbus_new_rtu("COM5", 9600, 'N', 8, 1);
if (0 == modbus_rtu_get_serial_mode(m_modbus)){
modbus_rtu_set_serial_mode(m_modbus, MODBUS_RTU_RS232);
std::cout << "serial is RS232" << std::endl;
} else {
modbus_rtu_set_serial_mode(m_modbus, MODBUS_RTU_RS485);
std::cout<<"serial is RS485"<<std::endl;
}
struct timeval response_timeout;
response_timeout.tv_sec = 1;
response_timeout.tv_usec = 2000*1000;
modbus_set_response_timeout(m_modbus,response_timeout.tv_sec,response_timeout.tv_usec);
modbus_set_slave(m_modbus, 1);
if(modbus_connect(m_modbus) == -1) {
std::cout<<"connection failed: "<<modbus_strerror(errno)<<std::endl;
}
printf("-------------send-----------------\n");
int s = modbus_send_raw_request(m_modbus, m_sendData, 6);
if(s==-1)
{
std::cout<<"failed to send raw request: "<<modbus_strerror(errno)<<std::endl;
}
else
{
std::cout<<"successfully sent raw request with "<< s <<" bytes"<<std::endl;
}
return m_modbus;
}
void Light::readBytes(modbus_t *m_modbus)
{
uint8_t rsp[MODBUS_RTU_MAX_ADU_LENGTH];
int rc = modbus_receive_confirmation(m_modbus, rsp);
printf("-------------receive-----------------\n");
if(rc==-1)
{
std::cout<<"failed to receive confirmation: "<<modbus_strerror(errno)<<std::endl;
}else
{
std::cout<<"successfully receive confirmation with "<< rc <<" bytes"<<std::endl;
PowerInfoReslove(rsp);
PrintPowerInfo();
}
modbus_close(m_modbus);
modbus_free(m_modbus);
}
The text was updated successfully, but these errors were encountered:
The version of libmodbus in the Windows system: V3.1.1
The version of libmodbus in the Ubuntu system: V3.0.6
I recently encountered some issues while developing using the libmodbus library. The development scenario is that I need to use the libmodbus library as a communication protocol and use the QT framework to monitor power devices in real-time. The program runs on Jetson Nano.
I found that the instruction reading program I wrote can be implemented on the Windows and can successfully read the parameters of the power supply; However, when porting this program to run on Ubuntu, it cannot effectively read the parameters of the power supply, Error code prompt when I run the program:"failed to receive confirmation: Invalid argument".
I use modbus_send_raw_request() to send read instructions and modbus_receive_confirmation() to receive returned information. However, it is the same program that cannot be transferred from Windows to Ubuntu. Is this caused by different versions of the library?
In addition, I also found that the reason why the program can run on Windows but cannot run on Ubuntu may be related to the version, as the formal parameters of modbus_set_response_timeout() may also be different due to different versions?
Tips: modbus_set_response_timeout() have three arguments in Windows(libmodbus V3.1.1),but it only have two arguments in Ubuntu(libmodbus V3.0.6)
Here is my program for writing and reading commands:
The text was updated successfully, but these errors were encountered: