@bkt ... nothings appens because (after start linuxcnc from terminal ...)

**********************************************************
* Current Directory = /home/bkt/linuxcnc-dev/configs/sim/axis
*
**********************************************************
* BufferName = emcCommand
* BufferType = 0
* ProcessName = emc
* Configuration File =
/home/bkt/linuxcnc-dev/configs/sim/axis/emc.nml                       /*
write emc.nml or linuxcnc.nml seems the same things but file is different
... not know why  */
* CMS Status = -3 (CMS_INTERNAL_ACCESS_ERROR: An error occured during an
internal access function. )
* Recent errors repeated:

CMS:(emcCommand) Message size of 9288674231451648 exceeds maximum of 8120



* BufferLine: B emcCommand            SHMEM   localhost       8192    0
  0       1       16 1001 TCP=5005 xdr
* ProcessLine: P emc           emcCommand      LOCAL   localhost       RW
   0       1.0     0       0
* error_type = 5 (NML_INTERNAL_CMS_ERROR)
************************************************************

libnml/cms/cms_in.cc 708:* CMS:(emcCommand) Message size of
9288674231451649 exceeds maximum of 8120*


or in QtDro terminal:

libnml/cms/cms_xup.cc 303: CMS_XDR_UPDATER: Can't rewind because
current_stream is NULL.
libnml/cms/cms_xup.cc 279: CMS_XDR_UPDATER: Required pointer is NULL.
libnml/cms/cms_xup.cc 279: CMS_XDR_UPDATER: Required pointer is NULL.



*Seems stream is null so it impossible "write" sometings .... but *

emcStatus->motion.traj.position.tran.x;
emcStatus->motion.traj.position.tran.y;
emcStatus->motion.traj.position.tran.z;

Work great in any case ....

bkt

Il giorno mar 31 dic 2019 alle ore 09:10 theman whosoldtheworld <
bleachk...@gmail.com> ha scritto:

