📄 main.cpp
字号:
//---------------------------------------------------------------------------
#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 + -