Modbus TCP Client write holding registers
-
@jsulm How do I do that?
When I declare my function in *.h file :
void wr_redy();
And I will create definition this function outside my run() function , I do not have acces to variables defined in run()...
@Damian7546 If you want to connect a lambda to a signal then do it properly:
connect(this, ClientMachine1::holdRegArrayChanged, this, wr_redy);
wr_redy is NOT a member of your class, so simply do not prefix it with your class name.
-
@Damian7546 If you want to connect a lambda to a signal then do it properly:
connect(this, ClientMachine1::holdRegArrayChanged, this, wr_redy);
wr_redy is NOT a member of your class, so simply do not prefix it with your class name.
@jsulm said in Modbus TCP Client write holding registers:
@Damian7546 If you want to connect a lambda to a signal then do it properly:
connect(this, ClientMachine1::holdRegArrayChanged, this, wr_redy);
wr_redy is NOT a member of your class, so simply do not prefix it with your class name.
Right
-
@jsulm Unfortunetly my write function still doesn't work:/
auto wr_redy = [&](){ for(int i=0; i < m_holdRegArray.count(); i++){ qDebug() << "count: " << i; wr.setValue(i, m_holdRegArray[i]); } };
The application was crash when it
wr.setValue(i, m_holdRegArray[i]);
is called... -
@jsulm Unfortunetly my write function still doesn't work:/
auto wr_redy = [&](){ for(int i=0; i < m_holdRegArray.count(); i++){ qDebug() << "count: " << i; wr.setValue(i, m_holdRegArray[i]); } };
The application was crash when it
wr.setValue(i, m_holdRegArray[i]);
is called...@Damian7546 said in Modbus TCP Client write holding registers:
The application was crash when
So, did you use debugger to see why it crashes?
What is wr? -
@jsulm When I have status: "ModbusTCPClient is disconnected" my app crash when I try write registers..
-
@jsulm When I have status: "ModbusTCPClient is disconnected" my app crash when I try write registers..
@Damian7546 Then don't write registers if there is no connection...
-
@Damian7546 Then don't write registers if there is no connection...
@jsulm I was wrong, sometimes app was crash when I try write value. I get message like below :
QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread QObject: Cannot create children for a parent that is in a different thread. (Parent is QModbusTcpClient(0x504f8fc), parent's thread is ClientTicketMach(0x1215a30), current thread is QThread(0x11c0b28) QObject::startTimer: Timers cannot be started from another thread Error Modbus TCP CLient read: QModbusDevice::TimeoutError QObject::killTimer: Timers cannot be stopped from another thread
-
@jsulm I was wrong, sometimes app was crash when I try write value. I get message like below :
QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread QObject: Cannot create children for a parent that is in a different thread. (Parent is QModbusTcpClient(0x504f8fc), parent's thread is ClientTicketMach(0x1215a30), current thread is QThread(0x11c0b28) QObject::startTimer: Timers cannot be started from another thread Error Modbus TCP CLient read: QModbusDevice::TimeoutError QObject::killTimer: Timers cannot be stopped from another thread
@Damian7546 As all these errors tell you: do the threading properly!
-
This post is deleted!
-
This post is deleted!
-
@Damian7546 As all these errors tell you: do the threading properly!
@jsulm said in Modbus TCP Client write holding registers:
@Damian7546 As all these errors tell you: do the threading properly!
Can you explain me ?
-
@jsulm said in Modbus TCP Client write holding registers:
@Damian7546 As all these errors tell you: do the threading properly!
Can you explain me ?
@Damian7546 Look:
QObject: Cannot create children for a parent that is in a different thread. (Parent is QModbusTcpClient(0x504f8fc), parent's thread is ClientTicketMach(0x1215a30), current thread is QThread(0x11c0b28)
It seems like your QModbusTcpClient is used in different threads. Please analyse your code to see how you're using it.
I already mentioned in this thread that threads should only be used if really necessary.
-
This post is deleted!
-
@jsulm This connect declared in
run()
function:
connect(this, &ClientTicketMach::holdRegArrayChanged,wr_redy);
runwr_redy
in other threadss..:/Do you have any idea how run
wr_redy
in my thread by change values in holdRegArray? -
@jsulm Now I use Modbus TCP Client without threads and everything works.