Skip to content

MC200编程手册(C#)

简介

本篇章介绍CNCApi的接口使用,主要文件是ClrCNCApi.dll。

源文件组织结构

Objective-C
├── dll
   ├── x64
      ├── ClrCNCApi.dll
      └── ClrCNCApid.dll
   ├── x86
      └── ClrCNCApi.dll

准备工作

Windows

下载SDK压缩包,解压到你的工程目录或者其余任意目录 检查目录中是否包含上述内容

使用命名空间

根据版本需求引用对应的ClrCNCApi.dll文件,使用命名空间weconcnc:

Text Only
using weconcnc;

其余可能使用到的命名空间:

Text Only
using System;
using System.IO;
using System.Linq;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Timer = System.Windows.Forms.Timer;

类型定义

SDK中使用的数据类型的定义 WECONCNC_ERROR_E:接口返回值定义

Text Only
WECONCNC_ERROR_SUCCESS:没有错误
WECONCNC_ERROR_LINK_FAILED:连接错误
WECONCNC_ERROR_EXEC_CMD_FAILED:执行指令错误
WECONCNC_ERROR_UPLOAD_FILE_FAILED:上传文件出错
WECONCNC_ERROR_DOWNLOAD_FILE_FAILED:下载文件出错

MACHINE_STATE_E: 机器电源状态

Text Only
STATE_ESTOP:急停
STATE_ESTOP_RESET:急停复位
STATE_OFF:电源关闭
STATE_ON:电源打开

INTERP_STATE_E:机器运行状态

Text Only
INTERP_IDEL:空闲
INTERP_READING:读取文件中
INTERP_PAUSED:暂停
INTERP_WAITING:等待就绪

OP_MODE_E:机器运行模式

Text Only
MODE_MANUAL:手动模式
MODE_AUTO:自动模式
MODE_MDI:指令模式

INI_DISPLAY_E:机器

Text Only
DEFAULT_LINEAR_VELOCITY:默认直线运行速度
MAX_LINEAR_VELOCITY:最大直线运行速度

INI_CONFIG_FIELD:配置文件项

Text Only
INI_MAX_VEL:最大速度(mm/s) 
INI_MAX_ACC:最大加速度(mm/s^2)
INI_MAX_LIMIT:正限位
INI_MIN_LIMIT:负限位
INI_FERROR:跟随误差
INI_MIN_FERROR:最小跟随误差
INI_BACKLASH:间隙
INI_JERK:加加速度(预留,暂时无用)

ABS_CONFIG_FIELD:伺服配置文件项

Text Only
ABS_SCALE:脉冲当量倒数
ABS_LEAD:导程(即电机旋转一圈走多少个用户单位)
ABS_RR_DEN:减速比分母
ABS_RR_NUM:减速比分子
ABS_CW:坐标取反

IO_CONFIG_FIELD:IO配置文件项

Text Only
IO_SPEED:外部IO速度
IO_X_MIN_LIMIT:外部IO对X负限位
IO_X_MAX_LIMIT:外部IO对X正限位
IO_FLAP_X:翻版坐标X
IO_FLAP_Y:翻版坐标Y
IO_LIMIT_Z:外部IO对XY移动进行限制的Z轴位置
IO_FLAP_TIME:翻版上时间(秒)
IO_FLAP_DOWN_TIME:翻板下保压时间(秒)

COORDINATE_T

Text Only
double[] pos;

POINT_T

Text Only
bool bUpdate;  //是否有数据输入
double dValue; //数据

POSITION_T

Text Only
POINT_T x; //点的x坐标
POINT_T y; //点的y坐标
POINT_T z; //点的z坐标
POINT_T a; //点的a坐标
POINT_T b; //点的b坐标
POINT_T c; //点的c坐标
POINT_T u; //点的u坐标
POINT_T v; //点的v坐标
POINT_T w; //点的w坐标

CNC_INI_CONFIG_T

Text Only
int nAxis;  //轴号
double dMaxVel; //最大速度
double dMaxAcc; //最大加速度
double dMaxLimit; //正限位
double dMinLimit; //负限位
double dFError; //跟随误差
double dMinFError; //最小跟随误差
double dBacklash; //间隙
double dJerk; //加加速度(预留)

CNC_ABS_CONFIG_T

Text Only
int nServo; //伺服序号
double dScale; //脉冲当量的倒数
double dLead; //导程
double dRRDen; //减速比分母
double dRRNum; //减速比分子
bool bCw; //坐标取反

CNC_IO_CONFIG_T

Text Only
int dSpeed;  //外部IO速度
double dXMinLimit;  //外部IO对x负限位
double dXMaxLimit; //外部IO对X正限位
double dFlapX; //翻板坐标X
double dFlapY; //翻板坐标Y
double dLimitZ; //外部IO对XY移动进行限制的Z轴位置
int nFlapTime; //翻板上时间(秒)
int nFlapDownTime; //翻板下保压时间(秒)

代理系统接口

WeconCNC SDK提供了对运动控制器的系统状态获取和设置的接口

通过weconcnc::CProxyEntry类提供

getProxyMotion

定义:CProxyMotion getProxyMotion()

说明:获取CProxyMotion类型对象

参数:无

返回值:成功返回CProxyMotion类型对象,出错返回空值

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyEntry pEntry = new CProxyEntry(pComm);
CProxyMotion pMotion = pEntry.getProxyMotion();

if (null == pMotion)
{
    Console.WriteLine("getProxyMotion failed!");
    return -1;
}

return 0;

getProxyStatus

定义:CProxyStatus getProxyStatus()

说明:获取CProxyStatus类型对象

参数:无

返回值:成功返回CProxyStatus类型对象,出错返回空值

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyEntry pEntry = new CProxyEntry(pComm);
CProxyStatus mcmStatus = pEntry.getProxyStatus();

if (null == mcmStatus)
{
    Console.WriteLine("getProxyStatus failed!");
    return -1;
}

return 0;

getProxySys

定义:CProxySys getProxySys()

说明:获取CProxySys类型对象

参数:无

返回值:成功返回CProxySys类型对象,出错返回空值

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyEntry pEntry = new CProxyEntry(pComm);
CProxySys pSys = pEntry.getProxySys();

if (null == pSys)
{
    Console.WriteLine("getProxySys failed!");
    return -1;
}

return 0;

状态获取接口

WeconCNC SDK提供了对运动控制器的状态获取接口

通过weconcnc::CProxyStatus类提供

getMotionState

定义:WECONCNC_ERROR_E getMotionState(ref MACHINE_STATE_E eState);

说明:该接口将读取机器电源状态

参数:【OUT】MACHINE_STATE_E,请参见MACHINE_STATE_E定义

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyStatus pstatus = new CProxyStatus(pComm);
MACHINE_STATE_E eState = new MACHINE_STATE_E();
ret = pstatus.getMotionState(ref eState);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get motion state failed!");
    return -1;
}

