Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
28 Aug 2021 13:16 #219000
by Grotius
Replied by Grotius on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
Hi,
Hmm. Are you using c++ compiler in Qt? I suspect it's a Qt config thing.
Maybe try to clone the updated repository again? You run Linux-pro and did the skynet install?
Hmm. Are you using c++ compiler in Qt? I suspect it's a Qt config thing.
Maybe try to clone the updated repository again? You run Linux-pro and did the skynet install?
Please Log in or Create an account to join the conversation.
30 Aug 2021 20:31 #219188
by udoS
Replied by udoS on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
@GrotiusI told you what happened installing the Linux-Pro. So I installed my basic.Debian Buster 4.9.0-19 Kernel PREEMPTOSADL 5.0.21-rt16Installed LogicLab PLC with EtherCAT.Installed CodeLite for Plugin dev.Installed LinuxCNC-dev 2.9Installed Qtcreator 4.8 with Qt 5.12.4 and 5.15.2Now running Qt-Lcnc-nexT HMIGetting now the axis pos cmd from linuxcnc directly into the plc.Now I need more of the parameter addresses from the nml commands.I have those you got in your Qt-hmi so I continue with them but at the end I want to run without the HAL. So I need the complete Set.
I wish Reinhard could help with that. Seems he is really deep into it. His Code is there but its all Spanish Village to me. LOL.
I wish Reinhard could help with that. Seems he is really deep into it. His Code is there but its all Spanish Village to me. LOL.
Please Log in or Create an account to join the conversation.
30 Aug 2021 20:58 #219190
by Grotius
Replied by Grotius on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
Hi UdoS,
Ok. Reinhard suggested to do the nml stuff. His app is working now, see other thread.
But i don't know how far Reinhard is with the actual coding of the nml interface. Problably he has to port some
stuff from java to c++, but i don't know.
It's a matter of day's when his code is available for you i suggest.
* His Code is there but its all Spanish Village to me.
When it's there we can take a look at it.
But for you at the moment, if you do right mouse click in qt on a "nml symbol" and you follow the "symbol under cursor"
you can retrieve a lot info. Try it. I use it a lot when programming opencascade.
Ok. Reinhard suggested to do the nml stuff. His app is working now, see other thread.
But i don't know how far Reinhard is with the actual coding of the nml interface. Problably he has to port some
stuff from java to c++, but i don't know.
It's a matter of day's when his code is available for you i suggest.
* His Code is there but its all Spanish Village to me.
When it's there we can take a look at it.
But for you at the moment, if you do right mouse click in qt on a "nml symbol" and you follow the "symbol under cursor"
you can retrieve a lot info. Try it. I use it a lot when programming opencascade.
Please Log in or Create an account to join the conversation.
31 Aug 2021 08:03 #219228
by udoS
Replied by udoS on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
@Grotius
Yes, I'm aware of that. Finding the stuff in Qt.
How can we find the pins from the cnc automatically just like the HAL does, only in c/c++.
Isn't that what it all comes down to. ? Only that instead of the HAL it would be the PLC_Plugin.
Best rgds
Yes, I'm aware of that. Finding the stuff in Qt.
How can we find the pins from the cnc automatically just like the HAL does, only in c/c++.
Isn't that what it all comes down to. ? Only that instead of the HAL it would be the PLC_Plugin.
Best rgds
Please Log in or Create an account to join the conversation.
31 Aug 2021 14:19 #219251
by Grotius
Replied by Grotius on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
Hi Udo,
* How can we find the pins from the cnc automatically just like the HAL does, only in c/c++.
I looked at that, but there's no universal for loop that can do that at once for the whole content of nml.
The hal infrastructure has only a few datatypes and has already index functions that print content values.
I think you have to build the index function yourself. It's a boring task, but like the example below,
it's just a matter of time until you get there and have all values indexed.
Prints :
* How can we find the pins from the cnc automatically just like the HAL does, only in c/c++.
I looked at that, but there's no universal for loop that can do that at once for the whole content of nml.
The hal infrastructure has only a few datatypes and has already index functions that print content values.
I think you have to build the index function yourself. It's a boring task, but like the example below,
it's just a matter of time until you get there and have all values indexed.
std::string nmlfile="/opt/linuxcnc/configs/common/linuxcnc.nml";
const char *cstr = nmlfile.c_str();
// Command channel
RCS_CMD_CHANNEL *c = new RCS_CMD_CHANNEL(emcFormat, "emcCommand", "xemc", cstr);
EMC_TASK_SET_STATE state;
state.state=EMC_TASK_STATE_ENUM(EMC_TASK_STATE_ON);
c->write(&state);
EMC_TASK_SET_MODE mode;
mode.mode=EMC_TASK_MODE_AUTO;
c->write(&mode);
// Status channel
RCS_STAT_CHANNEL *status = new RCS_STAT_CHANNEL(emcFormat, "emcStatus", "xemc", cstr);
EMC_STAT *emcStatus = static_cast<EMC_STAT*>(status->get_address());
std::cout<<"distance to go:"<<emcStatus->motion.traj.distance_to_go<<std::endl;
EmcPose pose=emcStatus->motion.traj.dtg;
std::cout<<"pose.a:"<<pose.a<<std::endl;
std::cout<<"lube state:"<<emcStatus->io.lube.state<<std::endl;
std::cout<<"current line:"<<emcStatus->task.currentLine<<std::endl;
std::cout<<"spindle speed:"<<emcStatus->motion.spindle->speed<<std::endl;
EMC_TASK_STAT *task = static_cast<EMC_TASK_STAT*>(status->get_address());
// task->
EMC_IO_STAT *io = static_cast<EMC_IO_STAT*>(status->get_address());
// io->tool.toolTableCurrent
EMC_TOOL_STAT *toolstatus = static_cast< EMC_TOOL_STAT*>(status->get_address());
Prints :
distance to go:0
pose.a:0
lube state:0
current line:0
spindle speed:0
Please Log in or Create an account to join the conversation.
31 Aug 2021 14:55 #219257
by Reinhard
Replied by Reinhard on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
Hi guys,
sorry, but I have to disappoint you. NML does not work that way.
NML is far from behaviour of any well known shared memory.
I don't know why, but clients don't get access to shared memory buffer. Instead each client receives its own static copy of the shared memory buffer.
So if you're interested in status update, you first have the backend ask to do a copy. Then you can read out "your" copy of status buffer.
If you want a gui to react on data changes, you have to do another copy at the client side. With the copy you can decide, whether data has changed or not. So the boring truth of nml: data gets copied on backend and then on frontend again.
@udoS
whats the sense of wanting an index function for nml status members?
I did that in the interface layer for JCNCScreen. I have a dictionary of all ValueModels accessible by name.
So i.e. to query relative postion you do something like "dict[xRel].getValue()"
or even better:
using event system, just connect the valuemodel with a dro or whatever widget you like to.
sorry, but I have to disappoint you. NML does not work that way.
NML is far from behaviour of any well known shared memory.
I don't know why, but clients don't get access to shared memory buffer. Instead each client receives its own static copy of the shared memory buffer.
So if you're interested in status update, you first have the backend ask to do a copy. Then you can read out "your" copy of status buffer.
If you want a gui to react on data changes, you have to do another copy at the client side. With the copy you can decide, whether data has changed or not. So the boring truth of nml: data gets copied on backend and then on frontend again.
@udoS
whats the sense of wanting an index function for nml status members?
I did that in the interface layer for JCNCScreen. I have a dictionary of all ValueModels accessible by name.
So i.e. to query relative postion you do something like "dict[xRel].getValue()"
or even better:
using event system, just connect the valuemodel with a dro or whatever widget you like to.
Please Log in or Create an account to join the conversation.
31 Aug 2021 18:38 #219270
by Grotius
Replied by Grotius on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
Hi Reinhard,
Last week i tested Udo's app. When the app loads the nml is created. (once)
Then in the program loop it updates the dro values without any problems.
It does not copy any data forward's and backward's. It's just showing the lcnc values as expected.
Last week i tested Udo's app. When the app loads the nml is created. (once)
Then in the program loop it updates the dro values without any problems.
It does not copy any data forward's and backward's. It's just showing the lcnc values as expected.
Please Log in or Create an account to join the conversation.
31 Aug 2021 20:36 #219286
by udoS
Replied by udoS on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
@ Grotius; Reinhard;
Hi to both of you.
I don't really know how it works but from Grotius Qt-C-HMI I just figured and tried.
What I understand now is that you need to open a channel only once and then you can poll all the values that are in the dictionary of that channel. You just need to know the path to a particular value.
That's what I'm looking for.
Which channel contains what parameters and where are they buried. LOL.
Best rgds
Hi to both of you.
I don't really know how it works but from Grotius Qt-C-HMI I just figured and tried.
What I understand now is that you need to open a channel only once and then you can poll all the values that are in the dictionary of that channel. You just need to know the path to a particular value.
That's what I'm looking for.
Which channel contains what parameters and where are they buried. LOL.
Best rgds
Please Log in or Create an account to join the conversation.
01 Sep 2021 12:11 - 01 Sep 2021 12:19 #219329
by udoS
Replied by udoS on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
@Grotius@Reinhard
Now here are the Values for X, Y, Z from Lcnc --> nml --> plc . Puuhhh.
Do you know how to return the feedback to the cnc over a iml-cmd.
Now here are the Values for X, Y, Z from Lcnc --> nml --> plc . Puuhhh.
Do you know how to return the feedback to the cnc over a iml-cmd.
Last edit: 01 Sep 2021 12:19 by udoS.
Please Log in or Create an account to join the conversation.
01 Sep 2021 12:49 #219331
by Reinhard
Replied by Reinhard on topic Building new Full Qt c/c++ HMI (incl. nml and EtherCAT )
Sure, that you don't use statuschannel->peek() ?It does not copy any data forward's and backward's.
Please Log in or Create an account to join the conversation.
Time to create page: 0.085 seconds