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

📄 drive.cpp

📁 用VC++开发的一个数控加工的仿真程序。此程序能根据NC代码仿真生成加工轨迹
💻 CPP
字号:
#include "stdafx.h"
#include "conio.h"
#include "drive.h"

//wreg1(轴指定,数据) ----------写入寄存器1设定
void wreg1(int axis,int wdata)
{
    _outpw(BASE_ADR+WR0,(axis<<8)+0xf);    //轴指定
	_outpw(BASE_ADR+WR1,wdata);
}
//wreg2 (轴指定,数据)----------写入寄存器2设定
void wreg2(int axis,int wdata)
{
    _outpw(BASE_ADR+WR0,(axis<<8)+0xf);    //轴指定
	_outpw(BASE_ADR+WR2,wdata);
}
//wreg3 (轴指定,数据)----------写入寄存器3设定
void wreg3(int axis,int wdata)
{
    _outpw(BASE_ADR+WR0,(axis<<8)+0xf);    //轴指定
	_outpw(BASE_ADR+WR3,wdata);
}

//command(轴指定,命令编码)-------命令写入
void command(int axis,int cmd)
{
	_outpw(BASE_ADR+WR0,(axis<<8)+cmd);
}
//range(轴指定,数据)------------范围(R)设定
void range(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x00);
}
//acac(轴指定,数据)  ------------变化率(K)设定
void acac(int axis,int wdata)
{
	_outpw(BASE_ADR+WR6,wdata);
	_outpw(BASE_ADR+WR0,(axis<<8+0x01));
}
//acc(轴指定,数据)   ------------加/减速(A)设定
void acc(int axis,int wdata)
{
	_outpw(BASE_ADR+WR6,wdata);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x02);
}
//dec(轴指定,数据)   ------------减速度(D)设定
void dec(int axis,int wdata)
{
	_outpw(BASE_ADR+WR6,wdata);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x03);
}
//startv(轴指定,数据)------------初始速度(SV)设定
void startv(int axis,int wdata)
{
	_outpw(BASE_ADR+WR6,wdata);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x04);
}
//speed(轴指定,数据) ------------驱动速度(V)设定
void speed(int axis,int wdata)
{
	_outpw(BASE_ADR+WR6,wdata);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x05);
}
//pulse(轴指定,数据) ------------输出脉冲数/终点(P)设定
void pulse(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x06);
}
//decp(轴指定,数据)  ------------手动减速点(DP)设定
void decp(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x07);
}
//center(轴指定,数据)------------圆弧中心点(C)设定
void center(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x08);
}
//lp(轴指定,数据)   ------------逻辑位置计数器(LP)设定
void lp(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x09);
}
//ep(轴指定,数据)   ------------逻辑位置计数器(EP)设定
void ep(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x0a);
}
//compp(轴指定,数据) ------------COMP+(CP)设定
void compp(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x0b);
}
//compm(轴指定,数据) ------------COMP+(CM)设定
void compm(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x0c);
}
//accofst(轴指定,数据)-----------加速计数器偏移(AO)设定
void accofst(int axis,long wdata)
{
	_outpw(BASE_ADR+WR7,(wdata>>16)&0xffff);
	_outpw(BASE_ADR+WR6,wdata&0xffff);
	_outpw(BASE_ADR+WR0,(axis<<8)+0x0d);
}
//readlp(轴指定)      ------------逻辑位置计数器数值(LP)读出
long readlp(int axis)
{
	long a;long d6;long d7;
	_outpw(BASE_ADR+WR0,(axis<<8)&0x10);
	d6=_inpw(BASE_ADR+RR6);
	d7=_inpw(BASE_ADR+RR7);
	a=d6+(d7<<16);
	return(a);
}
//readep(轴指定)      ------------逻辑位置计数器数值(EP)读出
long readep(int axis)
{
	long a;long d6;long d7;
	_outpw(BASE_ADR+WR0,(axis<<8)&0x11);
	d6=_inpw(BASE_ADR+RR6);	
	d7=_inpw(BASE_ADR+RR7);
	a=d6+(d7<<16);
	return(a);
}
//wata(轴指定)        ------------等驱动结束
void wait(int axis)
{
	while(_inpw(BASE_ADR+RR0)&axis);
}
//next_wait()          ------------等连续插补下一个数据设定
void next_wait(void)
{
	while((_inpw(BASE_ADR+RR0)&0x0200)==0);
}
//bp_wait()            ------------等BP插补下一个数据设定
void bp_wait(void)
{
	while((_inpw(BASE_ADR+RR0)&0x6000)==0x6000);
}

⌨️ 快捷键说明

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