亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? iocontrol.cc

?? CNC 的開放碼,EMC2 V2.2.8版
?? CC
?? 第 1 頁 / 共 3 頁
字號:
/********************************************************************* Description: IoControl.cc*           Simply accepts NML messages sent to the IO controller*           outputs those to a HAL pin,*           and sends back a "Done" message.***  ENABLE logic:  this module exports three HAL pins related to ENABLE.*  The first is emc-enable-in.  It is an input from the HAL, when FALSE,*  EMC will go into the STOPPED state (regardless of the state of*  the other two pins).  When it goes TRUE, EMC will go into the*  ESTOP_RESET state (also known as READY).**  The second HAL pin is an output to the HAL.  It is controlled by*  the NML messages ESTOP_ON and ESTOP_OFF, which normally result from*  user actions at the GUI.  For the simplest system, loop user-enable-out *  back to emc-enable-in in the HAL.  The GUI controls user-enable-out, and EMC*  responds to that once it is looped back.**  If external ESTOP inputs are desired, they can be*  used in a classicladder rung, in series with user-enable-out.*  It will look like this:**  -----|UEO|-----|EEST|--+--|EEI|--+--(EEI)----*                         |         |*                         +--|URE|--+*  UEO=user-enable-out*  EEST=external ESTOP circuitry*  EEI=machine is enabled*  URE=user request enable**  This will work like this: EMC will be enabled (by EEI, emc-enabled-in),*  only if UEO, EEST and EEI are closed. *  If any of UEO (user requested stop) or EEST (external estop) have been*  opened, then EEI will open aswell.*  After restoring normal condition (UEO and EEST closed), an aditional*  URE (user-request-enable) is needed, this is either sent by the GUI*  (using the EMC_AUX_ESTOP_RESET NML message), or by a hardware button*  connected to the ladder driving URE.**  NML messages are sent usually from the user hitting F1 on the GUI.*  *   Derived from a work by Fred Proctor & Will Shackleford** Author:* License: GPL Version 2* System: Linux*    * Copyright (c) 2004 All rights reserved.** Last change: * $Revision: 1.45 $* $Author: cradek $* $Date: 2007/06/16 16:04:02 $********************************************************************/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <signal.h>#include "hal.h"		/* access to HAL functions/definitions */#include "rtapi.h"		/* rtapi_print_msg */#include "rcs.hh"		/* RCS_CMD_CHANNEL */#include "emc.hh"		/* EMC NML */#include "emc_nml.hh"#include "emcglb.h"		/* EMC_NMLFILE, EMC_INIFILE, TOOL_TABLE_FILE */#include "inifile.hh"		/* INIFILE */#include "initool.hh"		/* iniTool() */#include "nml_oi.hh"#include "timer.hh"#include "rcs_print.hh"static RCS_CMD_CHANNEL *emcioCommandBuffer = 0;static RCS_CMD_MSG *emcioCommand = 0;static RCS_STAT_CHANNEL *emcioStatusBuffer = 0;static EMC_IO_STAT emcioStatus;static NML *emcErrorBuffer = 0;struct iocontrol_str {    hal_bit_t *user_enable_out;	/* output, TRUE when EMC wants stop */    hal_bit_t *emc_enable_in;	/* input, TRUE on any external stop */    hal_bit_t *user_request_enable;	/* output, used to reset ENABLE latch */    hal_bit_t *coolant_mist;	/* coolant mist output pin */    hal_bit_t *coolant_flood;	/* coolant flood output pin */    hal_bit_t *lube;		/* lube output pin */    hal_bit_t *lube_level;	/* lube level input pin */    // the following pins are needed for toolchanging    //tool-prepare    hal_bit_t *tool_prepare;	/* output, pin that notifies HAL it needs to prepare a tool */    hal_s32_t *tool_prep_number;/* output, pin that holds the tool number to be prepared, only valid when tool-prepare=TRUE */    hal_s32_t *tool_number;     /* output, pin that holds the tool number currently in the spindle */    hal_bit_t *tool_prepared;	/* input, pin that notifies that the tool has been prepared */    //tool-change    hal_bit_t *tool_change;	/* output, notifies a tool-change should happen (emc should be in the tool-change position) */    hal_bit_t *tool_changed;	/* input, notifies tool has been changed */    // note: spindle control has been moved to motion} * iocontrol_data;			//pointer to the HAL-struct//static iocontrol_struct *iocontrol_data;	static int comp_id;				/* component ID *//********************************************************************** Description: emcIoNmlGet()*		Attempts to connect to NML buffers and set the relevant*		pointers.** Return Value: Zero on success or -1 if can not connect to a buffer.** Side Effects: None.** Called By: main()*********************************************************************/static int emcIoNmlGet(){    int retval = 0;    /* Try to connect to EMC IO command buffer */    if (emcioCommandBuffer == 0) {	emcioCommandBuffer =	    new RCS_CMD_CHANNEL(emcFormat, "toolCmd", "tool", EMC_NMLFILE);	if (!emcioCommandBuffer->valid()) {	    rtapi_print_msg(RTAPI_MSG_ERR,			    "emcToolCmd buffer not available\n");	    delete emcioCommandBuffer;	    emcioCommandBuffer = 0;	    retval = -1;	} else {	    /* Get our command data structure */	    emcioCommand = emcioCommandBuffer->get_address();	}    }    /* try to connect to EMC IO status buffer */    if (emcioStatusBuffer == 0) {	emcioStatusBuffer =	    new RCS_STAT_CHANNEL(emcFormat, "toolSts", "tool",				 EMC_NMLFILE);	if (!emcioStatusBuffer->valid()) {	    rtapi_print_msg(RTAPI_MSG_ERR,			    "toolSts buffer not available\n");	    delete emcioStatusBuffer;	    emcioStatusBuffer = 0;	    retval = -1;	} else {	    /* initialize and write status */	    emcioStatus.heartbeat = 0;	    emcioStatus.command_type = 0;	    emcioStatus.echo_serial_number = 0;	    emcioStatus.status = RCS_DONE;	    emcioStatusBuffer->write(&emcioStatus);	}    }    /* try to connect to EMC error buffer */    if (emcErrorBuffer == 0) {	emcErrorBuffer =	    new NML(nmlErrorFormat, "emcError", "tool", EMC_NMLFILE);	if (!emcErrorBuffer->valid()) {	    rtapi_print_msg(RTAPI_MSG_ERR,			    "emcError buffer not available\n");	    delete emcErrorBuffer;	    emcErrorBuffer = 0;	    retval = -1;	}    }    return retval;}static int iniLoad(const char *filename){    IniFile inifile;    const char *inistring;    char version[LINELEN], machine[LINELEN];    /* Open the ini file */    if (inifile.Open(filename) == false) {	return -1;    }    if (NULL != (inistring = inifile.Find("DEBUG", "EMC"))) {	/* copy to global */	if (1 != sscanf(inistring, "%i", &EMC_DEBUG)) {	    EMC_DEBUG = 0;	}    } else {	/* not found, use default */	EMC_DEBUG = 0;    }    if (EMC_DEBUG & EMC_DEBUG_VERSIONS) {	if (NULL != (inistring = inifile.Find("VERSION", "EMC"))) {	    if(sscanf(inistring, "$Revision: %s", version) != 1) {		strncpy(version, "unknown", LINELEN-1);	    }	} else {	    strncpy(version, "unknown", LINELEN-1);	}	if (NULL != (inistring = inifile.Find("MACHINE", "EMC"))) {	    strncpy(machine, inistring, LINELEN-1);	} else {	    strncpy(machine, "unknown", LINELEN-1);	}	rtapi_print("iocontrol: machine: '%s'  version '%s'\n", machine, version);    }    if (NULL != (inistring = inifile.Find("NML_FILE", "EMC"))) {	strcpy(EMC_NMLFILE, inistring);    } else {	// not found, use default    }    double temp;    temp = EMC_IO_CYCLE_TIME;    if (NULL != (inistring = inifile.Find("CYCLE_TIME", "EMCIO"))) {	if (1 == sscanf(inistring, "%lf", &EMC_IO_CYCLE_TIME)) {	    // found it	} else {	    // found, but invalid	    EMC_IO_CYCLE_TIME = temp;	    rtapi_print		("invalid [EMCIO] CYCLE_TIME in %s (%s); using default %f\n",		 filename, inistring, EMC_IO_CYCLE_TIME);	}    } else {	// not found, using default	rtapi_print	    ("[EMCIO] CYCLE_TIME not found in %s; using default %f\n",	     filename, EMC_IO_CYCLE_TIME);    }    // close it    inifile.Close();    return 0;}/********************************************************************** Description: loadToolTable(const char *filename, CANON_TOOL_TABLE toolTable[])*		Loads the tool table from file filename into toolTable[] array.*		  Array is CANON_TOOL_MAX + 1 entries, since 0 is included.** Return Value: Zero on success or -1 if file not found.** Side Effects: Default setting used if the parameter not found in*		the ini file.** Called By: main()*********************************************************************/static int loadToolTable(const char *filename,			 CANON_TOOL_TABLE toolTable[]){    int t;    FILE *fp;    char buffer[CANON_TOOL_ENTRY_LEN];    const char *name;    // check filename    if (filename[0] == 0) {	name = TOOL_TABLE_FILE;    } else {	// point to name provided	name = filename;    }    //AJ: for debug reasons    //rtapi_print("loadToolTable called with %s\n", filename);    // open tool table file    if (NULL == (fp = fopen(name, "r"))) {	// can't open file	return -1;    }    // clear out tool table    for (t = 0; t <= CANON_TOOL_MAX; t++) {	// unused tools are 0, 0.0, 0.0	toolTable[t].id = 0;	toolTable[t].zoffset = 0.0;	toolTable[t].diameter = 0.0;        toolTable[t].xoffset = 0.0;        toolTable[t].frontangle = 0.0;        toolTable[t].backangle = 0.0;        toolTable[t].orientation = 0;    }    /*       Override 0's with codes from tool file       File format is:       <header>       <pocket # 0..CANON_TOOL_MAX> <FMS id> <length> <diameter>       ...     */    // read and discard header    if (NULL == fgets(buffer, 256, fp)) {	// nothing in file at all	rtapi_print("IO: toolfile exists, but is empty\n");	fclose(fp);	return -1;    }    while (!feof(fp)) {	int pocket;	int id;	double zoffset;  // AKA length        double xoffset;	double diameter;        double frontangle, backangle;        int orientation;	// just read pocket, ID, and length offset	if (NULL == fgets(buffer, CANON_TOOL_ENTRY_LEN, fp)) {	    break;	}        if (sscanf(buffer, "%d %d %lf %lf %lf %lf %lf %d",                   &pocket, &id, &zoffset, &xoffset, &diameter,                   &frontangle, &backangle, &orientation) == 8) {            if (pocket < 0 || pocket > CANON_TOOL_MAX) {                printf("skipping tool: bad pocket number %d\n", pocket);                continue;            } else {                /* lathe tool */                toolTable[pocket].id = id;                toolTable[pocket].zoffset = zoffset;                toolTable[pocket].xoffset = xoffset;                toolTable[pocket].diameter = diameter;                toolTable[pocket].frontangle = frontangle;                toolTable[pocket].backangle = backangle;                toolTable[pocket].orientation = orientation;            }        } else if (sscanf(buffer, "%d %d %lf %lf",                   &pocket, &id, &zoffset, &diameter) == 4) {            if (pocket < 0 || pocket > CANON_TOOL_MAX) {                printf("skipping tool: bad pocket number %d\n", pocket);                continue;            } else {                /* mill tool */                toolTable[pocket].id = id;                toolTable[pocket].zoffset = zoffset;                toolTable[pocket].diameter = diameter;                // these aren't used on a mill                toolTable[pocket].frontangle = toolTable[pocket].backangle = 0.0;                toolTable[pocket].xoffset = 0.0;                toolTable[pocket].orientation = 0;            }        } else {            /* invalid line. skip it silently */            continue;        }    }    // close the file    fclose(fp);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女一区二区三区| 五月天激情小说综合| 亚洲成av人片| 国产馆精品极品| 欧美疯狂做受xxxx富婆| 亚洲色图.com| 国产风韵犹存在线视精品| 欧美裸体bbwbbwbbw| 国产精品久久久久久久久久久免费看 | 亚洲免费在线观看| 久久成人18免费观看| 欧美视频精品在线| 亚洲色图在线看| 国产不卡一区视频| 日韩一区二区三区视频| 午夜视频在线观看一区二区 | 国产精品一级黄| 91精品国产91久久综合桃花| 亚洲欧美另类小说| 高清不卡在线观看| 久久色.com| 精品无人码麻豆乱码1区2区| 91精品国产欧美日韩| 亚洲成人高清在线| 欧美午夜电影网| 亚洲韩国精品一区| 欧美中文字幕一区| 一区二区三区在线视频观看 | 成人高清免费观看| 国产日韩欧美不卡在线| 精品影视av免费| 欧美一区二区日韩一区二区| 日本中文在线一区| 69堂亚洲精品首页| 日本成人在线看| 日韩一区二区免费在线电影| 日韩精品一二区| 日韩一区二区三区免费观看| 久久激情五月激情| 久久久久久久一区| 成人久久18免费网站麻豆 | 视频一区中文字幕国产| 欧美日韩一区二区三区在线看| 亚洲国产成人高清精品| 欧美嫩在线观看| 美国av一区二区| 久久久亚洲精华液精华液精华液| 国产成人在线免费观看| 中文字幕va一区二区三区| 99精品黄色片免费大全| 伊人开心综合网| 欧美一级夜夜爽| 国产麻豆精品在线观看| 亚洲同性gay激情无套| 欧美亚洲国产一区二区三区va| 亚洲bt欧美bt精品| 337p日本欧洲亚洲大胆精品 | 国产精品不卡在线| 欧美色网一区二区| 久久精品免费观看| 中文字幕中文在线不卡住| 欧美日韩dvd在线观看| 久久丁香综合五月国产三级网站| 欧美国产成人在线| 在线观看亚洲成人| 国产伦精品一区二区三区免费| 中文字幕在线不卡一区二区三区| 欧美日韩国产免费一区二区 | 中文字幕av不卡| 91久久精品国产91性色tv| 热久久免费视频| 国产精品久99| 精品少妇一区二区三区免费观看| 成人免费电影视频| 青娱乐精品在线视频| 国产精品短视频| 日韩午夜电影av| 色综合久久综合网欧美综合网 | 色系网站成人免费| 捆绑调教美女网站视频一区| 136国产福利精品导航| 日韩欧美亚洲国产另类| 一本色道久久综合亚洲aⅴ蜜桃 | 日韩电影在线一区二区三区| 国产精品美女久久久久久久久久久 | 免费成人美女在线观看.| 亚洲丝袜另类动漫二区| 精品福利一区二区三区免费视频| 一本在线高清不卡dvd| 高清成人在线观看| 激情综合色综合久久| 五月天欧美精品| 亚洲一区自拍偷拍| 国产精品久久久久桃色tv| 久久综合久久久久88| 制服.丝袜.亚洲.另类.中文| 色妞www精品视频| 国产成人午夜99999| 极品尤物av久久免费看| 秋霞电影网一区二区| 午夜激情久久久| 亚洲精品伦理在线| 国产精品国产三级国产专播品爱网| 欧美精品一区二区在线观看| 777a∨成人精品桃花网| 欧美日韩国产123区| 在线亚洲人成电影网站色www| 99久久精品免费| 白白色亚洲国产精品| 国产成人av资源| 国产成人在线色| 国产999精品久久久久久| 国产91富婆露脸刺激对白| 国产尤物一区二区在线| 久久精品国产一区二区三| 老鸭窝一区二区久久精品| 日韩成人一级大片| 日本成人在线不卡视频| 麻豆国产精品官网| 精品系列免费在线观看| 麻豆精品国产91久久久久久| 国内精品国产成人| 国产精品888| av一区二区三区| 一本高清dvd不卡在线观看| 91精彩视频在线| 欧美军同video69gay| 日韩一级在线观看| 久久精品视频免费观看| 中文字幕二三区不卡| 一区二区在线观看免费视频播放| 亚洲一二三四在线| 日韩在线卡一卡二| 国产激情一区二区三区| 成年人午夜久久久| 91搞黄在线观看| 欧美日本在线看| 精品国产乱码久久| 欧美激情一区不卡| 一区二区三区在线影院| 另类小说综合欧美亚洲| 成人免费av网站| 欧美色精品在线视频| 欧美www视频| 亚洲欧美怡红院| 婷婷中文字幕一区三区| 激情久久久久久久久久久久久久久久| 豆国产96在线|亚洲| 欧美在线高清视频| 欧美大片国产精品| 亚洲人成亚洲人成在线观看图片| 亚洲午夜精品17c| 精品一区二区三区在线视频| 99re视频精品| 日韩午夜小视频| 一级精品视频在线观看宜春院| 麻豆免费精品视频| 99国产精品99久久久久久| 91精品国产黑色紧身裤美女| 国产精品乱人伦| 日本不卡的三区四区五区| 91啪亚洲精品| 久久这里只有精品6| 亚洲超碰97人人做人人爱| 国产不卡免费视频| 欧美福利电影网| 亚洲另类在线视频| 国产69精品久久久久777| 欧美高清精品3d| 日韩毛片精品高清免费| 国产一二三精品| 欧美日韩国产首页| 玉足女爽爽91| www.亚洲在线| 国产亚洲综合在线| 美美哒免费高清在线观看视频一区二区| 91麻豆精品一区二区三区| 久久伊99综合婷婷久久伊| 性久久久久久久久久久久| 91香蕉视频污| 欧美经典三级视频一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 91国内精品野花午夜精品| 欧美国产日韩在线观看| 国产综合色产在线精品 | 色香蕉成人二区免费| 国产精品污www在线观看| 久久激情五月婷婷| 欧美巨大另类极品videosbest| 亚洲女女做受ⅹxx高潮| 成人午夜在线视频| 国产欧美一区二区三区在线看蜜臀| 老司机午夜精品99久久| 欧美一区二区免费| 日本亚洲三级在线| 在线不卡a资源高清| 香蕉影视欧美成人| 欧美日本一道本| 偷偷要91色婷婷| 欧美一级高清片在线观看|