Console.WriteLine($("Motion state: {state}");

return 0;

getInterpState

定义:WECONCNC_ERROR_E getInterpState(ref INTERP_STATE_E eState);

说明:该接口将读取机器运行状态

参数:【OUT】INTERP_STATE_E,请参见INTERP_STATE_E定义

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyStatus pstatus = new CProxyStatus(pComm);
INTERP_STATE_E state = INTERP_STATE_E.INTERP_IDEL;
ret = pstatus.getInterpState(ref state);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get interp state failed!");
    return -1;
}

Console.WriteLine("Interp state: {state}");

return 0;

getOpMode

定义:WECONCNC_ERROR_E getOpMode(ref OP_MODE_E eMode);

说明:该接口将读取当前操作模式

参数:【OUT】OP_MODE_E,请参见OP_MODE_E定义

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyStatus pstatus = new CProxyStatus(pComm);
OP_MODE_E mode = OP_MODE_E.MODE_MANUAL;
ret = pstatus.getOpMode(ref mode);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get option mode failed!");
    return -1;
}

Console.WriteLine("Option Mode: {mode}");

return 0;

getCoord

定义:WECONCNC_ERROR_E getCoord(ref COORDINATE_T stCoord);

说明:该接口将读取当前坐标值

参数:【OUT】COORDINATE_T,请参见COORDINATE_T定义

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyStatus pstatus = new CProxyStatus(pComm);
COORDINATE_T coord = new COORDINATE_T();
ret = pstatus.getCoord(ref coord);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get coord failed!");
    return -1;
}

Console.WriteLine("Option Mode: {mode}");

return 0;

getLine

定义:WECONCNC_ERROR_E getLine(ref int nCurrentLine);

说明:该接口将获取当前G代码运行的行数

参数:【OUT】nCurrentLine,当前运行行数

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyStatus pstatus = new CProxyStatus(pComm);
int nCurLine = 0;
ret = pstatus.getLine(ref nCurLine);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get coord failed!");
    return -1;
}

Console.WriteLine("Current Run Line: {nCurLine}");

return 0;

getError

定义:WECONCNC_ERROR_E getError(ref ConcurrentQueue qErrInfo);

说明:该接口将获取当前系统运行的错误信息

参数:【OUT】ConcurrentQueue qErrInfo,当前运行错误信息

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义 示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyStatus pstatus = new CProxyStatus(pComm);
ConcurrentQueue<string> queErrInfo = new ConcurrentQueue<string>();
ret = pstatus.getError(ref queErrInfo);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get coord failed!");
    return -1;
}

foreach (String error in queErrInfo) {
    Console.WriteLine(error);
}

return 0;

运动控制接口

WeconCNC SDK提供了对运动控制器的状态控制接口

通过weconcnc::CProxyMotion类提供

setEstop

定义:WECONCNC_ERROR_E setEstop(bool bEnable);

说明:该接口设置当前系统的急停状态

参数:【IN】bool bEnable,想要设置的急停状态,true为急停,false为解除急停

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义 示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
bool bEnable = true;
ret = pMotion.setEstop(bEnable);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set Estop failed!");
    return -1;
}

return 0;

setEnable

定义:WECONCNC_ERROR_E setEnable(bool bEnable);

说明:该接口设置当前系统的使能状态

参数:【IN】bool bEnable,想要设置的使能状态,true为使能,false为关闭使能

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
bool bEnable = true;
ret = pMotion.setEnable(bEnable);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set Enabel failed!");
    return -1;
}

return 0;

setOpMode

定义:WECONCNC_ERROR_E setOpMode(OP_MODE_E mode);

说明:该接口设置当前系统的急停状态

参数:【IN】OP_MODE_E,请参见OP_MODE_E定义

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
OP_MODE_E mode = OP_MODE_E.MODE_MANUAL;
ret = pMotion.setOpMode(mode);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set optional mode failed!");
    return -1;
}

return 0;

continuousJog

定义:WECONCNC_ERROR_E continuousJog(int nAxis, double dSpeed, int nJogMode = -1);

说明:连续点动控制

参数:

Text Only
【IN】int  nAxis,控制的轴号

