The references to the post on Linuxcnc that Andy made are only indications
to study ....

The lack of comments is because I did the tests during breakfast and lunch,
which is an important moment for test prices on things I have to learn to
understand. It is not a code to be shared with third parties .... In any
case, the test is a positive state apart from the fact that there is no
semaphore of the signals .... in fact if you try that tet and repeatedly
press the button and stop to perform estop-on and estop-off, it will surely
happen that the communication channel is interrupted because before making
a new call you must always wait for the approval and the refreshing is not
so fast .... dro's refreshing is instead quick to simulate with #include
<QOpenGLWidget> the movement of the machine almost in real time.

In any case the next time before posting the code I will make sure it is
clean and commented.


any how next time

Il giorno sab 21 mar 2020 alle ore 18:32 John Dammeyer <
[email protected]> ha scritto:

> I'm not sure anymore exactly what you code was supposed to so but a
> proportional font program embedded into an email is really hard to follow.
>
> I've been using Codewright since it came out back in about 1991 but as I
> understand it now Microsoft's Visual Studio Code can do this too.  There
> may be something in Linux that can do this too.
>
> I cleaned up your program a bit to make it more readable for me and
> attached it as a pdf.  Both the .h and .cpp are in the one doc.
>
> John
>
>
> > -----Original Message-----
> > From: theman whosoldtheworld [mailto:[email protected]]
> > Sent: March-21-20 4:50 AM
> > To: Enhanced Machine Controller (EMC)
> > Subject: Re: [Emc-users] about NML - RCS_CMD_CHANNEL/EMC_CMD_MSG -
> EMC_AUX_ESTOP_ON
> >
> > Sorry, i've very little time to control my mail .. these code perform the
> > command, need to write the right "world" inside your nml file and launch
> > lcnc first and only after qtDroModified ... my thread is about right
> using
> > of nml inside qt c++ interfaces program ... the post suggested from Andy
> is
> > for interfacing labview with nml ... a little different, but sometime
> same
> > basic problem ....
> >
> > #ifndef QTDRO_H
> > #define QTDRO_H
> >
> > #include <stdio.h>
> > #include <string.h>
> > #include <stdlib.h>
> > #include <signal.h>
> > #include <unistd.h>
> > #include <ctype.h>
> > #include <math.h>
> > #include <sys/types.h>
> > #include <inttypes.h>
> > #include <iostream>
> > #include <cstdlib>
> >
> > #include <qapplication.h>
> > #include <qlabel.h>
> > #include <qpushbutton.h>
> > #include <qlcdnumber.h>
> > #include <qtimer.h>
> > #include <QApplication>
> > #include "qstring.h"
> > #include "qlayout.h"
> > #include "qfont.h"
> > #include <QTime>
> > #include <QTimer>
> > #include <QDebug>
> > #include <QThread>
> > #include <QTextStream>
> > #include <QTextStreamFunction>
> > #include <QTextStreamManipulator>
> >
> >
> > #include <QApplication>
> > #include <QtDebug>
> > #include <stdlib.h>
> > #include <unistd.h>
> > #include <sys/io.h>
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <inttypes.h>
> > #include <math.h>
> > #include <QtCore>
> > #include <QThread>
> > #include <QWidget>
> > #include <sys/types.h>
> > #include <QTimer>
> > #include <QDateTime>
> > #include <QTextStream>
> > #include <QFile>
> > #include <QProcess>
> > #include <iostream>
> > #include <sstream>
> > #include <QDial>
> > #include <QWidget>
> > #include <QPushButton>
> > #include <QDir>
> > #include <QComboBox>
> > #include <QStringList>
> > #include <QByteArray>
> > #include <QAbstractButton>
> > #include <QTime>
> > #include <QDate>
> > #include <QDateEdit>
> > #include <QTimeEdit>
> > #include <QGraphicsView>
> > #include <QGraphicsSceneHoverEvent>
> > #include <QGraphicsItem>
> > #include <QGraphicsScene>
> > #include <QPolygon>
> > #include <QPolygonF>
> > #include <QDoubleValidator>
> > #include <QIntValidator>
> > #include <QMessageBox>
> > #include <QPixmap>
> > #include <sqlite3.h>
> > //#include <QtSql/QSql>
> > #include <QtSql/QSqlDatabase>
> > #include <QtSql/QSqlDriver>
> > #include <QtSql/QSqlDriverPlugin>
> > #include <QtSql/QSqlError>
> > #include <QtSql/QSqlField>
> > #include <QtSql/QSqlIndex>
> > #include <QtSql/QSqlRelationalTableModel>
> > #include <QtSql/QSqlQuery>
> > #include <QtSql/QSqlQueryModel>
> > #include <QtSql/QSqlRecord>
> > #include <QtSql/QSqlRelation>
> > #include <QtSql/QSqlTableModel>
> > #include <QtSql/QtSqlDepends>
> > #include <QtSql/QtSqlVersion>
> > //#include <QtSerialBus>
> > #include <QtSql/QSqlRelationalDelegate>
> > #include <QtNetwork/QNetworkAccessManager>
> > #include <QIODevice>
> > #include <QMessageBox>
> > #include <QFont>
> > #include <QAbstractButton>
> > #include <QDebug>
> >
> > #include "include/cmd_msg.hh"
> > #include "include/stat_msg.hh"
> > #include "include/emc_nml.hh"
> > #include <stat_msg.hh>
> > #include <cmd_msg.hh>
> > #include <nml.hh>
> > #include "rcs.hh"               // etime()
> > #include "emc.hh"               // EMC NML
> > #include "include/emcglb.h"             // EMC_NMLFILE,
> TRAJ_MAX_VELOCITY,
> > TOOL_TABLE_FILE
> > #include "include/emccfg.h"             // DEFAULT_TRAJ_MAX_VELOCITY
> > #include "inifile.hh"           // INIFILE
> >
> >
> >
> > /*extern  int  argc;
> > extern char **argv;*/
> >
> >
> >
> >
> >
> > class QtDro: public QThread
> > {
> >         Q_OBJECT
> > public:
> >     explicit QtDro(QObject *parent = 0, bool b = false);
> >     void run();
> >
> >     // if Stop = true, the thread will break
> >     // out of the loop, and will be disposed
> >
> >     ~QtDro();
> >
> >         bool Stop;
> >
> >
> >
> > public slots:
> >     void thEme(bool emeCmd);
> >     void thOn(bool onCmd);
> >    // int emcCommandSend(RCS_CMD_MSG & cmd);
> >  /*   int emcCommandSend(RCS_CMD_MSG & cmd)
> >     {
> >         // write command
> >         if (emcCommandBuffer->write(&cmd)) {
> >             return -1;
> >         }
> >         emcCommandSerialNumber = cmd.serial_number;
> >         return 0;
> >     }*/
> >
> >
> > signals:
> >     void thXYZABCDEF (double x, double y, double z, double a,  double b,
> > double c, double u, double v, double w);
> >
> > private:
> >     int acTh;
> >     char avTh;
> >     char state_msg[4096];
> >
> >
> >
> > protected:
> >
> >
> >
> >
> > };
> >
> >
> > #endif // QTDRO_H
> >
> >
> >
> >
> **************************************************************************************
> >
> >
> > #include "QtDro.h"
> >
> >
> >
> > using namespace std;
> >
> > // the NML channels to the EMC task
> > RCS_CMD_CHANNEL *emcCommandBuffer ;
> > RCS_STAT_CHANNEL *emcStatusBuffer ;
> > EMC_STAT *emcStatus;
> > EMC_CMD_MSG *emcCmd;
> >
> > // the NML channel for errors
> > static NML *emcErrorBuffer = 0;
> > static char error_string[NML_INTERNAL_CMS_ERROR] = "";
> >
> > // the current command numbers, set up updateStatus(), used in main()
> > static int emcCommandSerialNumber = 0;
> >
> > int counter = 0;
> >
> >
> > QtDro::QtDro (QObject *parent, bool b) :
> >     QThread(parent), Stop(b)
> > {
> >
> > }
> >
> > QtDro::~QtDro()
> > {
> >   //  inifile.Close();
> >     this->Stop;
> >
> > }
> >
> >
> > 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/sim/axis/emc.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);
> >     NML *error = new NML(emcFormat, "emcError", "xemc", nmlfile);
> >
> >     //************ try to connect to EMC cmd
> >   /*  if (emcCommandBuffer == 0) {
> >         emcCommandBuffer =  new RCS_CMD_CHANNEL(emcFormat, "emcCommand",
> > "xemc", nmlfile, 0);
> >         QTextStream(stdout) <<  "cmd buffer is valid  " << endl;
> >     if (!emcCommandBuffer->valid()) {
> >         delete emcCommandBuffer;
> >         emcCommandBuffer = 0;
> >         QTextStream(stdout) <<  "cmd buffer is NOT valid  " << endl;
> >         return;
> >     }
> > }*/
> >
> >
> >
> >     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());
> >             //EMC_CMD_MSG *emcCmd =
> > static_cast<EMC_CMD_MSG*>(cmd->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>=80 && counter<81)
> >             {
> >
> >                  QTextStream(stdout) <<  "state_msg try zone" << endl;
> >                  EMC_TASK_SET_STATE  state_msg;
> >                 // EMC_TASK_PLAN_PAUSE emc_task_plan_pause_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(&emc_task_plan_pause_msg);
> >                  cmd->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 = 0;
> >
> >             }
> >
> >             counter++;
> >
> >         }
> >
> >          this->msleep(100);
> >     }
> >
> >
> > }
> >
> >
> >
> > Regards
> >
> > Il giorno dom 23 feb 2020 alle ore 18:44 John Dammeyer <
> > [email protected]> ha scritto:
> >
> > > Sorry,
> > > Still confused.  I'm not even sure which code you are talking about.
> > > John
> > >
> > >
> > > > -----Original Message-----
> > > > From: N [mailto:[email protected]]
> > > > Sent: February-23-20 4:00 AM
> > > > To: Enhanced Machine Controller (EMC)
> > > > Subject: Re: [Emc-users] about NML - RCS_CMD_CHANNEL/EMC_CMD_MSG
> > > > - EMC_AUX_ESTOP_ON
> > > >
> > > > If you figure out what code do and comment is missing you could add
> it.
> > > Or
> > > > you made agreement not to comment his code?
> > > >
> > > > > Not sure I understand what you meant here.
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: N [mailto:[email protected]]
> > > > > > Sent: February-23-20 1:12 AM
> > > > > > To: Enhanced Machine Controller (EMC)
> > > > > > Subject: Re: [Emc-users] about NML -
> > > > RCS_CMD_CHANNEL/EMC_CMD_MSG
> > > > > > - EMC_AUX_ESTOP_ON
> > > > > >
> > > > > > > @ John Dammeyer
> > > > > > >
> > > > > > > I'm quite sure that labview project at least work great ....
> the
> > > difficult
> > > > > > > is study lcnc code (write in a good way but not rich of comment
> > > ... on
> > > > the
> > > > > > > other hand, I agree not to comment too much on his code)
> > > > > >
> > > > > > Something adding some comments to code then you read it?
> > > > > >
> > > > > >
> > > > > > _______________________________________________
> > > > > > Emc-users mailing list
> > > > > > [email protected]
> > > > > > https://lists.sourceforge.net/lists/listinfo/emc-users
> > > > >
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > > Emc-users mailing list
> > > > > [email protected]
> > > > > https://lists.sourceforge.net/lists/listinfo/emc-users
> > > >
> > > >
> > > > _______________________________________________
> > > > Emc-users mailing list
> > > > [email protected]
> > > > https://lists.sourceforge.net/lists/listinfo/emc-users
> > >
> > >
> > >
> > > _______________________________________________
> > > Emc-users mailing list
> > > [email protected]
> > > https://lists.sourceforge.net/lists/listinfo/emc-users
> > >
> >
> > _______________________________________________
> > Emc-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/emc-users
> _______________________________________________
> Emc-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/emc-users
>

_______________________________________________
Emc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to