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