【IN】double dSpeed, 速度(mm/min)

【IN】int nJogMode 点动模式,0,1。

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
int nAxis = 0;
double dSpeed = 1000;
int nJogMode = 0;
ret = pMotion.continuousJog(nAxis, dSpeed, nJogMode);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("continuous jog failed!");
    return -1;
}

return 0;

incrementJog

定义:WECONCNC_ERROR_E incrementJog(int  nAxis, double dSpeed, double dDistance, int nJogMode = -1);

说明:增量点动控制

参数:

Text Only
【IN】int nAxis,控制的轴号

【IN】double dSpeed, 速度(mm/s)

【IN】double dDistance,增量移动的距离

【IN】int nJogMode 点动模式,0,1

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
int nAxis = 0;
double dSpeed = 1000;
double dDistance = 1;
ret = pMotion.incrementJog(nAxis, dSpeed, dDistance);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("increment jog failed!");
    return -1;
}

return 0;

stopJog

定义:WECONCNC_ERROR_E stopJog(int nAxis, int nJogMode = -1);

说明:该接口用于使连续点动停止

参数:

Text Only
【IN】int  nAxis,控制的轴号

【IN】int nJogMode 点动模式,0,1

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
int nAxis = 0;
ret = pMotion.stopJog(nAxis);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("stop jog failed!");
    return -1;
}

return 0;

setFeedOverride

定义:WECONCNC_ERROR_E setFeedOverride(int nFeedOverride);

说明:该接口设置当前系统进给率

参数:

Text Only
【IN】int nFeedOverride,为进给率百分比,例如1即为1%

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
int nAxis = 0;
ret = pMotion.setFeedOverride(nAxis);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set feed override failed!");
    return -1;
}

return 0;

home

定义:WECONCNC_ERROR_E home(int nAxis);

说明: 指定轴回零

参数:

Text Only
【IN】int nAxis,控制的轴号

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi commApi = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = commApi.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion mcmMotion = new CProxyMotion(commApi);
int nAxis = 0;
ret = mcmMotion.home(nAxis);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("home failed!");
    return -1;
}

return 0;

execMDI

定义:WECONCNC_ERROR_E execMDI(String sMdi);

说明:该接口使用MDI指令进行运动

参数:

Text Only
【IN】String sMdi,MDI指令

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
String sMdi = "G0 X0";
ret = pMotion.execMDI(sMdi);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("run mdi failed!");
    return -1;
}

return 0;

openProgram

定义:WECONCNC_ERROR_E openProgram(String sFileName);

说明:该接口设置当前系统要打开的文件。

参数:

Text Only
【IN】String sFileName,要加载到系统中打开的文件名

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
String sFileName = "fileName.txt"; 
ret = pMotion.openProgram(sFileName);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("open program failed!");
    return -1;
}

return 0;

runProgram

定义:WECONCNC_ERROR_E runProgram(int nStartLine);

说明:该接口设置当前系统打开的文件要从第几行开始运行

参数:

Text Only
【IN】int  nStartLine,开始运行的行数

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
int nStartLine = 0;
ret = pMotion.runProgram(nStartLine);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("run program failed!");
    return -1;
}

return 0;

stopProgram

定义:WECONCNC_ERROR_E stopProgram();

说明:停止当前系统正在运行的程序

参数:无

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
ret = pMotion.stopProgram();

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("stop program failed!");
    return -1;
}

return 0;

pauseProgram

定义:WECONCNC_ERROR_E pauseProgram();

说明:暂停当前系统正在运行的程序

参数:无

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
ret = pMotion.pauseProgram();

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("pause program failed!");
    return -1;
}

return 0;

resumeProgram

定义:WECONCNC_ERROR_E resumeProgram();

说明:恢复运行当前系统暂停中的程序

参数:无

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
ret = pMotion.resumeProgram();

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("resume program failed!");
    return -1;
}

return 0;

stepProgram

定义:WECONCNC_ERROR_E stepProgram();

说明:单步运行当前系统加载的程序

参数:无

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
ret = pMotion.stepProgram();

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("step program failed!");
    return -1;
}

return 0;

resetProgram

定义:WECONCNC_ERROR_E resetProgram();

说明:重置当前系统加载的程序

参数:无

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
ret = pMotion.resetProgram();

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("reset program failed!");
    return -1;
}

return 0;

moveTo

定义:WECONCNC_ERROR_E moveTo(POSITION_T pos, double dFeed);

说明:移动至当前指定位置

参数:

Text Only
【IN】POSITION_T pos,希望要移动到的位置

【IN】double dFeed, 速率(mm/min)

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp, nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
POSITION_T pos = new POSITION_T();
double dFeed = 1000;
pos.x = new POINT_T(100);
pos.y = new POINT_T(100);

ret = pMotion.moveTo(pos, dFeed);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("execute move cmd failed!");
    return -1;
}

return 0;

moveLine

定义:WECONCNC_ERROR_E moveLine(POSITION_T posStart, POSITION_T posEnd, double dFeed);

说明:先移动至线段起点,随后移动至线段终点

参数:

Text Only
【IN】POSITION_T posStart,希望要移动到的线段起点

【IN】 POSITION_T posEnd,希望要移动到的线段终点

【IN】double dFeed, 速率(mm/min)

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp, nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
POSITION_T posStart = new POSITION_T();
POSITION_T posEnd = new POSITION_T();
double dFeed = 1000;
posStart.x = new POINT_T(100);
posStart.y = new POINT_T(100);
posEnd.x = new POINT_T(200);
posEnd.y = new POINT_T(200);

