⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 一个雕刻机的源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#include <math.h>
#include <time.h>
#pragma hdrstop

#include "warning.h"
#include "home.h"
#include "main.h"
#include "path.h"
#include "sio_util.h"
#include "nmccom.h"
#include "picservo.h"
#include "globals.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
//Defines:
#define MAXTOOLS 20

#define PH_PWM 170

//Control modes
#define SERVO_OFF -1      //servos turned off
#define IDLE 0            //motors idle
#define PATH 1            //path mode with path still loading
#define PATH_END 2        //tail end of already loaded path
#define RAPID 3           //trapezoidal move in progress
#define JOG 4             //jog in progress
#define JOG_STOP 5		  //decel to a stop from a jog
#define JOGXP 6			  //jog in X plus direction
#define JOGXM 7			  //jog in X minus direction
#define JOGYP 8			  //jog in Y plus direction
#define JOGYM 9			  //jog in Y minus direction
#define JOGZP 10		  //jog in Z plus direction
#define JOGZM 11		  //jog in Z minus direction

//G-Code file limits
#define MAXCHARS 2500000
#define MAXLINES 100000

//Methods for defining an arc
#define ARC_NONE 	0
#define ARC_R 		1
#define ARC_IJK 	2

//Feedhold states
#define NO_HOLD 0
#define PATHHOLD 1
#define RAPIDHOLD 2

//---------------------------------------------------------------------------
//System control Globals:
int nummod = 0;
char comport[10];
byte xaxis, yaxis, zaxis;
int nbuf, pfreq;
float xacc, yacc, zacc;
float xscale, yscale, zscale;
float xmaxvel, ymaxvel, zmaxvel, maxfr;
float xmin, ymin, zmin;
float xmax, ymax, zmax;
float xorg, yorg, zorg;
GAINVECT xgain, ygain, zgain;
float feedrate = 0.05;  //default feedrate in units/sec
float accel;
float maxang;
int rapidoverride = 100;
int froverride = 100;
byte xpadv, ypadv, zpadv;
byte xpoff, ypoff, zpoff;
float toollen[MAXTOOLS];
int toolnum = 0;
int toollennum = 0;
int toolchanged = 0;
int dwellcounts = 0;
int opmode = SERVO_OFF;
int rungcode = 0;  		//flag to start interpreting G-Code
int feedhold = 0;
int contouring = 0;
int controlsenabled = 0;
float prevrx, prevry, prevrz;
int mill_homed = 0;
char formatstr[20] = "%8.4f";


//G-Code storage globals:
char gcode[MAXCHARS];    //gcode buffer
int line[MAXLINES];		//index to individual lines
int numlines = 0;
int curline;

//Interpreter globals:
int pathappendmode = 0;  //says if we are in the middle of loading segments
float arcnormx = 0.0;    //normal vector for arcs
float arcnormy = 0.0;
float arcnormz = 1.0;
float gx = 0.0;          //interpreter x, y, z command position
float gy = 0.0;
float gz = 0.0;
float oldgx = 0.0;          //prev x, y, z command position
float oldgy = 0.0;
float oldgz = 0.0;
float cmdx = 0.0;   		//current pic-servo command positions
float cmdy = 0.0;
float cmdz = 0.0;
int arcmode = ARC_NONE;
float arci = 0.0;		 //arc center coordinates
float arcj = 0.0;
float arck = 0.0;
float arcr = 0.0;
float dwelltime = 0.0;   	//dwell parameter
float fripm;		     	//feedrate in inches per minute
int mcode = -1;             //current m code
int g0code = -1;            //current group 0 gcode
int g1code = -1;            //current group 1 gcode
int oldg1code = -1;         //previous group 1 gcode
int g2code = -1;            //current group 2 gcode
int g8code = -1;            //current group 8 gcode
int ptoolnum = 0;			//pending tool number
int ptoollennum = 0; 		//pending tool length number
int dgz = 0;				//flags a change in the z coord. in the cur. line

