using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.ComponentModel;
using FObjBase;
using Misc;
using System.Collections.ObjectModel;
namespace FlyADBase
{
///
/// AD盒提供的功能
///
public interface IFlyAD : INotifyPropertyChanged
{
///
/// AD盒地址
///
string Addr { get; set; }
///
/// 从flyad7 获取 的systick 转换的时间
///
DateTime Now { get; }
///
/// AD盒版本号 版本1 没有systick;版本2 有systick;
///
int Version { get; }
///
/// 脉冲
///
int Position { get; }
///
/// 速度 pps
///
int Speed { get; }
///
/// 1000ms从AD卡获取(或推送)1个AD值。此AD值只用于调试,定点
///
int AD { get; }
///
/// AD值最大值 ,恒定返回65535
///
int ADMax { get; }
///
/// 输入口状态,只有12位有效
///
UInt16 IStatus { get; }
///
/// 输出口状态,只有4位有效
///
UInt16 OStatus { get; }
///
/// Out0 = 0, SetOutput(0x0001,0x0000);
/// Out0 = 1, Out1 = 0, SetOutput(0x0003,0x0001);
///
///
///
void SetOutput(UInt16 mask, UInt16 enable);
///
/// 读取参数, 全部!!!!
///
void UpdateParam();
#region 运动参数
///
/// 设置 运动参数
///
/// 脉冲/grid
/// 电机类型
/// 脉冲比例 分母(电机脉冲)
/// 脉冲比例 分子(编码器脉冲)
void SetSysParam(UInt16 posOfGrid, MOTORTYPE motortype, UInt16 ratio01, UInt16 ratio02);
///
/// 电机类型
///
MOTORTYPE MotorType { set; get; }
///
/// 脉冲/grid, 最大1000个grid
///
UInt16 PosOfGrid { set; get; }
///
/// 脉冲比例 分母(电机脉冲)
///
UInt16 Ratio01 { get; set; }
///
/// 脉冲比例 分子(编码器脉冲)
///
UInt16 Ratio02 { get; set; }
#endregion
///
/// 脉冲平移(0位处脉冲值)
///
Int16 PosOffset { set; get; }
///
/// 手动速度 pps
///
UInt32 JogVelocity { set; get; }
#region 速度参数
///
/// 设置速度参数
///
/// runto 速度 pps
/// 开始速度 pps
/// 加速时间 ms
/// 减速时间 ms
/// 归0 第1段速 pps
/// 归0 第2段速 pps
void SetPosParam(UInt32 velocity, UInt32 sv, UInt32 atime, UInt32 dtime, UInt32 hspeed1, UInt32 hspeed2);
///
/// 设置速度
///
///
void SetVelocity(UInt32 velocity);
///
/// runto 速度 pps
///
UInt32 Velocity { get; }
///
/// 开始速度 pps
///
UInt32 SVelocity { get; }
///
/// 加速时间 ms
///
UInt32 ATime { get; }
///
/// 减速时间 ms
///
UInt32 DTime { get; }
///
/// 归0 第1段速 pps
///
UInt32 HVelocity1 { get; }
///
/// 归0 第2段速 pps
///
UInt32 HVelocity2 { get; }
#endregion
#region 密码
///
/// 使用码区状态
///
AREA_STATUS AreaStatus { get; }
///
/// 使用码区出错码
///
AREA_ERR AreaRet { get; }
///
/// 序列码byte[6]
///
byte[] Code { get; }
///
/// 系统剩余时间
///
int Surplus { get; }
///
/// 系统授权码access[8]
///
byte[] Access { get; }
///
/// 输入系统授权码
///
/// 系统授权码access[8]
void SetAccess(byte[] access);
///
/// 初始化系统信息区
///
void InitArea();
#endregion
///
/// timegrid 事件; 版本1: 1.28s 一次; 版本2: 0.2s一次,
///
event TimeGridEventHandler TimeGridEvent;
///
/// runto 中,每经过1个grid 推送数据
///
event MiniGridEventHandler MiniGridEvent;
///
/// runto 的 grid事件
///
event MiniGridEventHandler GridEvent;
///
/// 输入状态改变事件
///
event IStatusChangedEventHandler IStatusChangedEvent;
///
/// 指令状态改变事件
///
event DriveStatusChangedEventHandler DriveStatusChangedEvent;
///
/// 脉冲1改变事件
///
event PositionChangedEventHandler PositionChangedEvent;
///
/// 脉冲2改变事件
///
event PositionChangedEventHandler Position2ChangedEvent;
#region 运行动作
///
/// 运行至指定位置
///
/// 脉冲
void Runto(int to);
///
/// 归原点
///
void Origin();
///
/// 停止
///
void Stop();
///
/// 反向,直到撞了限位
///
void Backward();
///
/// 正行,直到撞了限位
///
void Forward();
///
/// 当前运行指令
///
DRIVE_MAN_ORDER DriveOrder { get; }
///
/// 之前运行动作的状态
///
DRIVE_MAN_STATUS DriveStatus { get; }
#endregion
#region 同步
///
/// 同步用标示
///
Int32 Marker { get; }
#region 横向脉冲
///
/// 逻辑横向脉冲偏移 Pos1 + Pos1LCShift = Pos1LC
///
int Pos1LCShift { get; set; }
#endregion
#region 主轴脉冲
///
/// 纵向脉冲,也叫主轴脉冲
///
int Position2 { get; }
///
/// 纵向速度
///
int Speed2 { get; }
///
/// 设置纵向位置
///
///
void SetPos2(int postion2);
///
/// 纵向偏移,这个是相对量
///
void SetPos2Offset(int offset);
///
/// 纵向同步事件,0-1事件
///
///
/// 只要是 01,就立刻修正
void SetPos2At01(int pos2, bool immediately);
#endregion
#region 同步控制 同步状态转换规则
///
/// 进入同步状态
///
///
void SyncBegin(int pos2);
///
/// 进入同步状态
///
void SyncBegin();
///
/// 退出同步状态
///
void SyncEnd();
///
/// 清空同步指令
///
void SyncClear();
///
/// 清空POS2同步列表
///
void SyncPos2Clear();
#endregion
#region 同步扫描 脚本指令
///
/// 同步扫描至;
/// D+0xE0+开始主轴位置+结束主轴位置+结束横向脉冲位置(逻辑位置)+脉冲开关(1B)+命令识标号(4B)
///
///
///
///
///
///
void SyncRunAtLC(int pos2_begin, int pos2_end, int pos1lc, bool hasDataGrid, Int32 marker);
///
/// 位于队列头时运行,归零;
/// D+0xE1+命令识标号(4B)
///
///
void SyncOrigin(Int32 marker);
///
/// 位于队列头时运行,以速度运行至物理位置;
/// D+0xE2+横向脉冲位置(4B:int32,物理位置)+速度(4B:int32)+脉冲开关(1B)+命令识标号(4B)
///
///
///
///
///
void SyncRunTo(int pos1, UInt32 velocity, bool hasDataGrid, Int32 marker);
///
/// 位于队列头时运行,以速度运行至逻辑位置;
/// D+0xE3+横向脉冲位置(4B:int32,逻辑位置)+速度(4B:int32)+脉冲开关(1B)+命令识标号(4B)
///
///
///
///
///
void SyncRunToLC(int pos1lc, UInt32 velocity, bool hasDataGrid, Int32 marker);
///
/// 等待,ms;
/// D+0xE4+毫秒数(4B:int32)+命令识标号(4B)
///
///
///
void SyncWait(int ms, Int32 marker);
#endregion
#endregion
}
///
/// 电机类型
///
public enum MOTORTYPE
{
///
/// 没电机
///
NULL = 0,
///
/// 异步电机,通过I1~I3控制 正反转
///
VF0 = 1,
///
/// 伺服 或 步进电机,通过 S,P, 控制驱动器
///
SERVO = 2
}
///
/// 使用码区状态
///
public enum AREA_STATUS
{
///
/// 没有读过密码区
///
NOTLOAD = 0,
///
/// 读出错
///
RDERR = 1,
///
/// 非有效密码区 没有0xAA55 或 0x5A5A 标志
///
NOTVALID = 2,
///
/// 写出错
///
WRERR = 3,
///
/// 有效密码区
///
VALID = 4,
///
/// 有效密码区,应回写EEPROM
///
VALID_DIRTY = 5,
///
/// 有效密码区,但回写EEPROM失败
///
VALID_WRERR = 6
}
///
/// 使用码区操作结果
///
public enum AREA_ERR
{
///
/// 没有错误
///
NO_ERR = 0,
///
/// 重复使用码
///
DUP_ACCESS = 1,
///
/// 无效使用码
///
ERR_ACCESS = 2
}
///
/// 运行状态
///
public enum DRIVE_MAN_STATUS
{
///
/// 正常运行结束
///
STOP = 0,
///
/// 正在运行
///
RUNNING = 1,
///
/// 指令结束(收到停止指令)
///
STOP_MANUAL = 2,
///
/// 运行结束,限位开关闭合
///
LIMIT = 3
}
///
/// 运行动作
///
public enum DRIVE_MAN_ORDER
{
///
/// 闲置
///
IDLE = 'I',
///
/// 运行到
///
RUNTO = 'R',
///
/// 归原点
///
ORIGIN = 'O',
///
/// 后退
///
BACKWORD = 'B',
///
/// 前进
///
FORWORD = 'F',
///
/// 停止
///
STOP = 'S',
///
/// 同步
///
SYNC = 'D',
///
/// 未知状态
///
SYNC2 = 'P'
}
///
/// 同步状态
///
public enum SYNC_STATUS
{
///
///
///
SYNCST_NO = 0,
///
///
///
SYNCST_PENDING1 = 1,
///
///
///
SYNCST_PENDING2 = 2,
///
///
///
SYNCST_PENDING3 = 3,
///
///
///
SYNCST_TEMP_OUT = 4,
///
///
///
SYNCST_WAIT_TO_PENDING = 5,
///
///
///
SYNCST_RESUME = 6,
///
///
///
SYNCST_YES = 10,
}
}