ret = pMotion.moveLine(posStart, posEnd, dFeed);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("execute move cmd failed!");
    return -1;
}

return 0;

moveArc

定义:WECONCNC_ERROR_E moveArc(POSITION_T posStart, POSITION_T posEnd, POSITION_T posCenter, double dFeed, bool bCw);

说明:先直线移动至弧线起点,随后以圆弧运动至弧线终点

参数:

Text Only
【IN】POSITION_T posStart,弧线的起点

【IN】POSITION_T posEnd,弧线的终点

【IN】POSITION_T posCenter, 弧线的圆心

【IN】double dFeed, 速率(mm/min)

【IN】 bool bCw,旋转方向,true:顺时针,false: 逆时针

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp, nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
POSITION_T posStart = new POSITION_T();
POSITION_T posEnd = new POSITION_T();
POSITION_T posCenter = new POSITION_T();
double dFeed = 1000;
bool bCw = true;

posStart.x = new POINT_T(100);
posStart.y = new POINT_T(100);
posEnd.x = new POINT_T(100);
posEnd.y = new POINT_T(100);
posCenter.x = new POINT_T(200);
posCenter.y = new POINT_T(200);

ret = pMotion.moveArc(posStart, posEnd, posCenter, dFeed, bCw);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("execute move cmd failed!");
    return -1;
}

return 0;

downloadGcode

定义:WECONCNC_ERROR_E downloadGcode(ref String sFromFile);

说明:下载G代码文件

参数:

Text Only
【IN】string sFromFile,文件所在路径

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxyMotion pMotion = new CProxyMotion(pComm);
String sFromFile = "C://test.txt";
ret = pMotion.downloadGcode(ref sFromFile);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("download gcode file failed!");
    return -1;
}

return 0;

系统设置接口

WeconCNC SDK提供了对运动控制器的系统状态获取和设置的接口

通过weconcnc::CProxySys类提供

setIniConfig

定义:WECONCNC_ERROR_E setIniConfig(intnAxis, INI_CONFIG_FIELD eField, String sParam);

WECONCNC_ERROR_E setIniConfig(int nAxis, ref List> listIniConfig);

说明:设置单个 /多个ini配置的值。

参数:

Text Only
【IN】int nAxis,轴号

【IN】INI_CONFIG_FIELD eField,请参见INI_CONFIG_FIELD定义

【IN】String sParam,参数的值

【IN】List<KeyValuePair<INI_CONFIG_FIELD, String>>  listIniConfig,多组期望设置的参数与对应的值

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
String sParam = "1000";
int nAxis = 0;
ret = pSys.setIniConfig(nAxis, INI_CONFIG_FIELD.INI_MAX_VEL, ref sParam);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("setting ini config failed!");
    return -1;
}

return 0;
C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
var listIniConfig = new List<KeyValuePair<INI_CONFIG_FIELD, string>>
{
    new KeyValuePair<INI_CONFIG_FIELD, string>(INI_CONFIG_FIELD.INI_MAX_VEL, "1000"),
    new KeyValuePair<INI_CONFIG_FIELD, string>(INI_CONFIG_FIELD.INI_MAX_ACC, "200"),
    new KeyValuePair<INI_CONFIG_FIELD, string>(INI_CONFIG_FIELD.INI_MAX_LIMIT, "3040"),
    new KeyValuePair<INI_CONFIG_FIELD, string>(INI_CONFIG_FIELD.INI_MIN_LIMIT, "-1"),
    new KeyValuePair<INI_CONFIG_FIELD, string>(INI_CONFIG_FIELD.INI_FERROR, "50000"),
    new KeyValuePair<INI_CONFIG_FIELD, string>(INI_CONFIG_FIELD.INI_BACKLASH, "2000000"),
    new KeyValuePair<INI_CONFIG_FIELD, string>(INI_CONFIG_FIELD.INI_JERK, "0")
};

int nAxis = 0;
ret = pSys.setIniConfig(nAxis, ref listIniConfig);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("setting multi ini config failed!");
    return -1;
}

return 0;

getIniConfig

定义:WECONCNC_ERROR_E getIniConfig(int nAxis, INI_CONFIG_FIELD eField, ref String sParam);

WECONCNC_ERROR_E getIniConfig(int nAxis, ref CNC_INI_CONFIG_T stIniConfig);

说明:获取指定/全部的ini设置数据。

参数:

Text Only
【IN】int nAxis,轴号

【IN】INI_CONFIG_FIELD eField,请参见INI_CONFIG_FIELD定义

【OUT】String sParam,参数的值

【OUT】CNC_INI_CONFIG_T stIniConfig,请参见CNC_INI_CONFIG_T定义

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp, nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nAxis = 0;
String sParam = "";
INI_CONFIG_FIELD iniConfigField = INI_CONFIG_FIELD.INI_MAX_VEL;
ret = pSys.getIniConfig(nAxis, iniConfigField, ref sParam);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("get ini config failed!");
    return -1;
}

Console.WriteLine($"{iniConfigField} : {sParam}");
return 0;
C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nAxis = 0;
CNC_INI_CONFIG_T stIniConfig = new CNC_INI_CONFIG_T();
ret = pSys.getIniConfig(nAxis, ref stIniConfig);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get multi ini config failed!");
    return -1;
}