//---------------------------------------------------------------------------
//Usage: n = GetInt(FooEdit);
int GetInt(TEdit *PEdit)
{
int i;
char msgstr[40];

PEdit->GetTextBuf(msgstr, 40);
sscanf(msgstr,"%d", &i);
return(i);
}
//---------------------------------------------------------------------------
float GetFloat(TEdit *PEdit)
{
float x;
char msgstr[40];

PEdit->GetTextBuf(msgstr, 40);
sscanf(msgstr,"%f", &x);
return(x);
}
//---------------------------------------------------------------------------
//Returns -1 if PSCNC.TLL not found, -2 if not all parameters set, 0 on success
int ReadToolFile()
{
int i;
char param[20];  //tool name
FILE *toolfile;


if ( (toolfile = fopen("pscnc.tll", "r")) == NULL )
  {
  SimpleMsgBox("Could not find PSCNC.TLL");
  return(-1);
  }

for (i=0; i<MAXTOOLS; i++)
  if ( fscanf(toolfile,"%s%f",param, &(toollen[i])) != 2 )
    {
    fclose(toolfile);
    return(-2);
    }

fclose(toolfile);
return(0);
}
//---------------------------------------------------------------------------
//Returns -1 if PSCNC.INI not found, -2 if not all parameters set, 0 on success
int ReadIniFile()
{
__int64 parambits;
int scanres;
char param[20];  //parameter name
FILE *inifile;

parambits = 0;   //say no parameters have been set

if ( (inifile = fopen("pscnc.ini", "r")) == NULL )
  {
  SimpleMsgBox("Could not find PSCNC.INI");
  return(-1);
  }

while (1)
  {
  scanres = fscanf(inifile, "%s", param);     //read in a parameter name
  if (scanres == EOF  || scanres == 0) break;

  if (!strcmp(param, "xaxis:"))
    {
    if ( fscanf(inifile, "%d", &xaxis) != 1 ) break;
    parambits |= 0x0000000000000001;
    }
  else if (!strcmp(param, "yaxis:"))
    {
    if ( fscanf(inifile, "%d", &yaxis) != 1 ) break;
    parambits |= 0x0000000000000002;
    }
  else if (!strcmp(param, "zaxis:"))
    {
    if ( fscanf(inifile, "%d", &zaxis) != 1 ) break;
    parambits |= 0x0000000000000004;
    }
  else if (!strcmp(param, "bufsize:"))
    {
    if ( fscanf(inifile, "%d", &nbuf) != 1 ) break;
    parambits |= 0x0000000000000008;
    }
  else if (!strcmp(param, "pfreq:"))
    {
    if ( fscanf(inifile, "%d", &pfreq) != 1 ) break;
    parambits |= 0x0000000000000010;
    }
  else if (!strcmp(param, "xscale:"))
    {
    if ( fscanf(inifile, "%f", &xscale) != 1 ) break;
    parambits |= 0x0000000000000020;
    }
  else if (!strcmp(param, "yscale:"))
    {
    if ( fscanf(inifile, "%f", &yscale) != 1 ) break;
    parambits |= 0x0000000000000040;
    }
  else if (!strcmp(param, "zscale:"))
    {
    if ( fscanf(inifile, "%f", &zscale) != 1 ) break;
    parambits |= 0x0000000000000080;
    }
  else if (!strcmp(param, "xaccel:"))
    {
    if ( fscanf(inifile, "%f", &xacc) != 1 ) break;
    parambits |= 0x0000000000000100;
    }
  else if (!strcmp(param, "yaccel:"))
    {
    if ( fscanf(inifile, "%f", &yacc) != 1 ) break;
    parambits |= 0x0000000000000200;
    }
  else if (!strcmp(param, "zaccel:"))
    {
    if ( fscanf(inifile, "%f", &zacc) != 1 ) break;
    parambits |= 0x0000000000000400;
    }
  else if (!strcmp(param, "xmaxvel:"))
    {
    if ( fscanf(inifile, "%f", &xmaxvel) != 1 ) break;
    parambits |= 0x0000000000000800;
    }
  else if (!strcmp(param, "ymaxvel:"))
    {
    if ( fscanf(inifile, "%f", &ymaxvel) != 1 ) break;
    parambits |= 0x0000000000001000;
    }
  else if (!strcmp(param, "zmaxvel:"))
    {
    if ( fscanf(inifile, "%f", &zmaxvel) != 1 ) break;
    parambits |= 0x0000000000002000;
    }
  else if (!strcmp(param, "xmin:"))
    {
    if ( fscanf(inifile, "%f", &xmin) != 1 ) break;
    parambits |= 0x0000000000004000;
    }
  else if (!strcmp(param, "ymin:"))
    {
    if ( fscanf(inifile, "%f", &ymin) != 1 ) break;
    parambits |= 0x0000000000008000;
    }
  else if (!strcmp(param, "zmin:"))
    {
    if ( fscanf(inifile, "%f", &zmin) != 1 ) break;
    parambits |= 0x0000000000010000;
    }
  else if (!strcmp(param, "xmax:"))
    {
    if ( fscanf(inifile, "%f", &xmax) != 1 ) break;
    parambits |= 0x0000000000020000;
    }
  else if (!strcmp(param, "ymax:"))
    {
    if ( fscanf(inifile, "%f", &ymax) != 1 ) break;
    parambits |= 0x0000000000040000;
    }
  else if (!strcmp(param, "zmax:"))
    {
    if ( fscanf(inifile, "%f", &zmax) != 1 ) break;
    parambits |= 0x0000000000080000;
    }

  else if (!strcmp(param, "xkp:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.kp)) != 1 ) break;
    parambits |= 0x0000000000100000;
    }
  else if (!strcmp(param, "xkd:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.kd)) != 1 ) break;
    parambits |= 0x0000000000200000;
    }
  else if (!strcmp(param, "xki:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.ki)) != 1 ) break;
    parambits |= 0x0000000000400000;
    }
  else if (!strcmp(param, "xil:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.il)) != 1 ) break;
    parambits |= 0x0000000000800000;
    }
  else if (!strcmp(param, "xol:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.ol)) != 1 ) break;
    parambits |= 0x0000000001000000;
    }
  else if (!strcmp(param, "xcl:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.cl)) != 1 ) break;
    parambits |= 0x0000000002000000;
    }
  else if (!strcmp(param, "xel:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.el)) != 1 ) break;
    parambits |= 0x0000000004000000;
    }
  else if (!strcmp(param, "xsr:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.sr)) != 1 ) break;
    parambits |= 0x0000000008000000;
    }
  else if (!strcmp(param, "xdc:"))
    {
    if ( fscanf(inifile, "%d", &(xgain.dc)) != 1 ) break;
    parambits |= 0x0000000010000000;
    }
  else if (!strcmp(param, "xpadv:"))
    {
    if ( fscanf(inifile, "%d", &xpadv) != 1 ) break;
    parambits |= 0x0000000020000000;
    }
  else if (!strcmp(param, "xpoff:"))
    {
    if ( fscanf(inifile, "%d", &xpoff) != 1 ) break;
    parambits |= 0x0000000040000000;
    }
  else if (!strcmp(param, "ykp:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.kp)) != 1 ) break;
    parambits |= 0x0000000080000000;
    }
  else if (!strcmp(param, "ykd:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.kd)) != 1 ) break;
    parambits |= 0x0000000100000000;
    }
  else if (!strcmp(param, "yki:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.ki)) != 1 ) break;
    parambits |= 0x0000000200000000;
    }
  else if (!strcmp(param, "yil:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.il)) != 1 ) break;
    parambits |= 0x0000000400000000;
    }
  else if (!strcmp(param, "yol:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.ol)) != 1 ) break;
    parambits |= 0x0000000800000000;
    }
  else if (!strcmp(param, "ycl:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.cl)) != 1 ) break;
    parambits |= 0x0000001000000000;
    }
  else if (!strcmp(param, "yel:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.el)) != 1 ) break;
    parambits |= 0x0000002000000000;
    }
  else if (!strcmp(param, "ysr:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.sr)) != 1 ) break;
    parambits |= 0x0000004000000000;
    }
  else if (!strcmp(param, "ydc:"))
    {
    if ( fscanf(inifile, "%d", &(ygain.dc)) != 1 ) break;
    parambits |= 0x0000008000000000;
    }
  else if (!strcmp(param, "ypadv:"))
    {
    if ( fscanf(inifile, "%d", &ypadv) != 1 ) break;
    parambits |= 0x0000010000000000;
    }
  else if (!strcmp(param, "ypoff:"))
    {
    if ( fscanf(inifile, "%d", &ypoff) != 1 ) break;
    parambits |= 0x0000020040000000;
    }
  else if (!strcmp(param, "zkp:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.kp)) != 1 ) break;
    parambits |= 0x0000040000000000;
    }
  else if (!strcmp(param, "zkd:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.kd)) != 1 ) break;
    parambits |= 0x0000080000000000;
    }
  else if (!strcmp(param, "zki:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.ki)) != 1 ) break;
    parambits |= 0x0000100000000000;
    }
  else if (!strcmp(param, "zil:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.il)) != 1 ) break;
    parambits |= 0x0000200000000000;
    }
  else if (!strcmp(param, "zol:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.ol)) != 1 ) break;
    parambits |= 0x0000400000000000;
    }
  else if (!strcmp(param, "zcl:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.cl)) != 1 ) break;
    parambits |= 0x0000800000000000;
    }
  else if (!strcmp(param, "zel:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.el)) != 1 ) break;
    parambits |= 0x0001000000000000;
    }
  else if (!strcmp(param, "zsr:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.sr)) != 1 ) break;
    parambits |= 0x0002000000000000;
    }
  else if (!strcmp(param, "zdc:"))
    {
    if ( fscanf(inifile, "%d", &(zgain.dc)) != 1 ) break;
    parambits |= 0x0004000000000000;
    }
  else if (!strcmp(param, "zpadv:"))
    {
    if ( fscanf(inifile, "%d", &zpadv) != 1 ) break;
    parambits |= 0x0008000000000000;
    }
  else if (!strcmp(param, "zpoff:"))
    {
    if ( fscanf(inifile, "%d", &zpoff) != 1 ) break;
    parambits |= 0x0010000000000000;
    }
  else if (!strcmp(param, "maxang:"))
    {
    if ( fscanf(inifile, "%f", &maxang) != 1 ) break;
    parambits |= 0x0020000000000000;
    }
  else if (!strcmp(param, "comport:"))
    {
    if ( fscanf(inifile, "%s", &comport) != 1 ) break;
    parambits |= 0x0040000000000000;
    }
  } //END while 1

fclose(inifile);

if (parambits != 0x007FFFFFFFFFFFFF)
  return(-2);  //not all parameters set

return(0);
}
//---------------------------------------------------------------------------
void EnableMotionControls()
{
MainForm->XPlusButton->Enabled = true;
MainForm->YPlusButton->Enabled = true;
MainForm->ZPlusButton->Enabled = true;
MainForm->XMinusButton->Enabled = true;
MainForm->YMinusButton->Enabled = true;
MainForm->ZMinusButton->Enabled = true;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -