当前位置: 首页 > wzjs >正文

找事情做的网站wordpress分类目录没有内容

找事情做的网站,wordpress分类目录没有内容,网站建设上,网站建设的多少钱文件结构 LinuxCNC的主要代码结构如下所示。 srcemccanterp(命令解释器)ini(操作的配置文件)kinematics(运动规划)motion(运动控制器)nml_intf(NML实现)rs274ngc(g代码解释器)task(任务控制器)tp(轨迹规划)usr_intf(GUI接口)hal(硬件抽象层)libnml(rcslib实现) canterp(命令解…

文件结构

LinuxCNC的主要代码结构如下所示。

srcemccanterp(命令解释器)ini(操作的配置文件)kinematics(运动规划)motion(运动控制器)nml_intf(NML实现)rs274ngc(g代码解释器)task(任务控制器)tp(轨迹规划)usr_intf(GUI接口)hal(硬件抽象层)libnml(rcslib实现)

canterp(命令解释器)

语法解析, 读取, 执行等, 对刀具信息、 主轴转速、 开始、 停止等信息进行判断和执行工作

ini(操作的配置文件)

  • emcIniFile
  • iniaxis (轴类型,轴单元,最大最小位置限值,误差限值,最大速度,加速度,加加速度等)
  • inihal (定义HAL中的新的管脚,包括了各轴中的INI参数管脚,以及TRAJ中的INI参数管脚)
  • inijoint
  • inispindle
  • initraj

kinematics(运动规划)

包含了不同的运动控制模块(五轴、 三轴、 六轴等等)、插补以及速度控制的轨迹规划文件

motion(运动控制器)

通过用户空间获取命令, 执行不同的动作, 这些命令结构体为 emcmotCommand->command, 而全部动作值都保存为 EMCMOT_COMMAND 在 motion.h 中。

nml_intf(NML实现)

对于 NML 消息机制传递和更新的定义

task(任务控制器)

emctask (EMC_TASK 类模式和状态管理, 主要是针对 G 代码和 M 代码)

emctaskmain (周期性的调用 emcTaskPlan() 和 emcTaskExecute())

emcTaskPlan:读取指令,根据模式和状态决定下一步动作,根据 EMC_TASK_STATE、EMC_TASK_MODE、EMC_TASK_INTERP 执行动作。

emcTaskExecute:等运动和IO状态,如果执行结束,获取下一个执行指令,根据 EMC_TASK_EXEC 执行状态停止、等待、获取下一个执行指令。

数据结构

cmd_code_t (motion.h):命令类型
EMCMOT_ABORT = 1,	/* abort all motion */
EMCMOT_ENABLE,		/* enable servos for active joints */
EMCMOT_DISABLE,		/* disable servos for active joints */
EMCMOT_PAUSE,		/* pause motion */
EMCMOT_RESUME,		/* resume motion */
……cmd_status_t (motion.h):状态类型
EMCMOT_COMMAND_OK = 0,			/* cmd honored */
EMCMOT_COMMAND_UNKNOWN_COMMAND,	/* cmd not understood */
EMCMOT_COMMAND_INVALID_COMMAND,	/* cmd can't be handled now */
EMCMOT_COMMAND_INVALID_PARAMS,	/* bad cmd params */
EMCMOT_COMMAND_BAD_EXEC			/* error trying to initiate */emc.hh:NML数据类型
// types for EMC_TASK mode
enum class EMC_TASK_MODE {MANUAL = 1,AUTO = 2,MDI = 3
};// types for EMC_TASK state
enum class EMC_TASK_STATE {ESTOP = 1,ESTOP_RESET = 2,OFF = 3,ON = 4
};// types for EMC_TASK interpState
enum class EMC_TASK_INTERP {IDLE = 1,READING = 2,PAUSED = 3,WAITING = 4
};// types for EMC_TASK execState
enum class EMC_TASK_EXEC {ERROR = 1,DONE = 2,WAITING_FOR_MOTION = 3,WAITING_FOR_MOTION_QUEUE = 4,WAITING_FOR_IO = 5,WAITING_FOR_MOTION_AND_IO = 7,WAITING_FOR_DELAY = 8,WAITING_FOR_SYSTEM_CMD = 9,WAITING_FOR_SPINDLE_ORIENTED = 10
};

任务模式

EMC_TASK_MODE

  • MANUAL 手动模式

    直接通过控制面板上的按钮或旋钮来直接控制机床的动作。在这种模式下,操作者可以进行如移动轴、设置零点、测试刀具等基本操作。

  • AUTO 自动模式

    按照事先编写的加工程序自动完成一系列加工任务。只需要启动程序,机床就会按照既定的顺序和参数进行加工,直到整个加工过程结束。

  • MDI 手动数据输入(Manual Data Input)

    允许操作员直接通过控制面板上的键盘输入单个命令来控制机床的动作。这种模式主要用于执行简单的测试或调试任务,例如移动刀具到特定位置、检查机床状态或者进行短小的加工程序测试。

任务状态

EMC_TASK_STATE

  • STOP 停止

  • RESET 复位

  • OFF 关闭

  • ON 打开

命令类型

EMC_TASK_INTERP

  • 运动类型

    • 直线

    • 圆弧

    • 快速定位

    • 螺旋线

    • NURBS

    • 渐开线

    • ……

  • 参数设置

    • 速度

    • 约束速度

    • 加速度

    • 主轴开

    • 主轴关

    • 轴位置约束(限位)

    • 轴速度约束

    • 轴加速度约束

    • 主轴转速比率

    • 进给速度比率 

    • 快速进给速度比率

    • ……

  • 操作 

    • 停止

    • 电机使能

    • 电机失能

    • 开始

    • 暂停

    • 复位

业务逻辑

简单通俗地说,通过G代码解释器解析得到的指令和人机交互界面下发的指令构成指令队列,任务控制器通过判断允许任务模式、任务状态、命令状态对指令队列进行读取和执行。

g代码解析

rs274ngc_init() //初始化,读取rs274ngc.var和rs274ngc.tool_default文件,坐标,G模态组,M模态组以及其他G代码运行需要的状态量
rs274ngc_read() //读取G代码,然后进行语法和逻辑判断
rs274ngc_execute() //G代码执行

src/emc/rs274ngc

setup _setup (interp_internal.cc)	//NC文件解析后的数据
struct setup (interp_internal.hh)
{	CANON_MOTION_MODE control_mode; // 快速移动、插补DISTANCE_MODE distance_mode;  	// 绝对式、增量式double feed_rate;				// 进给速度int motion_mode;              	// G-code模式double origin_offset_x;      	// g5x x轴偏移double origin_offset_y;       	// g5x y轴偏移double origin_offset_z;       	// g5x z轴偏移#define CONTROLLING_BLOCK(s) ((s).blocks[(s).remap_level])#define EXECUTING_BLOCK(s)   ((s).blocks[0])
}(rs274ngc_interp.hh 声明)
class Interp : public InterpBase(rs274ngc_pre.cc 实现)
//初始化setup
int Interp::init()
//打开NC文件
int Interp::open(const char *filename){_setup.file_pointer = fopen(filename, "r");
}
//将NC文件/指令转换成setup/代码,检查语法与逻辑
int Interp::_read(const char *command){block_pointer eblock = &EXECUTING_BLOCK(_setup);read_status = read_text(command,_setup.file_pointer,_setup.linetext,_setup.blocktext, &_setup.line_length);parse_line;
}
//
int Interp::_execute(const char *command){block_pointer eblock = &EXECUTING_BLOCK(_setup);if (_setup.line_length != 0) { block_pointer cblock = &CONTROLLING_BLOCK(_setup);status = execute_block(cblock, &_setup);write_canon_state_tagwrite_state_tag //将setup写到StateTagstatus = read(0);  // int Interp::_read(const char *command)write_g_codes(eblock, &_setup);write_m_codes(eblock, &_setup);write_settings(&_setup);}
}     

canon两种实现,一个是emccanon,一个是saicanon。

src/emc/nml_intf/canon.hh

src/emc/task/emccanon

src/emc/sai/saicanon

NML通信

NML是一个代码开源的可用于多进程通信的库,采用共享内存管道结合的方式以C++代码实现的一个通信库。NML通信库具有的特性:

1、通过一个ACSII文本配置文件对通信进行配置,仅配置通信参数不需要修改程序。

2、拥有灵活的通信实现方式,队列,一对多,收发状态同步返回等。

3、远程进程可以实现像访问本地共享内存一样,实现和远程进程的数据通讯。

update() //用于将数据传输到共享内存中,是通信数据必须实现的方法。
MyMsgFormat() //通信的格式函数,这个函数在创建NML Msg对象的构造函数必须传入。

发布指令

emcTaskPlan:读取指令,根据模式和状态决定下一步动作,根据 EMC_TASK_STATE、EMC_TASK_MODE、EMC_TASK_INTERP 执行动作。

以下代码只截取自动挡模式介绍。

static RCS_CMD_CHANNEL *emcCommandBuffer = 0; //指令缓存区
static RCS_CMD_MSG *emcCommand = 0;	//指令指针
NML_INTERP_LIST interp_list; (interpl.cc)emcTaskPlan(emctaskmain.cc)case EMC_TASK_STATE::ON: //电机使能case EMC_TASK_MODE::AUTO: //自动挡case EMC_TASK_PLAN_EXECUTE_TYPE:emcTaskIssueCommand(emcCommand);case EMC_TRAJ_LINEAR_MOVE_TYPE: //直线emcTrajLinearMoveusrmotWriteEmcmotCommand(emcmot_command_t * c)case EMC_TASK_PLAN_RUN_TYPE:emcStatus->task.interpState = EMC_TASK_INTERP::READING;case EMC_TASK_PLAN_INIT_TYPE: //初始化,读取NC文件emcTaskPlanInit(emctask.cc) case EMC_TASK_PLAN_EXECUTE_TYPE:emcStatus->task.interpState = EMC_TASK_INTERP::READING;		emcTaskPlanExecutecase EMC_TASK_INTERP::READING: //预读readahead_reading //解析NC文件emcTaskPlanCommand((char *) &emcStatus->task.command);strcpy(cmd, interp.command(buf, LINELEN));

指令状态

emcTaskExecute:等运动和IO状态,如果执行结束,获取下一个执行指令,根据 EMC_TASK_EXEC 执行状态停止、等待、获取下一个执行指令。

static RCS_STAT_CHANNEL *emcStatusBuffer = 0; //状态缓存区
EMC_STAT *emcStatus = 0;
emcTaskCommand; //存储待发送的命令消息emcTaskExecute(emctaskmain.cc)case EMC_TASK_EXEC::ERROR://错误case EMC_TASK_EXEC::DONE: //执行完成if(不存在 emcTaskCommand) emcTaskCommand = interp_list.get(); //获取新的指令if(emcStatus->motion.traj.queueFull 队列满了)emcStatus->task.execState = EMC_TASK_EXEC::WAITING_FOR_MOTION_QUEUE;elseemcTaskCheckPreconditionselse emcTaskCheckPostconditionscase EMC_TASK_EXEC::WAITING_FOR_MOTION_QUEUE://等待case EMC_TASK_EXEC::WAITING_FOR_MOTION:case EMC_TASK_EXEC::WAITING_FOR_IO:case EMC_TASK_EXEC::WAITING_FOR_MOTION_AND_IO:

参考资料

《LinuxCNC开放式 数控平台系统分析及应用》史步海 丁川 著

LINUXCNC源程序概略笔记

LinuxCNC学习(一)RS274NGC的使用

LinuxCNC学习(二)RS274NGC的源码分析

LinuxCNC学习(四)NML的学习

http://www.dtcms.com/wzjs/536844.html

相关文章:

  • 体育馆做网站公司企业网站建设找外包公司做
  • 网站首页html代码在哪it培训机构口碑排名
  • 南京制作网站培训学校建设明星网站的目的
  • dnf怎么做发卡网站达州网站建设公司
  • wordpress站点设置使用时间wordpress 建立后台默认用户
  • 上海建工网站网站seo系统
  • 网络维护网站美工正规的无锡网站建设
  • 国外建设网站首页千锋教育的it培训怎么样
  • 文章修改网站wordpress用思源黑体
  • 南京网站建设哪家好北京网站优化合作
  • 网站兼容所有浏览器国开机考网站界面设计
  • 上海最专业的网站建设公司排名摄影app
  • 制作一个网站怎么做app商店下载
  • 嘉定论坛网站建设建设网站的
  • 网站建设需要学习课程东莞哪里能学建设网站
  • 怎样弄一个自己的平台石家庄seo全网营销
  • 辉南网站建设网页设计与制作成品是啥样的
  • 国外有名的设计网站麦云短链接
  • 淘宝做首页热点的什么网站电商网站建设公司怎么样
  • 网上开店网站泉山网站开发
  • 象山县建设工程招投标网站wordpress菜单html5
  • 宣传网站怎么做的北京网站排名
  • 东莞做网站(信科网络)档案网站建设网页
  • 北京朝阳区建设工作办公网站win2003搭建php网站
  • 聊城集团网站建设费用做网站规避什么
  • 单位网站建设程序wordpress 数据优化
  • 食品营销型网站有成功案例的网站
  • 百度网站建设的意义最专业的网站设计
  • 网站的定位与功能php 企业网站模板
  • 甘肃住房城乡建设厅网站首页瀚钦科技网站建设