Console.WriteLine("dMaxVel: {0}", stIniConfig.dMaxVel);
Console.WriteLine("dMaxAcc: {0}", stIniConfig.dMaxAcc);
Console.WriteLine("dMaxLimit: {0}", stIniConfig.dMaxLimit);
Console.WriteLine("dMinLimit: {0}", stIniConfig.dMinLimit);
Console.WriteLine("dFError: {0}", stIniConfig.dFError);
Console.WriteLine("dMinFError: {0}", stIniConfig.dMinFError);
Console.WriteLine("dBacklash: {0}", stIniConfig.dBacklash);
Console.WriteLine("dJerk: {0}", stIniConfig.dJerk);
return 0;

setAbsConfig

定义:WECONCNC_ERROR_E setAbsConfig(int nServo, ABS_CONFIG_FIELD eField, ref String sParam);

WECONCNC_ERROR_E setAbsConfig(int nServo, ref List> listAbsConfig);

说明:设置单个 /多个多圈绝对值配置的值

参数:

Text Only
【IN】int nServo,伺服序号

【IN】ABS_CONFIG_FIELD eField,请参见ABS_CONFIG_FIELD定义

【IN】String sParam,参数的值

【IN】List<KeyValuePair<ABS_CONFIG_FIELD, String>>  listAbsConfig,多组期望设置的参数与对应的

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
String sParam = Convert.ToString(2);
ret = pSys.setAbsConfig(nServo, ABS_CONFIG_FIELD.ABS_LEAD, ref sParam);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set abs config failed!");
    return -1;
}

return 0;
C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);

int nServo = 0;
var listAbsConfig = new List<KeyValuePair<ABS_CONFIG_FIELD, string>>()
{
    new KeyValuePair<ABS_CONFIG_FIELD, string>(ABS_CONFIG_FIELD.ABS_SCALE,"1"),
    new KeyValuePair<ABS_CONFIG_FIELD, string>(ABS_CONFIG_FIELD.ABS_LEAD,"1"),
    new KeyValuePair<ABS_CONFIG_FIELD, string>(ABS_CONFIG_FIELD.ABS_RR_DEN,"1"),
    new KeyValuePair<ABS_CONFIG_FIELD, string>(ABS_CONFIG_FIELD.ABS_RR_NUM,"1"),
    new KeyValuePair<ABS_CONFIG_FIELD, string>(ABS_CONFIG_FIELD.ABS_CW,"1")
};

ret = pSys.setAbsConfig(nServo, ref listAbsConfig);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set multi abs config failed!");
    return -1;
}

return 0;

getAbsConfig

定义:WECONCNC_ERROR_E getAbsConfig(int nServo, ABS_CONFIG_FIELD eField, ref String sParam);

WECONCNC_ERROR_E getAbsConfig(int nServo,ref CNC_ABS_CONFIG_T stAbsConfig);

说明:获取指定/全部的多圈绝对值设置数据

参数:

Text Only
【IN】intnServo,轴号

【IN】ABS_CONFIG_FIELD eField,请参见ABS_CONFIG_FIELD定义

【OUT】String sParam,参数的值

【OUT】CNC_ABS_CONFIG_T stAbsConfig,请参见CNC_ABS_CONFIG_T定义

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp, nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
String sParam = "";
ABS_CONFIG_FIELD absConfigField = ABS_CONFIG_FIELD.ABS_SCALE;
ret = pSys.getAbsConfig(nServo, absConfigField, ref sParam);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("get abs config failed!");
    return -1;
}

Console.WriteLine($"{absConfigField} : {sParam}");
return 0;
C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
CNC_ABS_CONFIG_T stAbsConfig = new CNC_ABS_CONFIG_T();
ret = pSys.getAbsConfig(nServo, ref stAbsConfig);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get multi abs config failed!");
    return -1;
}

Console.WriteLine("dScale: {0}", stAbsConfig.dScale);
Console.WriteLine("dLead: {0}", stAbsConfig.dLead);
Console.WriteLine("dRRDen: {0}", stAbsConfig.dRRDen);
Console.WriteLine("dRRNum: {0}", stAbsConfig.dRRNum);
Console.WriteLine("bCw: {0}", stAbsConfig.bCw);
return 0;

setIoConfig

定义:WECONCNC_ERROR_E setIoConfig(IO_CONFIG_FIELD eField,ref String sParam);

WECONCNC_ERROR_E setIoConfig(ref List> listIoConfig);

说明:设置单个 /多个外部IO配置的值

参数:

Text Only
【IN】IO_CONFIG_FIELD eField,请参见IO_CONFIG_FIELD定义

【IN】String sParam,参数的值

【IN】List<KeyValuePair<IO_CONFIG_FIELD, String>> listIoConfig,多组期望设置的参数与对应的值

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
String sParam = "10";
ret = pSys.setIoConfig(IO_CONFIG_FIELD.IO_SPEED, ref sParam);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set io config failed!");
    return -1;
}

return 0;
C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
var listIoConfig = new List<KeyValuePair<IO_CONFIG_FIELD, String>>()
{
    new KeyValuePair<IO_CONFIG_FIELD, String>(IO_CONFIG_FIELD.IO_SPEED,"10"),
    new KeyValuePair<IO_CONFIG_FIELD, String>(IO_CONFIG_FIELD.IO_X_MIN_LIMIT,"100"),
    new KeyValuePair<IO_CONFIG_FIELD, String>(IO_CONFIG_FIELD.IO_X_MAX_LIMIT,"3000"),
    new KeyValuePair<IO_CONFIG_FIELD, String>(IO_CONFIG_FIELD.IO_FLAP_X,"1000"),
    new KeyValuePair<IO_CONFIG_FIELD, String>(IO_CONFIG_FIELD.IO_FLAP_Y,"2000"),
    new KeyValuePair<IO_CONFIG_FIELD, String>(IO_CONFIG_FIELD.IO_LIMIT_Z,"-30"),
    new KeyValuePair<IO_CONFIG_FIELD, String>(IO_CONFIG_FIELD.IO_FLAP_TIME,"10"),
    new KeyValuePair<IO_CONFIG_FIELD, String>(IO_CONFIG_FIELD.IO_FLAP_DOWN_TIME,"5")
};
ret = pSys.setIoConfig(ref listIoConfig); 

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set multi io config failed!");
    return -1;
}

