I add that the code is just a test to make an interface communicate in qt
and c ++ via nml to linuxcnc. That's all. It is for learning.

Il giorno sab 21 mar 2020 alle ore 19:06 theman whosoldtheworld <
[email protected]> ha scritto:

> 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