> @N thanks Nicklas .... with your suggest I understand a little better the
> code ... these is myne renewed (and more complete than the last one ... I
> have not entered the tedious and useless functions to understand the
> problem here ... but if I can finish the job for January (when my holidays
> are over) I will post the complete project on the forum:
>
> using namespace std;
>
> static RCS_CMD_CHANNEL *emcCommandBuffer = 0; /* I've declared
> 'emcCommandBuffer' as "static" ... seems these is not right */
> static RCS_STAT_CHANNEL *emcStatusBuffer = 0;
> EMC_STAT *emcStatus = 0;
> static NML *emcErrorBuffer = 0;
> static char error_string[NML_INTERNAL_CMS_ERROR] = "";
> static int emcCommandSerialNumber = 0;
>
> int counter = 0;
>
> void QtDro::run()
> {
>     double thX = 0;
>     double thY = 0;
>     double thZ = 0;
>     double thA = 0;
>     double thB = 0;
>     double thC = 0;
>     double thU = 0;
>     double thV = 0;
>     double thW = 0;
>
>     QTextStream(stdout) <<  "First run  function" << endl;
>
>
>     const char *nmlfile =
> "/home/bkt/linuxcnc-dev/configs/common/linuxcnc.nml";
>     RCS_STAT_CHANNEL *stat = new RCS_STAT_CHANNEL(emcFormat, "emcStatus",
> "xemc", nmlfile);
>     RCS_CMD_CHANNEL *cmd = new RCS_CMD_CHANNEL(emcFormat, "emcCommand",
> "xemc", nmlfile, 0);
>     NML *error = new NML(emcFormat, "emcError", "xemc", nmlfile);
>
>     while(1)
>     {
>         if((stat->peek() != EMC_STAT_TYPE) || (!stat->valid()))
>         {
>             QTextStream(stdout) <<  "while    these program NOT run  " <<
> endl;
>             break;
>         }
>         else
>         {
>             EMC_STAT *emcStatus =
> static_cast<EMC_STAT*>(stat->get_address());
>
>             if ((thX != emcStatus->motion.traj.position.tran.x) || (thY !=
> emcStatus->motion.traj.position.tran.y) || (thZ !=
> emcStatus->motion.traj.position.tran.z))
>                 {
>                 thX = emcStatus->motion.traj.position.tran.x;
>                 thY = emcStatus->motion.traj.position.tran.y;
>                 thZ = emcStatus->motion.traj.position.tran.z;
>                 thA = 0;
>                 thB = 0;
>                 thC = 0;
>                 thU = 0;
>                 thV = 0;
>                 thW = 0;
>                 emit thXYZABCDEF(thX, thY, thZ, thA, thB, thC, thU, thV,
> thW);
>             }
>
>            if(counter>=50 && counter<51)
>             {
>
>                  QTextStream(stdout) <<  "state_msg try zone" << endl;
>                  EMC_TASK_SET_STATE  state_msg;
>                  QTextStream(stdout) <<  "spy 1" << endl;
>                  state_msg.state = EMC_TASK_STATE_OFF;
>                  QTextStream(stdout) <<  "spy 2" << endl;
>                  state_msg.serial_number = ++emcCommandSerialNumber;
>                  QTextStream(stdout) <<  "actual value of state_msg: " <<
>  state_msg.state << endl;
>                  QTextStream(stdout) <<  "these steps seems right .. now
> try to write" << endl;
>                  cmd->write(&state_msg);
>                 // emcCommandBuffer->write(&state_msg);  /* these NOT work
> because not declare 'emcCommandBuffer' with automatic memory allocation
> with macro "new"  */
>                  QTextStream(stdout) <<  "just write on emcCommandBuffer"
> << endl;
>
>             }
>
>             counter++;
>        }
>
>
>          this->msleep(100);
>     }
> }
>
>
> At these point terminal reply to my good news:
>
> bkt@bkt:~/linuxcnc-dev$ QtDro
> argc:    1 argv:    0x7ffd462f8b98 nmlfile:
> First  Application Start ok
> First run  function
> state_msg try zone
> spy 1
> spy 2
> spy 3
> actual value of state_msg: 3
> these steps seems right .. now try to write
> just write on emcCommandBuffer
>
> But on Axis Gui SIM that I use as test gui, nothing change ....
>
> how can I understand if Lcnc actually had my command? (Axis is active and on 
> on .... after the EMC_TASK_STATE_OFF command I expected the button toggle to 
> go OFF ... maybe launch the wrong command?)
>
> regards
>
>
> Il giorno lun 30 dic 2019 alle ore 19:08 N <nicklas.karlsso...@gmail.com>
> ha scritto:
>
>> >   @ N  *for sure problem is related to gcc version and qt *.... because
>> if
>> > run other ubuntu 18.04 with gcc 5.x all work like my develop pc that
>> > contains gcc 5.5.
>>
>> It could also be a coincidence, at least my myself quite often make wrong
>> conclusion then similar errors happen so I use to double checkt.
>>
>> > Any how now I have other problem related previous post .....
>> >
>> >           if(counter>=50 && counter<51)
>> >             {
>> >                  QTextStream(stdout) <<  "state_msg try zone" << endl;
>> >                  EMC_TASK_SET_STATE *state_msg = (EMC_TASK_SET_STATE
>> > *)malloc(sizeof (EMC_TASK_SET_STATE));
>> >                  QTextStream(stdout) <<  "spy 1" << endl;
>> >                 // state_msg->clear();  /* these not work because  try
>> to
>> > clear empty array? */
>> >                  QTextStream(stdout) <<  "spy 2" << endl;
>> >                  state_msg->state = EMC_TASK_STATE_OFF;
>> >                  QTextStream(stdout) <<  "spy 3" << endl;
>> >                  state_msg->serial_number = ++emcCommandSerialNumber;
>> >                  QTextStream(stdout) <<  "actual value of state_msg: "
>> <<
>> >  state_msg->state << endl;
>> >                  QTextStream(stdout) <<  "these steps seems right .. now
>> > try to write" << endl;
>> >                  emcCommandBuffer->write(state_msg);
>> >                  QTextStream(stdout) <<  "just write on
>> emcCommandBuffer"
>> > << endl;
>> >                  free(state_msg);
>> >
>> >             }
>> >
>> >             counter++;
>>
>> Most often use C and more seldom C++ so I might make misstake without
>> compiling it for myself first. Would suggest this code to get rid of
>> malloc(...) function and initialize variable then declared and as a const
>> if not supposed to change.
>>
>> if(counter>=50 && counter<51)
>> {
>>   QTextStream(stdout) <<  "state_msg try zone" << endl;
>>   EMC_TASK_SET_STATE state_msg();
>>
>>   QTextStream(stdout) <<  "spy 1" << endl;
>>   state_msg->clear();  /* these not work because  try to clear empty
>> array? */
>>   QTextStream(stdout) <<  "spy 2" << endl;
>>   state_msg->state = EMC_TASK_STATE_OFF;
>>   QTextStream(stdout) <<  "spy 3" << endl;
>>   state_msg->serial_number = ++emcCommandSerialNumber;
>>   QTextStream(stdout) <<  "actual value of state_msg: " <<
>>   state_msg->state << endl;
>>   QTextStream(stdout) <<  "these steps seems right .. now try to write"
>> << endl;
>>   emcCommandBuffer->write(state_msg);
>>   QTextStream(stdout) <<  "just write on emcCommandBuffer" << endl;
>> }
>> counter++;
>>
>> If I get it correct your code does not work because you allocate memory
>> but does not create object, C++ have a constructor for this which I
>> conclude from Linuxcnc code have no parameters.
>>   EMC_TASK_SET_STATE *state_msg = new EMC_TASK_SET_STATE();
>>   ...
>>   free(state_msg)
>>
>> As you free memory at bottom I would suggest to use local variable as in
>> first example above, then you will not forget to free memory, it also make
>> possible stack like memory allocation.
>>   EMC_TASK_SET_STATE state_msg();
>>
>>
>> I use Eclipse then finding declarations is easier even though it does not
>> work well for C++ or if Linuxcnc code is the problem. Codeblocks might be
>> another good option if it works.
>>
>>
>> Nicklas Karlsson
>>
>>
>> _______________________________________________
>> Emc-developers mailing list
>> Emc-developers@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/emc-developers
>>
>

_______________________________________________
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers

Reply via email to