return 0;

getIoConfig

定义:WECONCNC_ERROR_E getIoConfig(IO_CONFIG_FIELD eField, ref String sParam);

WECONCNC_ERROR_E getIoConfig(ref CNC_IO_CONFIG_T stIoConfig);

说明:获取指定/全部当前外部IO设置数据

参数:

Text Only
【IN】int nServo,轴号

【IN】IO_CONFIG_FIELD eField,请参见IO_CONFIG_FIELD定义

【OUT】String sParam,参数的值

【OUT】CNC_IO_CONFIG_T stIniConfig,请参见CNC_IO_CONFIG_T定义

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp, nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
String sParam = "";
IO_CONFIG_FIELD ioConfigField = IO_CONFIG_FIELD.IO_SPEED;
ret = pSys.getIoConfig(ioConfigField, ref sParam);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("get io config failed!");
    return -1;
}

Console.WriteLine($"{ioConfigField} : {sParam}");
return 0;
C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp, nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
CNC_IO_CONFIG_T stIoConfig = new CNC_IO_CONFIG_T();
ret = pSys.getIoConfig(ref stIoConfig);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("get multi io config failed!");
    return -1;
}

Console.WriteLine("dSpeed: {0}", stIoConfig.dSpeed);
Console.WriteLine("dXMinLimit: {0}", stIoConfig.dXMinLimit);
Console.WriteLine("dXMaxLimit: {0}", stIoConfig.dXMaxLimit);
Console.WriteLine("dFlapX: {0}", stIoConfig.dFlapX);
Console.WriteLine("dFlapY: {0}", stIoConfig.dFlapY);
Console.WriteLine("dLimitZ: {0}", stIoConfig.dLimitZ);
Console.WriteLine("nFlapTime: {0}", stIoConfig.nFlapTime);
Console.WriteLine("nFlapDownTime: {0}", stIoConfig.nFlapDownTime);
return 0;

resetServoError

定义:WECONCNC_ERROR_E resetServoError(int nServo)

说明:清除指定伺服报错

参数:

Text Only
【IN】int nServo,伺服序号

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
ret = pSys.resetServoError(nServo);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("reset servo error failed!");
    return -1;
}

return 0;

resetServoAbs

定义:WECONCNC_ERROR_E resetServoAbs(int nServo)

说明:伺服多圈绝对值清零

参数:

Text Only
【IN】int nServo,伺服序号

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
ret = pSys.resetServoAbs(nServo);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("reset servo abs failed!");
    return -1;
}

return 0;

setMotorRevo

定义:WECONCNC_ERROR_E setMotorRevo(int nServo, int nMotorRevo)

说明:设置伺服电子齿轮比分子

参数:

Text Only
【IN】int32_t nServo,伺服序号

【IN】int nMotorRevo,电子齿轮比分子的值

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
int nMotorRevo = 131072;
ret = pSys.setMotorRevo(nServo, nMotorRevo);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set motor revo failed!");
    return -1;
}

return 0;

getMotorRevo

定义:WECONCNC_ERROR_E getMotorRevo(int nServo, int nMotorRevo)

说明:获取伺服电子齿轮比分子

参数:

Text Only
【IN】int nServo,伺服序号

【OUT】int nMotorRevo,电子齿轮比分子的值

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
int nMotorRevo = 0;
ret = pSys.getMotorRevo(nServo, ref nMotorRevo);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get motor revo failed!");
    return -1;
}

Console.WriteLine($"nMotorRevo : {nMotorRevo}");
return 0;

setShaftRevo

定义:WECONCNC_ERROR_E setShaftRevo(intnServo, int nShaftRevo);

说明:获取伺服电子齿轮比分母

参数:

Text Only
【IN】intnServo,伺服序号

【IN】int nShaftRevo,电子齿轮比分母的值

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
int nShaftRevo = 10000;
ret = pSys.setShaftRevo(nServo, nShaftRevo);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("set shaft revo failed!");
    return -1;
}

return 0;

getShaftRevo

定义:WECONCNC_ERROR_E getShaftRevo(int nServo, int nShaftRevo)

说明:获取伺服电子齿轮比分母

参数:

Text Only
【IN】intnServo,伺服序号

【OUT】int nShaftRevo,电子齿轮比分母的值

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

CProxySys pSys = new CProxySys(pComm);
int nServo = 0;
int nShaftRevo = 0;
ret = pSys.getShaftRevo(nServo, ref nShaftRevo);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("get shaft revo failed!");
    return -1;
}

Console.WriteLine($"nShaftRevo : {nShaftRevo}");
return 0;

通信接口

WeconCNC SDK提供了对运动控制器的系统状态获取和设置的接口

通过weconcnc::CCommApi类提供

connect

定义:WECONCNC_ERROR_E connect(String sIp, ushort uPort)

说明:连接到服务器

参数:

Text Only
【IN】String sIp,IP地址

【IN】ushort uPort,端口号

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

return 0;

disconnect

