You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2251 lines
124 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/****************************************************************************************************
* ZT Motion Library *
* Copyright (C) 2023 ZHITENG (Shenzhen) Motion Technology Co.,Ltd *
* *
* *
* @file ztm.cs *
* @brief defs of struct and function *
* *
* *
* @version 4.0.1R0(版本号) *
* @date 2023.03.10 *
* *
* *
****************************************************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace CSZTM
{
public class ZTM
{
#region 函数返回值及其含义
public static short ZT_STAT_MC_OPENING = 2; /*正在打开控制器*/
public static short ZT_STAT_MC_OPEND = 1; /*控制器已打开*/
public static short ZT_ERR_OK = 0; /*无错误*/
public static short ZT_ERR_PMVAL = -1; /*参数值错误*/
public static short ZT_ERR_PULSEOVERFLOW = -2; /*脉冲发生器溢出*/
public static short ZT_ERR_PMID = -3; /*参数ID不存在无此参数*/
public static short ZT_ERR_MCMAX = -4; /*控制器不存在,超出系统支持的最大控制器索引号*/
public static short ZT_ERR_CHMAX = -5; /*通道号不存在,超出系统最大通道数*/
public static short ZT_ERR_AXISMAX = -6; /*轴号不存在,超出系统最大轴数*/
public static short ZT_ERR_NOAUTH = -7; /*控制器无授权*/
public static short ZT_ERR_PLCADDROVERFLOW = -8; /*PLC地址溢出*/
public static short ZT_ERR_NOFLAG = -9; /*没有此状态或标志*/
public static short ZT_ERR_NONSTOPPED = -10; /*运动没有停止*/
public static short ZT_ERR_MCNOFILE = -11; /*文件号打开失败。文件号不存在或SD卡不存在。*/
public static short ZT_ERR_HOSTNOFILE = -12; /*HOST打开文件失败*/
public static short ZT_ERR_AXISALM = -13; /*轴伺服报警*/
public static short ZT_ERR_AXISPOT = -14; /*轴正向硬限位*/
public static short ZT_ERR_AXISNOT = -15; /*轴负向硬限位*/
public static short ZT_ERR_AXISPSL = -16; /*轴正向软限位*/
public static short ZT_ERR_AXISNSL = -17; /*轴负向软限位*/
public static short ZT_ERR_AXISESTOP = -18; /*硬急停*/
public static short ZT_ERR_AXISOT = -19; /*轴硬限位*/
public static short ZT_ERR_AXISSL = -20; /*轴软限位*/
public static short ZT_ERR_HDBUSY = -51; /*大数据传送忙*/
public static short ZT_ERR_HDERROR = -52; /*大数据传送错误*/
public static short ZT_ERR_FILEOPEND = -61; /*文件已打开*/
public static short ZT_ERR_NOFILEOPEN = -62; /*文件未打开*/
public static short ZT_ERR_CMDBUFFFULL = -100; /*BLOCK指令缓冲区满*/
public static short ZT_ERR_COM_ADDR = -101; /*与HOST通讯的设备地址错误*/
public static short ZT_ERR_COM_CHECKSUM = -102; /*与HOST通讯的校验和错误*/
public static short ZT_ERR_COM_INVCMD = -103; /*与HOST通讯的命令ID错误*/
public static short ZT_ERR_SOCKET = -104; /*HOST库中SOCKET初始化失败*/
public static short ZT_ERR_SHM = -105; /*HOST库中SHM初始化失败*/
public static short ZT_ERR_PIPE = -106; /*HOST库中PIPE初始化失败*/
public static short ZT_ERR_NOLIBINITD = -107; /*HOST库没有初始化*/
public static short ZT_ERR_NOMCOPEN = -108; /*HOST库中控制器未打开*/
public static short ZT_ERR_MC_NONCONNECT = -110; /*HOST与控制器通讯超时未连接*/
public static short ZT_ERR_THREAD = -112; /*HOST库中线程初始化失败*/
public static short ZT_ERR_BUFFIDX = -113; /*命令缓冲区索引号错误*/
public static short ZT_ERR_BUFFFULL = -114; /*发送缓冲区满*/
public static short ZT_ERR_PREBUFFFULL = -115; /*BLOCK命令的预缓冲区满*/
public static short ZT_ERR_FB_TIMEOUT = -121; /*伺服现场总线超时*/
public static short ZT_ERR_FB_NCYCWNG = -122; /*伺服总线中非周期命令执行报警*/
public static short ZT_ERR_FB_CCYCERR = -123; /*伺服总线中非周期命令执行错误*/
public static short ZT_ERR_SERVICE_STOP = -230; /*控制器服务程序停止*/
public static short ZT_ERR_UPDATE = -255; /*内部使用,更新命令*/
#endregion 函数返回值及其含义
#region 函数接口
#region 控制器操作
/// <summary>
/// 搜索IP段的控制器
/// </summary>
/// <param name="host_ip">主机端IP地址 </param>
/// <param name="mc_ip_1">搜索到的控制器的IP地址的第一段 </param>
/// <param name="mc_ip_2">搜索到的控制器的IP地址的第二段 </param>
/// <param name="mc_ip_3">搜索到的控制器的IP地址的第三段 </param>
/// <param name="mc_ip_4">搜索到的控制器的IP地址的第四段 </param>
/// <param name="timeout">搜索一个IP地址的超时时间单位ms </param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SearchMc(char[] host_ip, ref char mc_ip_1, ref char mc_ip_2, ref char mc_ip_3, ref char mc_ip_4, short timeout = 500);
/// <summary>
/// 打开控制器
/// </summary>
/// <param name="ip">控制器的IP地址是C类IP地址私有范围地址192.168.0.0~192.168.255.255。 </param>
/// <param name="mc">服务分配并返回的控制器索引作为其它接口函数的控制器索引参数0表示无效控制器。 </param>
/// <param name="timeout">服务与控制器通讯握手超时时间单位是ms0表示超时无穷大。 </param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_Open(char[] ip, ref short mc, short timeout = 500);
/// <summary>
/// 利用索引号关闭控制器
/// </summary>
/// <param name="mc">控制器索引 </param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_Close(short mc);
/// <summary>
/// 利用IP关闭控制器
/// </summary>
/// <param name="ip">控制器IP地址 </param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_CloseIP(char[] ip);
/// <summary>
/// 控制器热复位
/// </summary>
/// <param name="mc">控制器索引 </param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_Reset(short mc);
/// <summary>
/// 读取控制器连接状态
/// </summary>
/// <param name="ip">控制器的IP地址</param>
/// <param name="mc">服务返回的IP地址对应的控制器索引作为其它接口函数的控制器索引参数0表示无效控制器</param>
/// <returns>返回控制器连接状态0-未连接1-已连接2-正在连接</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetConnectionStatus(char[] ip, ref short mc);
/// <summary>
/// 设置控制器的IP地址
/// </summary>
/// <param name="oldip">原来的IP地址</param>
/// <param name="newip">新的IP地址</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetIP(char[] oldip, char[] newip);
/// <summary>
/// 搜索IP地址对应的控制器是否存在
/// </summary>
/// <param name="ip">IP地址</param>
/// <param name="timeout">超时时间单位ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_FindIP(char[] ip, short timeout = 500);
#endregion 控制器操作
#region 回零操作
/// <summary>
/// 设置回零参数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号</param>
/// <param name="dir">回零方向1-正向0-负向</param>
/// <param name="mode">回零模式,取值范围:
/// 0-无效
/// 1-HOME零点开关一次回零
/// 2-LMT限位开关一次回零
/// 3-Z编码器Z相信号一次回零
/// 4-HOME+Z原点与编码器Z相信号联合回零
/// 5-LMT+Z限位开关与编码器Z相信号联合回零
/// 6-LMT+HOME限位开关与零点开关联合回零
/// 7-LMT+HOME+Z限位开关、零点开关与编码器Z相信号联合回零
/// 8-原地,仅仅将轴的位置清零
/// 12-Z2二次编码器Z相信号回零类似于一次零点回零
/// </param>
/// <param name="lo_vel">回零低速单位p(或物理量纲分辨率)/ms取值范围0.001~8000.0</param>
/// <param name="hi_vel">回零高速单位p(或物理量纲分辨率)/ms取值范围0.001~8000.0</param>
/// <param name="acc">回零加速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.0</param>
/// <param name="offset">零点偏置单位p或物理量纲分辨率取值范围±2^31默认值为0</param>
/// <param name="latch_dist">锁存方式回零时搜索距离如果值大于零表示锁存方式回零单位p或物理量纲分辨率
/// 取值范围0~2^31默认值为0表示低速搜索信号立即停止。
/// </param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetHomeParam(short mc, short axis, short dir, short mode, float lo_vel, float hi_vel, float acc, int offset = 0, int latch_dist = 0);
/// <summary>
/// 回零启动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <param name="rstenc">回零时清零编码器位置1-清零编码器位置0-不清零编码器位置</param>
/// <returns>成功返回0</returns>
/// <remark>对于各种伺服驱动器和步进驱动器回零启动前都要调用ZT_SetServoOn激活伺服使能, 以确保回零结束时回零完成信号有效</remark>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_Home(short mc, uint axes, short rstenc = 1);
/// <summary>
/// 设置轴正向软限位位置
/// </summary>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">正向软限位单位p或物理量纲分辨率取值范围±2^31</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPSL(short mc, short axis, int pos);
/// <summary>
///
/// </summary>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">负向软限位单位p或物理量纲分辨率取值范围±2^31</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetNSL(short mc, short axis, int pos);
#endregion 回零操作
#region 点位运动
/// <summary>
/// 绝对式P2P运动单轴运动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">绝对目标位置单位p或物理量纲分辨率取值范围±2^31</param>
/// <param name="str_vel">起跳速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="max_vel">目标速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="acc">目标加速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.000</param>
/// <param name="dec">目标减速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.000</param>
/// <param name="end_vel">截止速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="smth">平滑时间单位ms取值范围0~65535默认值0表示梯形运动大于0则为S曲线运动</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_MoveA(short mc, short axis, int pos, float str_vel, float max_vel, float acc, float dec, float end_vel, ushort smth = 0);
/// <summary>
/// 相对式P2P运动单轴运动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">相对目标位置单位p或物理量纲分辨率取值范围±2^31</param>
/// <param name="str_vel">起跳速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="max_vel">目标速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="acc">目标加速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.000</param>
/// <param name="dec">目标减速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.000</param>
/// <param name="end_vel">截止速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="smth">平滑时间单位ms取值范围0~65535默认值0表示梯形运动大于0则为S曲线运动</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_MoveR(short mc, short axis, int pos, float str_vel, float max_vel, float acc, float dec, float end_vel, ushort smth = 0);
/// <summary>
/// 正向JOG运动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="str_vel">起跳速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="max_vel">目标速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="acc">目标加速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.000</param>
/// <param name="dec">目标减速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.000</param>
/// <param name="end_vel">截止速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="smth">平滑时间单位ms取值范围0~65535默认值0表示梯形运动大于0则为S曲线运动</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_JogP(short mc, short axis, float str_vel, float max_vel, float acc, float dec, float end_vel, ushort smth = 0);
/// <summary>
/// 负向JOG运动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="str_vel">起跳速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="max_vel">目标速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="acc">目标加速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.000</param>
/// <param name="dec">目标减速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.000</param>
/// <param name="end_vel">截止速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.000</param>
/// <param name="smth">平滑时间单位ms取值范围0~65535默认值0表示梯形运动大于0则为S曲线运动</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_JogM(short mc, short axis, float str_vel, float max_vel, float acc, float dec, float end_vel, ushort smth = 0);
/// <summary>
/// 轴运动平滑停止
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_Stop(short mc, uint axes);
/// <summary>
/// 轴运动立即停止
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_EStop(short mc, uint axes);
/// <summary>
/// 设置脉冲位置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">命令位置单位p或物理量纲分辨率取值范围±2^31</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPosPulse(short mc, short axis, int pos);
/// <summary>
/// 设置编码器位置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">编码器位置单位p或物理量纲分辨率取值范围±2^31</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPosEncoder(short mc, short axis, int pos);
/// <summary>
/// 读取轴运动的当前脉冲位置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">命令位置单位p或物理量纲分辨率取值范围±2^31</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetPosPulse(short mc, short axis, ref int pos);
/// <summary>
/// 读取轴运动的当前编码器位置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">编码器位置单位p或物理量纲分辨率取值范围±2^31</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetPosEncoder(short mc, short axis, ref int pos);
/// <summary>
/// 读取轴运动的当前脉冲速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="vel">命令速度单位p(或物理量纲分辨率)/ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetVelPulse(short mc, short axis, ref float vel);
/// <summary>
/// 读取轴运动的当前实际速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="vel">实际速度单位p(或物理量纲分辨率)/ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetVelEncoder(short mc, short axis, ref float vel);
/// <summary>
/// 读取轴运动的当前脉冲加速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="acc">命令加速度单位p(或物理量纲分辨率)/ms^2</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetAccPulse(short mc, short axis, ref float acc);
/// <summary>
/// 读取轴运动的当前编码器加速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="acc"> 实际加速度单位p(或物理量纲分辨率)/ms^2</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetAccEncoder(short mc, short axis, ref float acc);
/// <summary>
/// 设置轴运动的最大速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="vel">轴最大速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetMaxVel(short mc, short axis, float vel);
/// <summary>
/// 设置轴运动的最大加速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="acc">最大加速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetMaxAcc(short mc, short axis, float acc);
/// <summary>
/// 设置轴运动的最大减速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="dec">最大减速度单位p(或物理量纲分辨率)/ms^2取值范围0.001~4000.0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetMaxDec(short mc, short axis, float dec);
/// <summary>
/// 设值辅助编码器的初值
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="auxenc"> 辅助编码器索引取值范围0,1</param>
/// <param name="pos">初值单位p或物理量纲分辨率</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPosAux(short mc, short auxenc, int pos);
/// <summary>
/// 读取辅助编码器的计数值
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="auxenc"> 辅助编码器索引取值范围0,1</param>
/// <param name="pos">计数值单位p或物理量纲分辨率</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetPosAux(short mc, short auxenc, ref int pos);
/// <summary>
/// 绝对式P2P运动启动
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_JogA(short mc, uint axes);
/// <summary>
/// 相对式P2P运动启动
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_JogR(short mc, uint axes);
/// <summary>
/// 正向连续点动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_JogPlus(short mc, uint axes);
/// <summary>
/// 负向连续点动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_JogMinus(short mc, uint axes);
/// <summary>
/// 设置轴运动的目标位置
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <param name="pos">目标位置</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPosT(short mc, uint axes, int pos);
/// <summary>
/// 设置轴运动的目标速度
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <param name="vel">目标速度范围0~4095.0 p/ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetVelT(short mc, uint axes, float vel);
/// <summary>
/// 设置轴运动的目标加速度
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <param name="acc">目标加速度范围0~4095.0 p/ms^2</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetAccT(short mc, uint axes, float acc);
/// <summary>
/// 设置轴运动的目标减速度
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <param name="dec">目标减速度范围0~4095.0 p/ms^2</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetDecT(short mc, uint axes, float dec);
/// <summary>
/// 设置轴运动的速度平滑时间
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <param name="tm">平滑时间范围0~65535 ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetSmthT(short mc, uint axes, ushort tm);
/// <summary>
/// 设置轴运动的启动速度
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="axes">按位掩码的轴选择</param>
/// <param name="vel">启动速度范围0~4095.0 p/ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetVelS(short mc, uint axes, float vel);
#endregion 点位运动
#region 插补运动
#region 通道操作
/// <summary>
/// 通道启动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="chs">按位掩码的通道选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChStart(short mc, ushort chs);
/// <summary>
/// 通道停止
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="chs">按位掩码的通道选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChStop(short mc, ushort chs);
/// <summary>
/// 通道紧急停止
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="chs">按位掩码的通道选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChEStop(short mc, ushort chs);
/// <summary>
/// 通道保持
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="chs">按位掩码的通道选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChHold(short mc, ushort chs);
/// <summary>
/// 通道复位
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="chs">按位掩码的通道选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChReset(short mc, ushort chs);
/// <summary>
/// 通道单步选项
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="chs">按位掩码的通道选择</param>
/// <param name="on">单步选项方式取值范围1 - 通道按单步方式运行0 - 通道按连续方式运行默认值为0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChStepOption(short mc, ushort chs, short on = 0);
/// <summary>
/// 设置通道对应的BLOCK命令缓冲器
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="buff">缓冲器索引取值范围0~9</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChSetBuffer(short mc, short ch, short buff);
/// <summary>
/// 读取通道正在执行的BLOCK命令的模式
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="mode">BLOCK命令模式取值范围
/// 00 - 无效模式
/// 01 - 快速点定位
/// 02 - 直线插补
/// 03 - 空间圆弧插补
/// 04 - 坐标平面圆弧插补
/// 05 - 停留延时
/// 06 - 等待
/// 07 - 数字输出
/// 99 - 结束
/// </param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChGetBlockMode(short mc, short ch, ref short mode);
/// <summary>
/// 读取通道的运行状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="running">按位掩码表示的通道运行标志</param>
/// <param name="stopped">按位掩码表示的通道中各轴运动停止标志</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChGetStatus(short mc, ref short running, ref short stopped);
/// <summary>
/// 读取通道的实际进给速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="feed">实际速度单位物理量纲相当于mm(deg)/sum(0.001deg)/ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChGetActualFeed(short mc, short ch, ref float feed);
/// <summary>
/// 读取通道的当前插补块的命令进给速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="feed">当前命令进给速度单位物理量纲相当于mm(deg)/sum(0.001deg)/ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChGetCommandFeed(short mc, short ch, ref float feed);
/// <summary>
/// 读取通道当前执行块的块号
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="id">块号</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChGetBlockID(short mc, short ch, ref uint id);
/// <summary>
/// 设置通道运动参数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="acc">加速度取值范围0.001~4000.0单位物理量纲相当于m(Kdeg)/s^2,um(0.001deg)/ms^2</param>
/// <param name="str_vel">起跳速度取值范围0.001~8000.0单位物理量纲相当于mm(deg)/s, um(0.001deg)/ms</param>
/// <param name="end_vel">截止速度取值范围0.001~8000.0单位物理量纲相当于mm(deg)/s, um(0.001deg)/ms</param>
/// <param name="smth">速度平滑时间取值范围0~65535 单位ms</param>
/// <param name="bldtm">转角过渡时间取值范围0~65535单位ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChSetMoveParam(short mc, short ch, float acc, float str_vel, float end_vel, ushort smth = 0, ushort bldtm = 0);
/// <summary>
/// 设置通道运动约束参数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="max_vel"> 最大速度取值范围0.001~8000.0单位物理量纲相当于mm(deg)/s, um(0.001deg)/ms</param>
/// <param name="max_acc"> 最大加速度取值范围0.001~4000.0单位物理量纲相当于m(Kdeg)/s^2,um(0.001deg)/ms^2</param>
/// <param name="chord_err">弓高误差取值范围0.001~100.0单位物理量纲相当于mmdeg默认值为1.0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChSetConstraints(short mc, short ch, float max_vel, float max_acc, float chord_err = 1.0f);
/// <summary>
/// 设置通道的坐标
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="num">坐标数取值范围1~6</param>
/// <param name="crd_map">通道的坐标与控制器的轴号的对应关系最大6坐标</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChSetCoordinate(short mc, short ch, short num, short[] crd_map);
/// <summary>
/// 读取通道的坐标
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="num">坐标数取值范围1~6</param>
/// <param name="crd_map">通道的坐标与控制器的轴号的对应关系最大6坐标</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChGetCoordinate(short mc, short ch, ref short num, short[] crd_map);
/// <summary>
/// 设置坐标系的修调率
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="ovrd">修调值取值范围0~200 单位:%</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChSetOverride(short mc, short ch, short ovrd);
/// <summary>
/// 读取通道的修调率
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="ovrd">修调值,单位:%</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChGetOverride(short mc, short ch, ref short ovrd);
/// <summary>
/// 读取通道的M功能代码
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="code">M功能代码号</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChGetMCode(short mc, short ch, ref short code);
/// <summary>
/// 设置通道的M功能代码的响应值
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ch">通道号取值范围0~3</param>
/// <param name="code">M功能代码执行结束后做出响应的代码</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChSetMCodeResponse(short mc, short ch, short code);
#endregion 通道操作
#region BLOCK(插补)命令缓冲区
/// <summary>
/// BLOCK命令缓冲区复位
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BufferReset(short mc, short buff);
/// <summary>
/// 设置BLOCK命令缓冲区属性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="size">缓冲区空间取值范围1~20000</param>
/// <param name="mode">缓冲区模式取值范围0 - FIFO1 - 循环队列Round Robin默认值为0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BufferSetParam(short mc, short buff, short size, short mode = 0);
/// <summary>
/// 读取BLOCK命令缓冲区的空闲空间
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="preb_free">预缓冲区的空闲空间</param>
/// <param name="buff_free">缓冲区的空闲空间</param>
/// <returns>成功返回0</returns>
/// <remarks>只要预缓冲区的空闲空间大于0就可以调用BLOCK插补命令</remarks>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BufferGetSpace(short mc, short buff, ref short preb_free, ref short buff_free);
#endregion BLOCK(插补)命令缓冲区
#region BLOCK(插补)命令
/// <summary>
/// BLOCK命令中的快速点位运动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="pos">坐标系中的坐标位置数组最多6个坐标单位物理量纲分辨率</param>
/// <param name="crdmode">位掩码表示的通道中各坐标编程模式取值范围0-绝对坐标1-相对坐标默认值为0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockRapid(short mc, short buff, uint bid, int[] pos, ushort crdmode = 0);
/// <summary>
/// BLOCK命令中的线性插补
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="pos">坐标系中的坐标位置数组最多6个坐标单位物理量纲分辨率</param>
/// <param name="blend">转角过渡模式取值范围0-减速至零停止1-自动圆角过渡2-起跳速度尖角过渡3-截止速度尖角过渡,其它值-保留默认值为0</param>
/// <param name="crdmode">位掩码表示的通道中各坐标编程模式取值范围0-绝对坐标1-相对坐标默认值为0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockLinear(short mc, short buff, uint bid, int[] pos, short blend = 0, ushort crdmode = 0);
/// <summary>
/// BLOCK命令中的任意平面圆弧插补
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="ep1,ep2,ep3">圆弧终点坐标,单位:物理量纲分辨率</param>
/// <param name="mp1,mp2,mp3">圆弧的中间点坐标或中心坐标,单位:物理量纲分辨率</param>
/// <param name="mode">圆弧表达方式0 - 3点表达的圆弧1 - 3点表达的整圆2 - 圆心表达的顺时针圆弧或整圆3 - 圆心表达的逆时针圆弧或整圆默认值为0</param>
/// <param name="blend"> 转角过渡模式取值范围0-减速至零停止1-自动圆角过渡2-起跳速度转角过渡3-截止速度转角过渡,其它值-保留默认值为0</param>
/// <param name ="crdmode">位掩码表示的通道中各坐标编程模式取值范围0-绝对坐标1-相对坐标默认值为0</param>
/// <returns>成功返回0</returns>
/// <remark>3点方式的整圆表达时终点与起点不能重合3个坐标分别是通道坐标系中的前3个坐标</remark>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockArc3(short mc, short buff, uint bid, int ep1, int ep2, int ep3, int mp1, int mp2, int mp3, short mode = 0, short blend = 0);
/// <summary>
/// BLOCK命令中的坐标平面内圆弧插补
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="ep1,ep2">圆弧终点坐标,单位:物理量纲分辨率</param>
/// <param name="mp1,mp2">中间点圆心坐标,单位:物理量纲分辨率</param>
/// <param name="crd1,crd2">两个坐标对应的通道坐标索引默认值crd1=0crd2=1</param>
/// <param name="mode">圆弧表达方式0 - 3点表达的圆弧1 - 3点表达的整圆2 - 圆心表达的顺时针圆弧或整圆3 - 圆心表达的逆时针圆弧或整圆默认值为0</param>
/// <param name="blend">转角过渡模式取值范围0-减速至零停止1-自动圆角过渡2-起跳速度转角过渡3-截止速度转角过渡,其它值-保留默认值为0</param>
/// <param name ="crdmode">位掩码表示的通道中各坐标编程模式取值范围0-绝对坐标1-相对坐标默认值为0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockArc2(short mc, short buff, uint bid, int ep1, int ep2, int mp1, int mp2, short crd1 = 0, short crd2 = 1, short mode = 0, short blend = 0, short crdmode = 0);
/// <summary>
/// BLOCK命令中的停留
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="tm">停留时间取值范围0~65535单位ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockDwell(short mc, short buff, uint bid, ushort tm);
/// <summary>
/// BLOCK命令中的等待IO输入电平
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="node">IO控制器从站地址取值范围0~15从站地址为0表示运动控制器本地的IO从站地址1~15表示扩展的IO控制器</param>
/// <param name="index">站内输入位索引</param>
/// <param name="level">输入电平取值范围0 - 逻辑低1 - 逻辑高</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockWait(short mc, short buff, uint bid, short node, short port, short level);
/// <summary>
/// BLOCK命令中的数字IO输出
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="node">IO控制器从站取值范围0~15从站地址为0表示运动控制器本地的IO从站地址1~15表示扩展的IO控制器</param>
/// <param name="index">站内输出的位索引</param>
/// <param name="level">输出电平取值范围0-逻辑低1-逻辑高</param>
/// <param name="qdelay">输出持续时间,取值范围:-1~2^31单位us</param>
/// <param name="toggle">是否电平翻转取值范围0-不翻转1-翻转</param>
/// <param name="tdelay">翻转后持续时间,取值范围:-1~2^31单位us</param>
/// <param name="count">翻转计数取值范围1~2^31</param>
/// <returns>成功返回0</returns>
/// <remark>持续时间取值为-1表示永久时间</remark>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockDOut(short mc, short buff, uint bid, short node, short index, short level, int qdelay, short toggle, int tdelay, int count);
/// <summary>
/// BLOCK命令中的进给速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="feed">进给速度取值范围0.001~4000.0单位物理量纲相当于mm/sdeg/s, um/ms, 0.001deg/ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockFeed(short mc, short buff, uint bid, float feed);
/// <summary>
/// BLOCK命令中的M功能代码
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <param name="code">M功能代码号取值范围0~32767</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockMCode(short mc, short buff, uint bid, short code);
/// <summary>
/// BLOCK命令中的以方式A进行位置比较输出
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="firstorlast">第一点或最后一点取值范围0 - 中间点1 - 第一点2 - 最后一点3 - 只有一个点。默认值为0</param>
/// <param name="pos">比较输出的矢量长度位置,单位:物理量纲分辨率</param>
/// <param name="port">输出端口取值范围0~15</param>
/// <param name="level">输出电平取值范围0-逻辑低1-逻辑高</param>
/// <param name="possrc">位置源取值范围0-脉冲位置1-编码器位置默认值为0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockComparePosA(short mc, short buff, int pos, short port, short level, short firstorlast = 0, short possrc = 0);
/// <summary>
/// BLOCK命令中的以方式B进行位置比较输出
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="firstorlast">第一点或最后一点取值范围0 - 中间点1 - 第一点2 - 最后一点3 - 只有一个点。默认值为0</param>
/// <param name="pos">比较输出的矢量长度位置,单位:物理量纲分辨率</param>
/// <param name="port">输出端口取值范围0~15</param>
/// <param name="level">输出电平取值范围0-逻辑低1-逻辑高</param>
/// <param name="pwmperiod">pwm输出方式时的周期时间取值范围1~2^31单位us </param>
/// <param name="pwmduty">pwm输出方式时的前期时间取值范围1~2^31 单位us</param>
/// <param name="pwmcount">pwm输出方式时的脉冲数取值范围1~2^31</param>
/// <param name="possrc">位置源取值范围0-脉冲位置1-编码器位置默认值为0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockComparePosB(short mc, short buff, short firstorlast, int pos, short port, short level, int pwmperiod, int pwmduty, int pwmcount, short possrc = 0);
/// <summary>
/// BLOCK命令中的结束
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="buff">缓冲区索引取值范围0~9</param>
/// <param name="bid">BLOCK命令的块号无逻辑含义</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_BlockEnd(short mc, short buff, uint bid);
#endregion BLOCK(插补)命令
#endregion 插补运动
#region 位置锁存
/// <summary>
/// 启动锁存功能
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="units">按位掩码的锁存单元选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_LatchBegin(short mc, uint units);
/// <summary>
/// 结束锁存功能
/// </summary>
/// <param name="mc">控制器序号</param>
/// <param name="units">按位掩码的锁存单元选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_LatchEnd(short mc, uint units);
/// <summary>
/// 设置位置锁存的参数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="unit">锁存单元号取值范围0~7</param>
/// <param name="src">位置源1-编码器位置0-命令位置。</param>
/// <param name="axis">位置源的轴号,取值范围:控制器支持的轴号</param>
/// <param name="trigger">触发信号源,取值范围:
/// 0-编码器Z相信号
/// 1-零点开关
/// 2-通用输入
/// 3-位置比较输出
/// </param>
/// <param name="edge">触发边沿0-上升沿1-下降沿2-上升下降沿</param>
/// <param name="index">触发信号源的索引,取值范围:控制器支持的轴号或输入</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLatchParam(short mc, short unit, short src, short axis, short trigger, short edge, short index);
/// <summary>
/// 读取轴的锁存的位置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="unit"> 锁存单元号,取值范围0~7</param>
/// <param name="pos">锁存位置数组其大小取决于用户锁存的最大位值数256</param>
/// <param name="numofcapt">本次锁存过程中,已锁存的位置数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetLatchPos(short mc, short unit, int[] pos, ref short numofcapt);
/// <summary>
/// 读取轴的已锁存的位置个数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="unit">锁存单元号取值范围0~7</param>
/// <param name="numofcapt">已捕捉的位置个数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetLatchNum(short mc, short unit, ref short numofcapt);
#endregion 位置锁存
#region 位置比较
/// <summary>
/// 启动位置比较功能
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="units">按位掩码的比较单元选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_CompareBegin(short mc, uint units);
/// <summary>
/// 结束位置比较功能
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="units">按位掩码的比较单元选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_CompareEnd(short mc, uint units);
/// <summary>
/// 设置位置比较的参数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="unit">比较单元号取值范围0~7</param>
/// <param name="src">位置源0-命令位置1-编码器位置</param>
/// <param name="axis">位置源的轴号,取值范围:控制器支持的轴号</param>
/// <param name="portbit">比较输出端口选择取值范围0~15</param>
/// <param name="portpol">比较输出端口极性1-正逻辑上升沿0-负逻辑,下降沿</param>
/// <param name="porten">比较输出端口使能1-比较输出0-通用输出</param>
/// <param name="width">比较输出的宽度取值范围1~2^32单位us</param>
/// <returns>成功返回0</returns>
/// <remark>位置比较单元可以关联不同的轴号</remark>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetCompareParam(short mc, short unit, short src, short axis, short portbit, short portpol, short porten, uint width);
/// <summary>
/// 设置比较的位置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="unit">比较单元选择取值范围0~7</param>
/// <param name="pos">比较的位置数据数组</param>
/// <param name="numtocmpr">比较位置的个数取值范围1~256</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetComparePos(short mc, short unit, int[] pos, short numtocmpr);
/// <summary>
/// 读取轴的已完成的比较位置的个数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="unit">比较单元号取值范围0~7</param>
/// <param name="numofcmpr">返回已完成比较位置的个数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetCompareNum(short mc, short unit, ref short numofcmpr);
#endregion 位置比较
#region 在线更改位置和速度
/// <summary>
/// 在线更改位置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pos">绝对位置单位p或物理量纲分辨率取值范围+/-2^31</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChangeFlyPos(short mc, short axis, int pos);
/// <summary>
/// 在线更改速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="vel">速度单位p(或物理量纲分辨率)/ms取值范围0.001~8000.0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ChangeSpeedOnTheFly(short mc, short axis, float vel);
#endregion 在线更改位置和速度
#region 属性设置
/// <summary>
/// 报警清除
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="on"> 复位信号1-设置复位0-关闭复位</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ResetAlarm(short mc, short axis, short on);
/// <summary>
/// 伺服激活
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="on"> 伺服激活1-激活0-失效</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetServoOn(short mc, short axis, short on);
/// <summary>
/// 配置EMG
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="en">EMG使能0-无效,仅作为通用输入</param>
/// <param name="pol">EMG的极性0-正极性1-负极性</param>
/// <param name="port"> EMG端口取值范围-1 - EMG专用端口0~15 - 通用输入口0~15</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetEMGConfig(short mc, short en, short pol, short port = -1);
/// <summary>
/// 设置零点开关极性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pol">零点开关极性1-正0-负</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetHomePol(short mc, short axis, short pol);
/// <summary>
/// 设置正向限位开关有效性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="on">开关1-开0-关</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPOTOn(short mc, short axis, short on);
/// <summary>
/// 设置负向限位开关有效性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="on">开关1-开0-关</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetNOTOn(short mc, short axis, short on);
/// <summary>
/// 设置正向限位开关极性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pol">极性1-正0-负</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPOTPol(short mc, short axis, short pol);
/// <summary>
/// 设置负向限位开关极性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pol">极性1-正0-负</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetNOTPol(short mc, short axis, short pol);
/// <summary>
/// 设置编码器有效性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="on">有效性1-有效0-无效</param>
/// <param name="peq_invalid">轴的脉冲当量是否无效1-脉冲当量无效0-脉冲当量有效</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetEncoderOn(short mc, short axis, short on, short peq_invalid = 0);
/// <summary>
/// 设置编码器的计数极性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pol">极性1-正0-负</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetEncoderPol(short mc, short axis, short pol);
/// <summary>
/// 设置编码器索引信号极性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pol">极性1-正0-负</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetEncoderIndexPol(short mc, short axis, short pol);
/// <summary>
/// 设置报警信号有效性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="on">有效性1-有效0-无效</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetAlarmOn(short mc, short axis, short on);
/// <summary>
/// 设置报警信号的极性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pol">极性1-正0-负</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetAlarmPol(short mc, short axis, short pol);
/// <summary>
/// 设置脉冲输出方式
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="mode">模式1-CCW+CW0-PULSE+DIR</param>
/// <param name="edge">边沿0-上升沿1-下降沿默认值为0</param>
/// <param name="dirpol">脉冲方向的极性1-正极性0-负极性默认值为0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPulseMode(short mc, short axis, short mode, short edge = 0, short dirpol = 0);
/// <summary>
/// 设置轴位移是按模数运动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="mod">是否按位移模数运动1-按模数位移0-按广义直线位移</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetModular(short mc, short axis, short mod);
/// <summary>
/// 设置电子齿轮比
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="master">主动轮齿数取值范围1~2^32</param>
/// <param name="slave">从动轮齿数取值范围1~2^32</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetGearRatio(short mc, short axis, uint master, uint slave);
/// <summary>
/// 设置轴的脉冲当量
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号,取值范围:控制器支持的轴号</param>
/// <param name="pulse">脉冲数单位p取值范围1~2^32</param>
/// <param name="disp">位移单位物理量纲分辨率取值范围1~2^32</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPulseRatio(short mc, short axis, uint pulse, uint disp);
/// <summary>
/// 设置辅助编码器的脉冲当量
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="auxenc">辅助编码器索引取值范围0,1</param>
/// <param name="pulse">脉冲数单位p取值范围1~2^32</param>
/// <param name="disp">位移单位物理量纲分辨率取值范围1~2^32</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetPulseRatioAux(short mc, short auxenc, uint pulse, uint disp);
#endregion 属性设置
#region 电子齿轮操作
/// <summary>
/// 设置电子齿轮的属性
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="slave">从动轴号,取值范围:控制器支持的轴号</param>
/// <param name="master">主动轴号,取值范围:控制器支持的轴号</param>
/// <param name="dir">跟随方向取值范围0 - 同向1 - 反向</param>
/// <param name="possrc">跟随位置源取值范围0 - 命令位置1 - 实际位置</param>
/// <param name="mode">电子齿轮跟随模式取值范围0 - 位置跟随1 - 速度跟随</param>
/// <param name="trans">飞行改变齿轮比的平滑过渡距离</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_EGearSetParam(short mc, short slave, short master, short dir, short possrc, short mode, int trans);
/// <summary>
/// 启用电子齿轮
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axes">按位掩码表示的从动轴的轴选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_EGearStart(short mc, uint axes);
/// <summary>
/// 停止电子齿轮
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axes">按位掩码表示的从动轴的轴选择</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_EGearStop(short mc, uint axes);
/// <summary>
/// 读取各轴的电子齿轮激活状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="stat">按位掩码表示的各轴电子齿轮生效状态各位含义0-失效1-激活</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_EGearGetStatus(short mc, ref uint stat);
#endregion 电子齿轮操作
#region 驱控一体A型
/****************************************************************************************
* @Begin 驱控一体A型
****************************************************************************************/
/// <summary>
/// 驱控一体A型参数设置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号取值范围0~7共8个轴</param>
/// <param name="resolution">细分取值范围1,2,4,8,16,32,64,128,256</param>
/// <param name="current">电流取值范围100~3200mA间隔100mA</param>
/// <param name="torque">堵转扭矩取值范围0%~100%</param>
/// <param name="mode">工作模式取值范围0-位置模式2-力矩模式</param>
/// <param name="noload">空载扭矩参考值取值范围1~1000无量纲默认值为400</param>
/// <param name="sgt">扭矩检测灵敏度,取值范围:-10~63 无量纲默认值为10</param>
/// <returns>成功返回0</returns>
/// <remarks>当轴工作在力矩模式时,遇到堵转信号,轴就自动停止脉冲信号。其它模式下,遇到堵转信号,轴继续发送脉冲信号。</remarks>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetDCIAParam(short mc, short axis, short resolution, short current, short torque, short mode = 0, short noload = 400, short sgt = 10);
/**
* @brief 驱控一体A型状态
* @param mc 控制器索引
* axis 轴号取值范围0~7共8个轴
* sg_flag 堵转的保持标志范围0 - 无堵转1 - 已堵转
* sg 堵转的实时状态范围0 - 无堵转1 - 已堵转
* sg_value 实时力矩范围0 ~ 100%
* @return 成功返回0
* @remark 只有在轴运动停止时查询的堵转的保持标志才有效。有P2P或Jog命令时此标志自动清除。
*/
/// <summary>
/// 驱控一体A型状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="axis">轴号取值范围0~7共8个轴</param>
/// <param name="sg_flag">堵转的保持标志范围0 - 无堵转1 - 已堵转</param>
/// <param name="sg">堵转的实时状态范围0 - 无堵转1 - 已堵转</param>
/// <param name="sg_value">实时力矩范围0 ~ 100%</param>
/// <returns>成功返回0</returns>
/// <remarks>只有在轴运动停止时查询的堵转的保持标志才有效。有P2P或Jog命令时此标志自动清除。</remarks>
//[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
//public static extern short ZT_GetDCIAStatus(short mc, short axis, short* sg_flag, short* sg, short* sg_value);
/****************************************************************************************
* @End 驱控一体A型
****************************************************************************************/
#endregion 驱控一体A型
#region IO操作
/// <summary>
/// 设置IO站的配置信息
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0-控制器本地1~15扩展站点</param>
/// <param name="type">站点IO类型取值范围0-数字IO其它值-预留/param>
/// <param name="bytesofin">站点的输入字节数</param>
/// <param name="bytesofout">站点输出字节数</param>
/// <param name="valid">站点有效性取值范围1-本站点有效0-本站点无效默认值为1</param>
/// <returns></returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetIOConfig(short mc, short node, short type, short bytesofin, short bytesofout, short valid = 1);
/// <summary>
/// 读取IO站的配置状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0-控制器本地1~15扩展站点</param>
/// <param name="type">站点IO类型取值范围0-数字IO其它值-预留/param>
/// <param name="bytesofin">站点的输入字节数</param>
/// <param name="bytesofout">站点输出字节数</param>
/// <param name="stat">站点的配置状态,值含义:-1 - 站通讯超时0 - 无效站点1 - 站通讯正常</param>
/// <returns></returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetIOConfig(short mc, short node, ref short type, ref short bytesofin, ref short bytesofout, ref short stat);
/// <summary>
/// 保存IO站的配置信息
/// </summary>
/// <param name="mc">控制器索引</param>
/// <returns>成功返回</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SaveIOConfig(short mc);
/// <summary>
/// 恢复出厂配置信息
/// </summary>
/// <param name="mc">控制器索引</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ResetIOConfig(short mc);
/// <summary>
/// 启动当前配置
/// </summary>
/// <param name="mc">控制器索引</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_StartIOConfig(short mc);
/// <summary>
/// 设置输出的位的状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内的输出端口位索引</param>
/// <param name="data"> 输出值取值范围01</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetOutBit(short mc, short node, short index, ushort data);
/// <summary>
/// 按位翻转输出的端口状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内的输出端口位索引</param>
/// <param name="data"> 输出值取值范围01</param>
/// <param name="delay_time">延时输出时间取值范围0~65535单位ms</param>
/// <param name="toggle_time">延时翻转时间取值范围0~65535单位ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ToggleOutBit(short mc, short node, short index, ushort data, ushort delay_time = 0, ushort toggle_time = 0);
/// <summary>
/// 设置输出的字节的状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内的输出端口的字节索引</param>
/// <param name="data">输出值取值0~0xFF</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetOutByte(short mc, short node, short index, ushort data);
/// <summary>
/// 设置输出的字的状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内的输出端口的字索引</param>
/// <param name="data">输出值取值0~0xFFFF</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetOutWord(short mc, short node, short index, ushort data);
/// <summary>
/// 设置输出的双字的状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内的输出端口的双字索引</param>
/// <param name="data">输出值取值0~0xFFFFFFFF</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetOutDWord(short mc, short node, short index, uint data);
/// <summary>
/// 按位读取输出
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内的输出端口的位索引</param>
/// <param name="data">端口状态值返回值0,1</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetOutBit(short mc, short node, short index, ref ushort data);
/// <summary>
/// 按字节读取输出
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内的输出端口的字节索引</param>
/// <param name="data"> 端口状态值返回值0~0xFF</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetOutByte(short mc, short node, short index, ref ushort data);
/// <summary>
/// 按字读取输出
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内的输出端口的字索引</param>
/// <param name="data">端口状态值返回值0~0xFFFF</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetOutWord(short mc, short node, short index, ref ushort data);
/// <summary>
/// 按双字读取输出
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">端口状态值双字索引</param>
/// <param name="data">端口状态值返回值0~0xFFFFFFFF</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetOutDWord(short mc, short node, short index, ref uint data);
/// <summary>
/// 按位读取输入
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内输入端口的位索引</param>
/// <param name="data">端口状态值返回值01</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetInBit(short mc, short node, short index, ref ushort data);
/// <summary>
/// 按字节读取输入
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内输入端口的字节索引</param>
/// <param name="data">端口状态值返回值01</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetInByte(short mc, short node, short index, ref ushort data);
/// <summary>
/// 按字读取输入
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内输入端口的字索引</param>
/// <param name="data">端口状态值返回值0~0xFFFF</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetInWord(short mc, short node, short index, ref ushort data);
/// <summary>
/// 按双字读取输入
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="node">站地址取值范围0~15</param>
/// <param name="index">本站内输入端口的双字索引</param>
/// <param name="data">端口状态值返回值0~0xFFFFFFFF</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetInDWord(short mc, short node, short index, ref uint data);
/// <summary>
/// 读取EMG的状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="level">所选择的急停端口的电平</param>
/// <param name="status">急停的作用状态0-无效1-有效</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetEMG(short mc, ref short level, ref short status);
#endregion IO操作
#region 状态操作
/// <summary>
/// 读取各轴正向超程开关状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="POT">按位掩码表示的正向超程开关状态</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetPOT(short mc, ref uint POT);
/// <summary>
/// 读取各轴负向超程开关状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="NOT">按位掩码表示的负向超程开关状态</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetNOT(short mc, ref uint NOT);
/// <summary>
/// 读取各轴的零点开关状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="home">按位掩码表示的各轴零点开关状态</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetHome(short mc, ref uint home);
/// <summary>
/// 读取各轴的正在运行状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="running">按位掩码表示的各轴运行状态各位含义1-运行中0-停止</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetRunning(short mc, ref uint running);
/// <summary>
/// 读取各轴运动到位状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="reached">按位掩码表示的运动到位标志各位含义1-到位0-未到位</param>
/// <returns>成功返回0</returns>
/// <remarks>此标志反映的是伺服驱动器输出的到位信号</remarks>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetReached(short mc, ref uint reached);
/// <summary>
/// 读取各轴正在回零过程的状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="homing">按位掩码表示的各轴正在回零状态1-正在回零过程0-未在回零过程</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetHoming(short mc, ref uint homing);
/// <summary>
/// 读取各轴已完成回零的状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="homed">按位掩码表示的各轴已完成回零的状态1-已完成回零0-未完成回零</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetHomed(short mc, ref uint homed);
/// <summary>
/// 读取各轴电机报警信号状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="alm">按位掩码表示的电机报警状态1-已报警0-未报警</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetAlarm(short mc, ref uint alm);
/// <summary>
/// 读取各轴正向软限位标志
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="psl">按位掩码表示的各轴正向软限位标志1-处于正向软限位0-未处于正向软限位</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetPSLFlag(short mc, ref uint psl);
/// <summary>
/// 读取各轴负向软限位标志
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="nsl">按位掩码表示的各轴负向软限位标志1-处于负向软限位0-未处于负向软限位</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetNSLFlag(short mc, ref uint nsl);
/// <summary>
/// 读取各轴伺服激活状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="status">按位掩码表示的各轴伺服激活状态各位含义1-使能0-未使能</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetServoStatus(short mc, ref uint status);
#endregion 状态操作
#region 大数据传送状态检测
/// <summary>
/// 大数据传送的一次往返循环是否结束
/// </summary>
/// <param name="mc">控制器索引</param>
/// <returns>0一次传送结束1一次传送未结束</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetHugeDataBusy(short mc);
/// <summary>
/// 大数据传送的一次往返循环是否成功
/// </summary>
/// <param name="mc">控制器索引</param>
/// <returns>0成功非0错误</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetHugeDataError(short mc);
#endregion 大数据传送状态检测
#region 文件操作
/// <summary>
/// 读取文件状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">文件索引,取值范围:</param>
/// <param name="status">文件状态,各位的含义:
/// bit0 - 文件打开标志1文件已打开0文件未打开
/// bit1 - 文件传送标志1文件正在传送0文件停止传送
/// bit2 - 文件头标志1文件头
/// bit3 - 文件尾标志1文件尾
/// bit4 - 保留
/// bit5 - 保留
/// bit6 - 文件错误标志1文件错误0文件正确
/// bit7 - 保留
/// bit8~15 - 保留
/// </param>
/// <param name="bytesofrw">已传送的字节数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_FileGetStatus(short mc, short index, ref ushort status, ref int bytesofrw);
/// <summary>
/// 打开读写文件
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="fileno">文件索引,取值范围:</param>
/// <param name="buf">文件缓冲区</param>
/// <param name="bytestorw">需要传送的字节数</param>
/// <param name="access">访问方式取值范围0 - 从控制器传送到服务1- 从服务传送到控制器</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_FileOpen(short mc, short index, char[] buf, int bytestorw, short access);
/// <summary>
/// 文件传送启动
/// </summary>
/// <param name="mc">控制器索引</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_FileRW(short mc);
/// <summary>
/// 关闭读写文件
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">文件索引,取值范围:</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_FileClose(short mc, short index);
#endregion 文件操作
#region 串口通讯
/// <summary>
/// 设置串口通讯的参数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="com">串口索引0-RS4851-RS232A2-RS232B</param>
/// <param name="baud">串口波特率2400,4800,9600,19200,38400,57600,115200,等</param>
/// <param name="databits">串口数据位数5,6,7,8</param>
/// <param name="stopbits">串口数据停止位数1,2</param>
/// <param name="parity">串口数据奇偶校验0-无校验1-奇校验2-偶校验</param>
/// <param name="mode">串口工作模式0-自由协议模式1-Modebus RTU Slave2-Modbus RTU Master15-单指令运动命令</param>
/// <param name="timeout">串口通讯超时设定0~65535</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetComParam(short mc, short com, int baud, short databits, short stopbits, short parity, short mode, ushort timeout);
/// <summary>
/// 串口通讯中数据交换的字节读
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="bptr">需要读取的数据交换区的字节地址范围0~63</param>
/// <param name="numtoread">需要读取的字节数</param>
/// <param name="data">用户声明的数据缓冲区</param>
/// <param name="numofread">已读取的字节数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetComDataByte(short mc, short bptr, short numtoread, short[] data, ref short numofread);
/// <summary>
/// 串口通讯中数据交换的字读
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="wptr">需要读取的数据交换区的字地址范围0~31</param>
/// <param name="numtoread">需要读取的字数</param>
/// <param name="data">用户声明的数据缓冲区</param>
/// <param name="numofread">已读取的字数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetComDataWord(short mc, short wptr, short numtoread, ushort[] data, ref short numofread);
/// <summary>
/// 串口通讯中数据交换的双字读
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="dwptr">需要读取的数据交换区的双字地址范围0~15</param>
/// <param name="numtoread">需要读取的双字数</param>
/// <param name="data">用户声明的数据缓冲区</param>
/// <param name="numofread">已读取的双字数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetComDataDWord(short mc, short dwptr, short numtoread, uint[] data, ref short numofread);
/// <summary>
/// 串口通讯中数据交换的浮点数读
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="fptr">需要读取的数据交换区的浮点数地址范围0~15</param>
/// <param name="numtoread">需要读取的浮点数的数量</param>
/// <param name="data">用户声明的数据缓冲区</param>
/// <param name="numofread">已读取的浮点数的数量</param>
/// <param name=""></param>
/// <param name=""></param>
/// <param name=""></param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetComDataFloat(short mc, short fptr, short numtoread, float[] data, ref short numofread);
/// <summary>
/// 串口通讯数据交换的字节写
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="bptr">需要写的数据交换区的字节地址范围0~63</param>
/// <param name="numtowrite">需要写的字节数</param>
/// <param name="data">用户声明的数据缓冲区</param>
/// <param name="numofwritten">已写的字节数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetComDataByte(short mc, short bptr, short numtowrite, short[] data, ref short numofwritten);
/// <summary>
/// 串口通讯数据交换的字写
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="wptr">需要写的数据交换区的字地址范围0~31</param>
/// <param name="numtowrite">需要写的字数</param>
/// <param name="data">用户声明的数据缓冲区</param>
/// <param name="numofwritten">已写的字数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetComDataWord(short mc, short wptr, short numtowrite, ushort[] data, ref short numofwritten);
/// <summary>
/// 串口通讯数据交换的双字写
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="dwptr">需要写的数据交换区的双字地址范围0~15</param>
/// <param name="numtowrite">需要写的双字数</param>
/// <param name="data">用户声明的数据缓冲区</param>
/// <param name="numofwritten">已写的双字数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetComDataDWord(short mc, short dwptr, short numtowrite, uint[] data, ref short numofwritten);
/// <summary>
/// 串口通讯数据交换的浮点数写
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="fptr">需要写的数据交换区的浮点数地址范围0~15</param>
/// <param name="numtowrite">需要写的浮点数的数量</param>
/// <param name="data">用户声明的数据缓冲区</param>
/// <param name="numofwritten">已写的浮点数的数量</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetComDataFloat(short mc, short fptr, short numtowrite, float[] data, ref short numofwritten);
/// <summary>
/// Modbus寄存器(16bit)读命令
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="com">串口索引0-RS485 1-RS232A2-RS232B</param>
/// <param name="addr">从站地址</param>
/// <param name="reg">寄存器起始地址</param>
/// <param name="num">寄存器数量</param>
/// <param name="wptr">数据交换区索引范围0~31</param>字
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ModbusReadReg(short mc, short com, short addr, ushort reg, ushort num, short wptr);
/// <summary>
/// Modbus寄存器(16bit)写命令
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="com">串口索引0-RS485 1-RS232A2-RS232B</param>
/// <param name="addr">从站地址</param>
/// <param name="reg">寄存器起始地址</param>
/// <param name="num">寄存器数量</param>
/// <param name="wptr">数据交换区字索引范围0~31</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ModbusWriteReg(short mc, short com, short addr, ushort reg, ushort num, short wptr);
/// <summary>
/// 启动串口通讯
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="com">串口索引0-RS485 1-RS232A2-RS232B</param>
/// <param name="onshot">0-连续通讯方式1-单次通讯方式</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ComStart(short mc, short com, short oneshot);
/// <summary>
/// 停止串口通讯
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="com">串口索引0-RS485 1-RS232A2-RS232B</param>
/// <returns>成功返回0</returns>
///
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_ComStop(short mc, short com);
/// <summary>
/// 读串口通讯状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="com">串口索引0-RS4851-RS232A2-RS232B</param>
/// <param name="stat">串口通讯状态,状态值含义,
/// bit 0 - 串口运行状态0空闲1正在通讯
/// bit 1 -
/// bit 2 -
/// bit 3 - modbus校验错误0无错1CRC错误
/// bit 4 -
/// bit 5 -
/// bit 6 -
/// bit 7 - 串口通讯超时0无超时1超时
/// </param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetComStatus(short mc, short com, ref short stat);
#endregion 串口通讯
#region 锁附指令
/// <summary>
/// 设置锁附轴号
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="r_axis">R轴轴号</param>
/// <param name="enc_axis">光栅轴号</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairAxis(short mc, short index, short r_axis, short enc_axis);
/// <summary>
/// 设置锁附速度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="hivel">锁附高速单位p/ms取值范围0.001~8000.0</param>
/// <param name="lovel">锁附低速单位p/ms取值范围0.001~8000.0</param>
/// <param name="dec">锁附减速度单位p/ms^2取值范围0.001~4000.0</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairVel(short mc, short index, float hivel, float lovel, float dec);
/// <summary>
/// 设置锁附高度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="lock_h">锁附高度绝对高度单位p</param>
/// <param name="align_h">对位高度相对高度单位p</param>
/// <param name="trqsamp_h">后段采集扭力高度相对高度单位p</param>
/// <param name="lower_h">低速锁的起始高度相对高度单位p</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairHeight(short mc, short index, int lock_h, int align_h, int trqsamp_h, int lower_h);
/// <summary>
/// 设置锁附高度偏差
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="lock_es">锁附高度上偏差单位p</param>
/// <param name="lock_ei">锁附高度下偏差单位p</param>
/// <param name="align_es">对位高度上偏差单位p</param>
/// <param name="align_ei">对位高度下偏差单位p</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairHeightDeviation(short mc, short index, int lock_es, int lock_ei, int align_es, int align_ei);
/// <summary>
/// 设置锁附扭力限制
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="ch">扭力通道</param>
/// <param name="upper">扭力上限</param>
/// <param name="lower">扭力下限</param>
/// <param name="ischecking">是否启用扭力检测取值1-启用0-不启用</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairTrq(short mc, short index, short ch, int upper, int lower, short ischecking);
/// <summary>
/// 设置R轴反转角度
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="rev_aft_lock">锁附后反转角度单位p</param>
/// <param name="rev_bfr_align">对位前反转角度单位p</param>
/// <param name="is_rev_aft_lock">是否启用锁附后反转</param>
/// <param name="is_rev_bfr_align">是否启用对位前反转</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairReverse(short mc, short index, int rev_aft_lock, int rev_bfr_align, int is_rev_aft_lock, int is_rev_bfr_align);
/// <summary>
/// 设置锁附延时
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="dly_aft_lockrev">锁附反转停止后延时单位ms</param>
/// <param name="dly_aft_alignrev">对位反转停止后延时单位ms</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairDelay(short mc, short index, int dly_aft_lockrev, int dly_aft_alignrev);
/// <summary>
/// 设置锁附R轴旋转约束圈数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="hivel_rev">高速锁附旋转圈数约束单位p</param>
/// <param name="lovel_rev">低速锁附旋转圈数约束单位p</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairRestrictRev(short mc, short index, int hivel_rev, int lovel_rev);
/// <summary>
/// 设置锁附Z轴参数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="is_z_valid">Z轴是否有效1-有效0-无效</param>
/// <param name="z_axis">Z轴轴号</param>
/// <param name="hivel">Z轴高速单位p/ms</param>
/// <param name="lovel">Z轴低速单位p/ms</param>
/// <param name="dec">Z轴减速度单位p/ms^2</param>
/// <param name="dec_h">Z轴减速高度单位p</param>
/// <param name="r_rev_h">Z轴触发R轴回转的高度单位p</param>
/// <param name="lock_h">Z轴锁附高度</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetLockPairZ(short mc, short index, short is_z_valid, short z_axis, float hivel, float lovel, float dec, int dec_h, int r_rev_h, int lock_h);
/// <summary>
/// 启动锁附
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_LockPairStart(short mc, short index);
/// <summary>
/// 停止锁附
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_LockPairStop(short mc, short index);
/// <summary>
/// 读取锁附过程状态
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="running">按位掩码表示的各锁附任务的过程状态0-空闲状态1-正在锁附。</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetLockPairRunning(short mc, ref uint running);
/// <summary>
///
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="index">锁附任务索引</param>
/// <param name="res">锁附过程结果</param>
/// <param name="height">锁附完成的高度</param>
/// <param name="trq">锁附完成的扭力</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetLockPairResult(short mc, short index, ref int res, ref int height, ref int trq);
#endregion 锁附指令
#region 系统信息指令
/// <summary>
/// 读取控制器的控制周期计数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="ticks">控制周期计数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetMcTicks(short mc, ref uint ticks);
/// <summary>
/// 读取控制器的特性参数
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="period">控制周期单位ns</param>
/// <param name="axis_num">控制器的最大轴数</param>
/// <param name="ch_max">控制器的最大通道数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetMcProperty(short mc, ref uint period, ref short axis_num, ref short ch_max);
/// <summary>
/// 读取控制器的接口资源
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="di_num">数字输入端口数</param>
/// <param name="do_num">数字输出端口数</param>
/// <param name="ai_num">模拟输入端口数</param>
/// <param name="ao_num">模拟输出端口数</param>
/// <param name="pi_num">脉冲输入端口数</param>
/// <param name="po_num">脉冲输出端口数</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetMcIOResource(short mc, ref short di_num, ref short do_num, ref short ai_num, ref short ao_num, ref short pi_num, ref short po_num);
/// <summary>
/// 读取控制器的型号
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="model">控制器型号</param>
/// <param name="type">控制器功能类型</param>
/// <param name="ver">版本号</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetMcModel(short mc, ref short model, ref short type, ref ushort ver);
/// <summary>
/// 读取控制器的型号
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="arm_ver">控制器型号</param>
/// <param name="fpga_ver">控制器功能类型</param>
/// <param name="service_ver">版本号</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetMcVersion(short mc, ref uint arm_ver, ref uint fpga_ver, ref uint service_ver);
/// <summary>
/// 设置控制器时钟
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="year">年</param>
/// <param name="month">月</param>
/// <param name="mday">日</param>
/// <param name="wday">星期</param>
/// <param name="hour">小时</param>
/// <param name="min">分</param>
/// <param name="sec">秒</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_SetRTC(short mc, short year, short month, short mday, short wday, short hour, short min, short sec);
/// <summary>
/// 读取控制器时钟
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="year">年</param>
/// <param name="month">月</param>
/// <param name="mday">日</param>
/// <param name="wday">星期</param>
/// <param name="hour">小时</param>
/// <param name="min">分</param>
/// <param name="sec">秒</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetRTC(short mc, ref short year, ref short month, ref short mday, ref short wday, ref short hour, ref short min, ref short sec);
/// <summary>
/// 读取控制器动态握手周期
/// </summary>
/// <param name="mc">控制器索引</param>
/// <param name="span">握手间隔单位us</param>
/// <returns>成功返回0</returns>
[DllImport("RS.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern short ZT_GetHandshakeSpan(short mc, ref int span);
#endregion 系统信息指令
#endregion 函数接口
}
}