定义:WECONCNC_ERROR_E disconnect()

说明:断开连接

参数:无

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

ret = pComm.disconnect();

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("disconnect failed!");
    return -1;
}

return 0;

execCmd

定义:WECONCNC_ERROR_E execCmd(ref String sCmd, ref String sResult)

说明:发送执行指令

参数:

Text Only
【IN】 String sCmd,指令

【OUT】String  sResult,执行结果

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

String sCmd = "";
String sResult = "";
ret = pComm.execCmd(ref sCmd, ref sResult);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("execCmd failed!");
    return -1;
}

return 0;

uploadFile

定义:WECONCNC_ERROR_E uploadFile(ref String sFromFile, ref String sToFile)

说明:上传指定文件至指定地址

参数:

Text Only
【IN】String sFromFile,文件地址

【IN】String sToFile,存储地址

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

String sFromFile = "";
String sToFile = "";
ret = pComm.uploadFile(ref sFromFile, ref sToFile);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("upload file failed!");
    return -1;
}

return 0;

downloadFile

定义:WECONCNC_ERROR_E downloadFile(ref String sFromFile, ref String sToFile)

说明:下载指定文件至指定地址

参数:

Text Only
【IN】String sFromFile,文件地址

【IN】String sToFile,目的存储地址

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CCommApi pComm = new CCommApi();
String sIp = "192.168.64.96";
ushort nPort = 9995;
var ret = pComm.connect(ref sIp,nPort);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret) {
    Console.WriteLine("connect failed!");
    return -1;
}

String sFromFile = "";
String sToFile = "";
ret = pComm.downloadFile(ref sFromFile, ref sToFile);

if (WECONCNC_ERROR_E.WECONCNC_ERROR_SUCCESS != ret)
{
    Console.WriteLine("download file failed!");
    return -1;
}

return 0;

IO监控接口

WeconCNC SDK提供了对运动控制器的系统状态获取和设置的接口

通过weconcnc::CIoControl_C类提供

init

定义:int init(String sIp, int nPort);

说明: 初始化服务器套接字

参数:

Text Only
【IN】String sIp,IO服务器地址

【IN】int nPort,IO服务器端口号

返回值: 成功返回0,出错返回负值

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

return 0;

getSupportio

定义:int getSupportio(ref List listIoname);

说明: 获取所有支持的IO

参数:

Text Only
【OUT】List<String> listIoname, 所有支持的IO的名称

返回值: 成功返回0,出错返回负值。

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

List<String> listIoname = new List<String>();
ret = pIo.getSupportio(ref listIoname);

if (ret < 0)
{
    Console.WriteLine("get support io failed!");
    return ret;
}

foreach (String sIoname in listIoname) {
    Console.WriteLine($"Io name : {sIoname}");
}
return 0;

getIoValue

定义:int getIoValue(String sIoname, String sIovalue);

int getIoValue(List listIoname, ref List listIovalue);

说明: 获取单个/多个IO值

参数:

Text Only
【IN】String sIoname, 需要获取值的IO名称

【OUT】String sIovalue,获取到的IO值

【IN】List<String> listIoname,需要获取值的IO名称集合

【OUT】List<String> listIovalue,获取到的IO值的集合

返回值:成功返回0,出错返回负值。

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

String sIoname = "5axis_io_cnc.0.add_in";
String sIovalue = "";

ret = pIo.getIoValue(sIoname, ref sIovalue);

if (ret < 0)
{
    Console.WriteLine("get io value failed!");
    return -1;
}

Console.WriteLine($"{sIoname} : {sIovalue}");
return 0;
C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

var listIoname = new List<string>
            {
    "5axis_io_cnc.0.axis_homing",
    "5axis_io_cnc.1.axis_homing",
    "5axis_io_cnc.2.axis_homing",
    "5axis_io_cnc.3.axis_homing",
    "5axis_io_cnc.4.axis_homing",
    "5axis_io_cnc.5.axis_homing"
    };
var listIovalue = new List<string>();
ret = pIo.getIoValue(listIoname, ref listIovalue);

if (ret < 0)
{
    Console.WriteLine("get io value failed!");
    return -1;
}

for (int i = 0; i < listIoname.Count; ++i)
{
    Console.WriteLine($"{listIoname[i]} : {listIovalue[i]}");
}
return 0;

setIoValue

定义: int setIoValue(String sIoname, String sIovalue);

int setIoValue(Dictionary dictIodata);

说明: 设置单个/多个IO值

参数:

Text Only
【IN】String sIoname,需要设置的IO名称

【IN】String sIovalue,设置的IO值

【IN】Dictionary<String, String> dictIodata,字典存储IO名称和IO值

返回值:WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

String sIoname = "5axis_io_cnc.0.axis_homing";
String sIovalue = "TRUE";
ret = pIo.setIoValue(sIoname, sIovalue);

if (ret < 0)
{
    Console.WriteLine("set io value failed!");
    return -1;
}

return 0;
C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

Dictionary<String, String> dictIodata = new Dictionary<String, String>
            {
    { "5axis_io_cnc.0.axis_homing", "False" },
    { "5axis_io_cnc.1.axis_homing", "False" },
    { "5axis_io_cnc.2.axis_homing", "False" },
    { "5axis_io_cnc.3.axis_homing", "False" },
    { "5axis_io_cnc.4.axis_homing", "False" },
    { "5axis_io_cnc.5.axis_homing", "False" }
};
ret = pIo.setIoValue(dictIodata);

if (ret < 0)
{
    Console.WriteLine("setIoValue failed!");
    return -1;
}

return 0;

setUpdateTime

定义:int setUpdateTime(int nMsleep);

说明: 设置更新周期

参数:【IN】int nMsleep,单位毫秒的一个周期时间

返回值: 成功返回0,出错返回负值。

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

int nMsleep = 100;
ret = pIo.setUpdateTime(nMsleep);

if (ret < 0) {
    Console.WriteLine("setUpdateTime failed!");
    return -1;
}

return 0;

getListall

定义: int getListall(ref List listComp, ref List listType, ref List listDir, ref List listValue, ref List listName, ref List listLink);

说明: 获取所有列表

参数:

Text Only
【OUT】List<String>  listComp, 引脚的comp值

【OUT】List<String> listType, 数据类型

【OUT】List<String> listDir, 输入/输出类型

【OUT】List<String > listValue, 值

【OUT】List<String > listName, 名称

【OUT】List<String> listLink, 链接情况

返回值: 成功返回0,出错返回负值

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

List<String> listComp = new List<String>();
List<String> listType = new List<String>();
List<String> listDir = new List<String>();
List<String> listValue = new List<String>();
List<String> listName = new List<String>();
List<String> listLink = new List<String>();
ret = pIo.getListall(ref listComp, ref listType, ref listDir, ref listValue, ref listName, ref listLink);

if (ret < 0)
{
    Console.WriteLine("getListall failed!");
    return -1;
}

for (int i = 0; i < listName.Count; ++i) {
    Console.WriteLine($"Name:{listName[i]} Type:{listType[i]} Dir:{listDir[i]} Value:{listValue[i]} Comp:{listComp[i]} Link:{listLink[i]}");
}

return 0;

getAllbool

定义: getAllbool(List listBoolname);

说明: 获取所有布尔类型参数的名称

参数: 【OUT】List listBoolname,获取到的所有布尔类型参数的名称列表

返回值: 成功返回0,出错返回负值

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

List<String> listBoolname = new List<String>();
ret = pIo.getAllbool(ref listBoolname);

if (ret < 0)
{
    Console.WriteLine("listBoolname failed!");
    return -1;
}

foreach (String sBoolname in listBoolname) {
    Console.WriteLine($"Name:{sBoolname}");
}

return 0;

getAllboolCount

定义: int getAllboolCount();

说明: 获取布尔类型参数数量 参数:无 返回值: 成功返回布尔类型参数数量,出错返回负值 示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

int nBoolCount = pIo.getAllboolCount();

if (nBoolCount < 0) {
    Console.WriteLine("getAllboolCount failed!");
    return nBoolCount;
}

Console.WriteLine($"Count : {nBoolCount}");
return 0;

Manual_update

定义:int Manual_update();

说明: 手动更新io数据

参数:无

返回值:成功返回0,出错返回负值

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

ret = pIo.Manual_update();

if (ret < 0) {
    Console.WriteLine("Manual_update failed!");
    return -1;
}

return 0;

getPayLoad

定义:int getPayLoad(ref List listPayload);

说明: 获取五轴的有效载荷

参数:

Text Only
【OUT】List<String> listPayload,获取到的五轴有效载荷数据

返回值: 成功返回0,出错返回负值

示例:

C#
CIoControl_C pIo = new CIoControl_C();

String sIp = "192.168.64.96";
int nPort = 16131;
int ret = -1;
ret = pIo.init(sIp, nPort);

if (ret < 0)
{
    Console.WriteLine("init failed!");
    return -1;
}

Thread.Sleep(200);

List<String> listPayload = new List<String>();
ret = pIo.getPayLoad(ref listPayload);

if (ret < 0) {
    Console.WriteLine("getPayLoad failed!");
    return -1;
}

foreach (String sPayload in listPayload)
{
    Console.WriteLine($"Payload : {sPayload}");
}

return 0;

工程创建示例

1.VS添加C#相关组件

image.png

image.png

image.png

2.创建Winform项目

image.png

image.png

image.png

image.png

image.png image.png

image.png

image.png

image.png

image.png

3.建立UI及对应的方法

①DemoUI界面示例

image.png

②连接功能实现示例

Note

💡 创建一个用于连接服务器的按钮

image.png

image.png

Note

💡 注意,如果没有工具箱,则从 视图->工具箱 打开(如下图) 或者使用 快捷键Ctrl+Alt+X 打开工具箱

image.png

Note

💡 修改按钮的属性

image.png

Note

💡 实现连接按钮的点击功能

image.png

image.png

Note

💡 运行后点击运行按钮的结果

image.png

image.png

image.png

💡 其他控件按照需求自行设置

4.Demo文件示例

Designer.txt

Form1.txt

💡上面两个文件为设计代码,Designer.text中为UI设计代码,Form1.txt中为功能实现代码

💡按照下面的步骤进行操作可以获得一份程序demo

Note

💡请先根据 “创建Winform项目” 中的步骤进行操作得到一份工程,效果如下图。

image.png

Note

💡根据下图确认工程默认命名空间是否为 "Demo"。

image.png

Note

💡根据下图进入Form1.cs的功能实现代码界面。

image.png

Note

💡复制Form1.txt的内容至Form1.cs的功能实现代码界面,效果如下图。

image.png

Note

💡根据下图进入Form1.Designer.cs的UI设计代码界面。

image.png

Note

💡复制Designer.txt的内容至Form1.Designer.cs的UI设计代码界面,效果如下图。

image.png

💡根据下图检查是否成功生成UI

image.png

💡点击启动按钮,成功运行Demo,效果图如下

image.png