领胜LDS 键盘AOI检测项目
wells.liu
2020-06-26 cfb34dcd56659252216cd88efbe41868e4ac5227
固高板卡驱动
1 文件已重命名
10个文件已添加
1个文件已删除
5个文件已修改
3320 ■■■■■ 已修改文件
M071.sln 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/Bro.Device.GTSCard.csproj 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/Class1.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardAPI.cs 1264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardConfig.cs 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardDriver.cs 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GtsCardManager.cs 440 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GtsIO.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GtsMotionCard.cs 483 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GtsParameter.cs 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GtsPos.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process.DBManager/Bro.M071.Process.DBManager.csproj 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process.DBManager/BaseModel.cs 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process.DBManager/Bro.Process.DataBase.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process.DBManager/DataBaseContext.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process.DBManager/ModelManager.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process.DBManager/SQLiteHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
M071.sln
@@ -25,7 +25,7 @@
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.M071.Process.Model", "src\Bro.M071.Process.Model\Bro.M071.Process.Model.csproj", "{AD645C48-5811-4B1E-B81F-D35D5E6B577F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.Process.DBManager", "src\Bro.Process.DBManager\Bro.Process.DBManager.csproj", "{65302D6E-9918-4E4C-92B4-75C8830C6BA7}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.Process.DataBase", "src\Bro.Process.DBManager\Bro.Process.DataBase.csproj", "{65302D6E-9918-4E4C-92B4-75C8830C6BA7}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
src/Bro.Device.GTSCard/Bro.Device.GTSCard.csproj
@@ -32,7 +32,9 @@
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Core" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
@@ -41,8 +43,25 @@
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Class1.cs" />
    <Compile Include="GTSCardDriver.cs" />
    <Compile Include="GTSCardConfig.cs" />
    <Compile Include="GtsCardManager.cs" />
    <Compile Include="GTSCardAPI.cs" />
    <Compile Include="GtsIO.cs" />
    <Compile Include="GtsMotionCard.cs" />
    <Compile Include="GtsParameter.cs" />
    <Compile Include="GtsPos.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Bro.Common.Device\Bro.Common.Device.csproj">
      <Project>{987308DD-8BAA-463A-94E2-77D62E01A5BF}</Project>
      <Name>Bro.Common.Device</Name>
    </ProjectReference>
    <ProjectReference Include="..\Bro.Common.Model\Bro.Common.Model.csproj">
      <Project>{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}</Project>
      <Name>Bro.Common.Model</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
src/Bro.Device.GTSCard/Class1.cs
File was deleted
src/Bro.Device.GTSCard/GTSCardAPI.cs
New file
@@ -0,0 +1,1264 @@
using System.Runtime.InteropServices;
namespace Bro.Device.GTSCard
{
    public class GTSCardAPI
    {
        public const short DLL_VERSION_0 = 2;
        public const short DLL_VERSION_1 = 1;
        public const short DLL_VERSION_2 = 0;
        public const short DLL_VERSION_3 = 1;
        public const short DLL_VERSION_4 = 5;
        public const short DLL_VERSION_5 = 0;
        public const short DLL_VERSION_6 = 6;
        public const short DLL_VERSION_7 = 0;
        public const short DLL_VERSION_8 = 7;
        public const short MC_NONE = -1;
        public const short MC_LIMIT_POSITIVE = 0;
        public const short MC_LIMIT_NEGATIVE = 1;
        public const short MC_ALARM = 2;
        public const short MC_HOME = 3;
        public const short MC_GPI = 4;
        public const short MC_ARRIVE = 5;
        public const short MC_MPG = 6;
        public const short MC_ENABLE = 10;
        public const short MC_CLEAR = 11;
        public const short MC_GPO = 12;
        public const short MC_DAC = 20;
        public const short MC_STEP = 21;
        public const short MC_PULSE = 22;
        public const short MC_ENCODER = 23;
        public const short MC_ADC = 24;
        public const short MC_AXIS = 30;
        public const short MC_PROFILE = 31;
        public const short MC_CONTROL = 32;
        public const short CAPTURE_HOME = 1;
        public const short CAPTURE_INDEX = 2;
        public const short CAPTURE_PROBE = 3;
        public const short CAPTURE_HSIO0 = 6;
        public const short CAPTURE_HSIO1 = 7;
        public const short CAPTURE_HOME_GPI = 8;
        public const short PT_MODE_STATIC = 0;
        public const short PT_MODE_DYNAMIC = 1;
        public const short PT_SEGMENT_NORMAL = 0;
        public const short PT_SEGMENT_EVEN = 1;
        public const short PT_SEGMENT_STOP = 2;
        public const short GEAR_MASTER_ENCODER = 1;
        public const short GEAR_MASTER_PROFILE = 2;
        public const short GEAR_MASTER_AXIS = 3;
        public const short FOLLOW_MASTER_ENCODER = 1;
        public const short FOLLOW_MASTER_PROFILE = 2;
        public const short FOLLOW_MASTER_AXIS = 3;
        public const short FOLLOW_EVENT_START = 1;
        public const short FOLLOW_EVENT_PASS = 2;
        public const short GEAR_EVENT_START = 1;
        public const short GEAR_EVENT_PASS = 2;
        public const short GEAR_EVENT_AREA = 5;
        public const short FOLLOW_SEGMENT_NORMAL = 0;
        public const short FOLLOW_SEGMENT_EVEN = 1;
        public const short FOLLOW_SEGMENT_STOP = 2;
        public const short FOLLOW_SEGMENT_CONTINUE = 3;
        public const short INTERPOLATION_AXIS_MAX = 4;
        public const short CRD_FIFO_MAX = 4096;
        public const short FIFO_MAX = 2;
        public const short CRD_MAX = 2;
        public const short CRD_OPERATION_DATA_EXT_MAX = 2;
        public const short CRD_OPERATION_TYPE_NONE = 0;
        public const short CRD_OPERATION_TYPE_BUF_IO_DELAY = 1;
        public const short CRD_OPERATION_TYPE_LASER_ON = 2;
        public const short CRD_OPERATION_TYPE_LASER_OFF = 3;
        public const short CRD_OPERATION_TYPE_BUF_DA = 4;
        public const short CRD_OPERATION_TYPE_LASER_CMD = 5;
        public const short CRD_OPERATION_TYPE_LASER_FOLLOW = 6;
        public const short CRD_OPERATION_TYPE_LMTS_ON = 7;
        public const short CRD_OPERATION_TYPE_LMTS_OFF = 8;
        public const short CRD_OPERATION_TYPE_SET_STOP_IO = 9;
        public const short CRD_OPERATION_TYPE_BUF_MOVE = 10;
        public const short CRD_OPERATION_TYPE_BUF_GEAR = 11;
        public const short CRD_OPERATION_TYPE_SET_SEG_NUM = 12;
        public const short CRD_OPERATION_TYPE_STOP_MOTION = 13;
        public const short CRD_OPERATION_TYPE_SET_VAR_VALUE = 14;
        public const short CRD_OPERATION_TYPE_JUMP_NEXT_SEG = 15;
        public const short CRD_OPERATION_TYPE_SYNCH_PRF_POS = 16;
        public const short CRD_OPERATION_TYPE_VIRTUAL_TO_ACTUAL = 17;
        public const short CRD_OPERATION_TYPE_SET_USER_VAR = 18;
        public const short CRD_OPERATION_TYPE_SET_DO_BIT_PULSE = 19;
        public const short CRD_OPERATION_TYPE_BUF_COMPAREPULSE = 20;
        public const short CRD_OPERATION_TYPE_LASER_ON_EX = 21;
        public const short CRD_OPERATION_TYPE_LASER_OFF_EX = 22;
        public const short CRD_OPERATION_TYPE_LASER_CMD_EX = 23;
        public const short CRD_OPERATION_TYPE_LASER_FOLLOW_RATIO_EX = 24;
        public const short CRD_OPERATION_TYPE_LASER_FOLLOW_MODE = 25;
        public const short CRD_OPERATION_TYPE_LASER_FOLLOW_OFF = 26;
        public const short CRD_OPERATION_TYPE_LASER_FOLLOW_OFF_EX = 27;
        public const short CRD_OPERATION_TYPE_LASER_FOLLOW_SPLINE = 28;
        public const short CRD_OPERATION_TYPE_MOTION_DATA = 29;
        public const short INTERPOLATION_MOTION_TYPE_LINE = 0;
        public const short INTERPOLATION_MOTION_TYPE_CIRCLE = 1;
        public const short INTERPOLATION_MOTION_TYPE_HELIX = 2;
        public const short INTERPOLATION_MOTION_TYPE_CIRCLE_3D = 3;
        public const short INTERPOLATION_CIRCLE_PLAT_XY = 0;
        public const short INTERPOLATION_CIRCLE_PLAT_YZ = 1;
        public const short INTERPOLATION_CIRCLE_PLAT_ZX = 2;
        public const short INTERPOLATION_HELIX_CIRCLE_XY_LINE_Z = 0;
        public const short INTERPOLATION_HELIX_CIRCLE_YZ_LINE_X = 1;
        public const short INTERPOLATION_HELIX_CIRCLE_ZX_LINE_Y = 2;
        public const short INTERPOLATION_CIRCLE_DIR_CW = 0;
        public const short INTERPOLATION_CIRCLE_DIR_CCW = 1;
        public const short COMPARE_PORT_HSIO = 0;
        public const short COMPARE_PORT_GPO = 1;
        public const short COMPARE2D_MODE_2D = 1;
        public const short COMPARE2D_MODE_1D = 0;
        public const short INTERFACEBOARD20 = 2;
        public const short INTERFACEBOARD30 = 3;
        public const short AXIS_LASER = 7;
        public const short AXIS_LASER_EX = 8;
        public const short LASER_CTRL_MODE_PWM1 = 0;
        public const short LASER_CTRL_FREQUENCY = 1;
        public const short LASER_CTRL_VOLTAGE = 2;
        public const short LASER_CTRL_MODE_PWM2 = 3;
        public struct TTrapPrm
        {
            public double acc;
            public double dec;
            public double velStart;
            public short smoothTime;
        }
        public struct TJogPrm
        {
            public double acc;
            public double dec;
            public double smooth;
        }
        public struct TPid
        {
            public double kp;
            public double ki;
            public double kd;
            public double kvff;
            public double kaff;
            public int integralLimit;
            public int derivativeLimit;
            public short limit;
        }
        public struct TThreadSts
        {
            public short run;
            public short error;
            public double result;
            public short line;
        }
        public struct TVarInfo
        {
            public short id;
            public short dataType;
            public double dumb0;
            public double dumb1;
            public double dumb2;
            public double dumb3;
        }
        public struct TCompileInfo
        {
            public string pFileName;
            public short pLineNo1;
            public short pLineNo2;
            public string pMessage;
        }
        public struct TCrdPrm
        {
            public short dimension;
            public short profile1;
            public short profile2;
            public short profile3;
            public short profile4;
            public short profile5;
            public short profile6;
            public short profile7;
            public short profile8;
            public double synVelMax;
            public double synAccMax;
            public short evenTime;
            public short setOriginFlag;
            public int originPos1;
            public int originPos2;
            public int originPos3;
            public int originPos4;
            public int originPos5;
            public int originPos6;
            public int originPos7;
            public int originPos8;
        }
        public struct TCrdBufOperation
        {
            public short flag;
            public ushort delay;
            public short doType;
            public ushort doMask;
            public ushort doValue;
            public ushort dataExt1;
            public ushort dataExt2;
        }
        public struct TCrdData
        {
            public short motionType;
            public short circlePlat;
            public int posX;
            public int posY;
            public int posZ;
            public int posA;
            public double radius;
            public short circleDir;
            public double lCenterX;
            public double lCenterY;
            public double lCenterZ;
            public double vel;
            public double acc;
            public short velEndZero;
            public TCrdBufOperation operation;
            public double cosX;
            public double cosY;
            public double cosZ;
            public double cosA;
            public double velEnd;
            public double velEndAdjust;
            public double r;
        }
        public struct TTrigger
        {
            public short encoder;
            public short probeType;
            public short probeIndex;
            public short offset;
            public short windowOnly;
            public int firstPosition;
            public int lastPosition;
        }
        public struct TTriggerStatus
        {
            public short execute;
            public short done;
            public int position;
        }
        public struct T2DCompareData
        {
            public int px;
            public int py;
        }
        public struct T2DComparePrm
        {
            public short encx;
            public short ency;
            public short source;
            public short outputType;
            public short startLevel;
            public short time;
            public short maxerr;
            public short threshold;
        }
        [DllImport("gts.dll")]
        public static extern short GT_GetDllVersion(short cardNum, out string pDllVersion);
        [DllImport("gts.dll")]
        public static extern short GT_SetCardNo(short cardNum, short index);
        [DllImport("gts.dll")]
        public static extern short GT_GetCardNo(short cardNum, out short index);
        [DllImport("gts.dll")]
        public static extern short GT_GetVersion(short cardNum, out string pVersion);
        [DllImport("gts.dll")]
        public static extern short GT_GetInterfaceBoardSts(short cardNum, out short pStatus);
        [DllImport("gts.dll")]
        public static extern short GT_SetInterfaceBoardSts(short cardNum, short type);
        [DllImport("gts.dll")]
        public static extern short GT_Open(short cardNum, short channel, short param);
        [DllImport("gts.dll")]
        public static extern short GT_Close(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_LoadConfig(short cardNum, string pFile);
        [DllImport("gts.dll")]
        public static extern short GT_AlarmOff(short cardNum, short axis);
        [DllImport("gts.dll")]
        public static extern short GT_AlarmOn(short cardNum, short axis);
        [DllImport("gts.dll")]
        public static extern short GT_LmtsOn(short cardNum, short axis, short limitType);
        [DllImport("gts.dll")]
        public static extern short GT_LmtsOff(short cardNum, short axis, short limitType);
        [DllImport("gts.dll")]
        public static extern short GT_ProfileScale(short cardNum, short axis, short alpha, short beta);
        [DllImport("gts.dll")]
        public static extern short GT_EncScale(short cardNum, short axis, short alpha, short beta);
        [DllImport("gts.dll")]
        public static extern short GT_StepDir(short cardNum, short step);
        [DllImport("gts.dll")]
        public static extern short GT_StepPulse(short cardNum, short step);
        [DllImport("gts.dll")]
        public static extern short GT_SetMtrBias(short cardNum, short dac, short bias);
        [DllImport("gts.dll")]
        public static extern short GT_GetMtrBias(short cardNum, short dac, out short pBias);
        [DllImport("gts.dll")]
        public static extern short GT_SetMtrLmt(short cardNum, short dac, short limit);
        [DllImport("gts.dll")]
        public static extern short GT_GetMtrLmt(short cardNum, short dac, out short pLimit);
        [DllImport("gts.dll")]
        public static extern short GT_EncSns(short cardNum, ushort sense);
        [DllImport("gts.dll")]
        public static extern short GT_EncOn(short cardNum, short encoder);
        [DllImport("gts.dll")]
        public static extern short GT_EncOff(short cardNum, short encoder);
        [DllImport("gts.dll")]
        public static extern short GT_SetPosErr(short cardNum, short control, int error);
        [DllImport("gts.dll")]
        public static extern short GT_GetPosErr(short cardNum, short control, out int pError);
        [DllImport("gts.dll")]
        public static extern short GT_SetStopDec(short cardNum, short profile, double decSmoothStop, double decAbruptStop);
        [DllImport("gts.dll")]
        public static extern short GT_GetStopDec(short cardNum, short profile, out double pDecSmoothStop, out double pDecAbruptStop);
        [DllImport("gts.dll")]
        public static extern short GT_LmtSns(short cardNum, ushort sense);
        [DllImport("gts.dll")]
        public static extern short GT_CtrlMode(short cardNum, short axis, short mode);
        [DllImport("gts.dll")]
        public static extern short GT_SetStopIo(short cardNum, short axis, short stopType, short inputType, short inputIndex);
        [DllImport("gts.dll")]
        public static extern short GT_GpiSns(short cardNum, ushort sense);
        [DllImport("gts.dll")]
        public static extern short GT_SetAdcFilter(short cardNum, short adc, short filterTime);
        [DllImport("gts.dll")]
        public static extern short GT_SetAxisPrfVelFilter(short cardNum, short axis, short filterNumExp);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisPrfVelFilter(short cardNum, short axis, out short pFilterNumExp);
        [DllImport("gts.dll")]
        public static extern short GT_SetAxisEncVelFilter(short cardNum, short axis, short filterNumExp);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisEncVelFilter(short cardNum, short axis, out short pFilterNumExp);
        [DllImport("gts.dll")]
        public static extern short GT_SetAxisInputShaping(short cardNum, short axis, short enable, short count, double k);
        [DllImport("gts.dll")]
        public static extern short GT_SetDo(short cardNum, short doType, int value);
        [DllImport("gts.dll")]
        public static extern short GT_SetDoBit(short cardNum, short doType, short doIndex, short value);
        [DllImport("gts.dll")]
        public static extern short GT_GetDo(short cardNum, short doType, out int pValue);
        [DllImport("gts.dll")]
        public static extern short GT_SetDoBitReverse(short cardNum, short doType, short doIndex, short value, short reverseTime);
        [DllImport("gts.dll")]
        public static extern short GT_SetDoMask(short cardNum, short doType, ushort doMask, int value);
        [DllImport("gts.dll")]
        public static extern short GT_EnableDoBitPulse(short cardNum, short doType, short doIndex, ushort highLevelTime, ushort lowLevelTime, int pulseNum, short firstLevel);
        [DllImport("gts.dll")]
        public static extern short GT_DisableDoBitPulse(short cardNum, short doType, short doIndex);
        [DllImport("gts.dll")]
        public static extern short GT_GetDi(short cardNum, short diType, out int pValue);
        [DllImport("gts.dll")]
        public static extern short GT_GetDiReverseCount(short cardNum, short diType, short diIndex, out uint reverseCount, short count);
        [DllImport("gts.dll")]
        public static extern short GT_SetDiReverseCount(short cardNum, short diType, short diIndex, ref uint reverseCount, short count);
        [DllImport("gts.dll")]
        public static extern short GT_GetDiRaw(short cardNum, short diType, out int pValue);
        [DllImport("gts.dll")]
        public static extern short GT_SetDac(short cardNum, short dac, ref short value, short count);
        [DllImport("gts.dll")]
        public static extern short GT_GetDac(short cardNum, short dac, out short value, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAdc(short cardNum, short adc, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAdcValue(short cardNum, short adc, out short pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_SetEncPos(short cardNum, short encoder, int encPos);
        [DllImport("gts.dll")]
        public static extern short GT_GetEncPos(short cardNum, short encoder, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetEncPosPre(short cardNum, short encoder, out double pValue, short count, uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetEncVel(short cardNum, short encoder, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_SetCaptureMode(short cardNum, short encoder, short mode);
        [DllImport("gts.dll")]
        public static extern short GT_GetCaptureMode(short cardNum, short encoder, out short pMode, short count);
        [DllImport("gts.dll")]
        public static extern short GT_GetCaptureStatus(short cardNum, short encoder, out short pStatus, out int pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_SetCaptureSense(short cardNum, short encoder, short mode, short sense);
        [DllImport("gts.dll")]
        public static extern short GT_ClearCaptureStatus(short cardNum, short encoder);
        [DllImport("gts.dll")]
        public static extern short GT_SetCaptureRepeat(short cardNum, short encoder, short count);
        [DllImport("gts.dll")]
        public static extern short GT_GetCaptureRepeatStatus(short cardNum, short encoder, out short pCount);
        [DllImport("gts.dll")]
        public static extern short GT_GetCaptureRepeatPos(short cardNum, short encoder, out int pValue, short startNum, short count);
        [DllImport("gts.dll")]
        public static extern short GT_SetCaptureEncoder(short cardNum, short trigger, short encoder);
        [DllImport("gts.dll")]
        public static extern short GT_GetCaptureWidth(short cardNum, short trigger, out short pWidth, short count);
        [DllImport("gts.dll")]
        public static extern short GT_GetCaptureHomeGpi(short cardNum, short trigger, out short pHomeSts, out short pHomePos, out short pGpiSts, out short pGpiPos, short count);
        [DllImport("gts.dll")]
        public static extern short GT_Reset(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_GetClock(short cardNum, out uint pClock, out uint pLoop);
        [DllImport("gts.dll")]
        public static extern short GT_GetClockHighPrecision(short cardNum, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetSts(short cardNum, short axis, out int pSts, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_ClrSts(short cardNum, short axis, short count);
        [DllImport("gts.dll")]
        public static extern short GT_AxisOn(short cardNum, short axis);
        [DllImport("gts.dll")]
        public static extern short GT_AxisOff(short cardNum, short axis);
        [DllImport("gts.dll")]
        public static extern short GT_Stop(short cardNum, int mask, int option);
        [DllImport("gts.dll")]
        public static extern short GT_SetPrfPos(short cardNum, short profile, int prfPos);
        [DllImport("gts.dll")]
        public static extern short GT_SynchAxisPos(short cardNum, int mask);
        [DllImport("gts.dll")]
        public static extern short GT_ZeroPos(short cardNum, short axis, short count);
        [DllImport("gts.dll")]
        public static extern short GT_SetSoftLimit(short cardNum, short axis, int positive, int negative);
        [DllImport("gts.dll")]
        public static extern short GT_GetSoftLimit(short cardNum, short axis, out int pPositive, out int pNegative);
        [DllImport("gts.dll")]
        public static extern short GT_SetAxisBand(short cardNum, short axis, int band, int time);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisBand(short cardNum, short axis, out int pBand, out int pTime);
        [DllImport("gts.dll")]
        public static extern short GT_SetBacklash(short cardNum, short axis, int compValue, double compChangeValue, int compDir);
        [DllImport("gts.dll")]
        public static extern short GT_GetBacklash(short cardNum, short axis, out int pCompValue, out double pCompChangeValue, out int pCompDir);
        [DllImport("gts.dll")]
        public static extern short GT_SetLeadScrewComp(short cardNum, short axis, short n, int startPos, int lenPos, out int pCompPos, out int pCompNeg);
        [DllImport("gts.dll")]
        public static extern short GT_EnableLeadScrewComp(short cardNum, short axis, short mode);
        [DllImport("gts.dll")]
        public static extern short GT_GetCompensate(short cardNum, short axis, out double pPitchError, out double pCrossError, out double pBacklashError, out double pEncPos, out double pPrfPos);
        [DllImport("gts.dll")]
        public static extern short GT_EnableGantry(short cardNum, short gantryMaster, short gantrySlave, double masterKp, double slaveKp);
        [DllImport("gts.dll")]
        public static extern short GT_DisableGantry(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_SetGantryErrLmt(short cardNum, int gantryErrLmt);
        [DllImport("gts.dll")]
        public static extern short GT_GetGantryErrLmt(short cardNum, out int pGantryErrLmt);
        [DllImport("gts.dll")]
        public static extern short GT_GetPrfPos(short cardNum, short profile, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetPrfVel(short cardNum, short profile, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetPrfAcc(short cardNum, short profile, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetPrfMode(short cardNum, short profile, out int pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisPrfPos(short cardNum, short axis, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisPrfVel(short cardNum, short axis, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisPrfAcc(short cardNum, short axis, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisEncPos(short cardNum, short axis, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisEncVel(short cardNum, short axis, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisEncAcc(short cardNum, short axis, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisError(short cardNum, short axis, out double pValue, short count, out uint pClock);
        [DllImport("gts.dll")]
        public static extern short GT_SetLongVar(short cardNum, short index, int value);
        [DllImport("gts.dll")]
        public static extern short GT_GetLongVar(short cardNum, short index, out int pValue);
        [DllImport("gts.dll")]
        public static extern short GT_SetDoubleVar(short cardNum, short index, double pValue);
        [DllImport("gts.dll")]
        public static extern short GT_GetDoubleVar(short cardNum, short index, out double pValue);
        [DllImport("gts.dll")]
        public static extern short GT_SetControlFilter(short cardNum, short control, short index);
        [DllImport("gts.dll")]
        public static extern short GT_GetControlFilter(short cardNum, short control, out short pIndex);
        [DllImport("gts.dll")]
        public static extern short GT_SetPid(short cardNum, short control, short index, ref TPid pPid);
        [DllImport("gts.dll")]
        public static extern short GT_GetPid(short cardNum, short control, short index, out TPid pPid);
        [DllImport("gts.dll")]
        public static extern short GT_SetKvffFilter(short cardNum, short control, short index, short kvffFilterExp, double accMax);
        [DllImport("gts.dll")]
        public static extern short GT_GetKvffFilter(short cardNum, short control, short index, out short pKvffFilterExp, out double pAccMax);
        [DllImport("gts.dll")]
        public static extern short GT_Update(short cardNum, int mask);
        [DllImport("gts.dll")]
        public static extern short GT_SetPos(short cardNum, short profile, int pos);
        [DllImport("gts.dll")]
        public static extern short GT_GetPos(short cardNum, short profile, out int pPos);
        [DllImport("gts.dll")]
        public static extern short GT_SetVel(short cardNum, short profile, double vel);
        [DllImport("gts.dll")]
        public static extern short GT_GetVel(short cardNum, short profile, out double pVel);
        [DllImport("gts.dll")]
        public static extern short GT_PrfTrap(short cardNum, short profile);
        [DllImport("gts.dll")]
        public static extern short GT_SetTrapPrm(short cardNum, short profile, ref TTrapPrm pPrm);
        [DllImport("gts.dll")]
        public static extern short GT_GetTrapPrm(short cardNum, short profile, out TTrapPrm pPrm);
        [DllImport("gts.dll")]
        public static extern short GT_PrfJog(short cardNum, short profile);
        [DllImport("gts.dll")]
        public static extern short GT_SetJogPrm(short cardNum, short profile, ref TJogPrm pPrm);
        [DllImport("gts.dll")]
        public static extern short GT_GetJogPrm(short cardNum, short profile, out TJogPrm pPrm);
        [DllImport("gts.dll")]
        public static extern short GT_PrfPt(short cardNum, short profile, short mode);
        [DllImport("gts.dll")]
        public static extern short GT_SetPtLoop(short cardNum, short profile, int loop);
        [DllImport("gts.dll")]
        public static extern short GT_GetPtLoop(short cardNum, short profile, out int pLoop);
        [DllImport("gts.dll")]
        public static extern short GT_PtSpace(short cardNum, short profile, out short pSpace, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_PtData(short cardNum, short profile, double pos, int time, short type, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_PtDataWN(short cardNum, short profile, double pos, int time, short type, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_PtClear(short cardNum, short profile, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_PtStart(short cardNum, int mask, int option);
        [DllImport("gts.dll")]
        public static extern short GT_SetPtMemory(short cardNum, short profile, short memory);
        [DllImport("gts.dll")]
        public static extern short GT_GetPtMemory(short cardNum, short profile, out short pMemory);
        [DllImport("gts.dll")]
        public static extern short GT_PtGetSegNum(short cardNum, short profile, out int pSegNum);
        [DllImport("gts.dll")]
        public static extern short GT_PrfGear(short cardNum, short profile, short dir);
        [DllImport("gts.dll")]
        public static extern short GT_SetGearMaster(short cardNum, short profile, short masterIndex, short masterType, short masterItem);
        [DllImport("gts.dll")]
        public static extern short GT_GetGearMaster(short cardNum, short profile, out short pMasterIndex, out short pMasterType, out short pMasterItem);
        [DllImport("gts.dll")]
        public static extern short GT_SetGearRatio(short cardNum, short profile, int masterEven, int slaveEven, int masterSlope);
        [DllImport("gts.dll")]
        public static extern short GT_GetGearRatio(short cardNum, short profile, out int pMasterEven, out int pSlaveEven, out int pMasterSlope);
        [DllImport("gts.dll")]
        public static extern short GT_GearStart(short cardNum, int mask);
        [DllImport("gts.dll")]
        public static extern short GT_SetGearEvent(short cardNum, short profile, short gearEvent, int startPara0, int startPara1);
        [DllImport("gts.dll")]
        public static extern short GT_GetGearEvent(short cardNum, short profile, out short pEvent, out int pStartPara0, out int pStartPara1);
        [DllImport("gts.dll")]
        public static extern short GT_PrfFollow(short cardNum, short profile, short dir);
        [DllImport("gts.dll")]
        public static extern short GT_SetFollowMaster(short cardNum, short profile, short masterIndex, short masterType, short masterItem);
        [DllImport("gts.dll")]
        public static extern short GT_GetFollowMaster(short cardNum, short profile, out short pMasterIndex, out short pMasterType, out short pMasterItem);
        [DllImport("gts.dll")]
        public static extern short GT_SetFollowLoop(short cardNum, short profile, int loop);
        [DllImport("gts.dll")]
        public static extern short GT_GetFollowLoop(short cardNum, short profile, out int pLoop);
        [DllImport("gts.dll")]
        public static extern short GT_SetFollowEvent(short cardNum, short profile, short followEvent, short masterDir, int pos);
        [DllImport("gts.dll")]
        public static extern short GT_GetFollowEvent(short cardNum, short profile, out short pFollowEvent, out short pMasterDir, out int pPos);
        [DllImport("gts.dll")]
        public static extern short GT_FollowSpace(short cardNum, short profile, out short pSpace, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_FollowData(short cardNum, short profile, int masterSegment, double slaveSegment, short type, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_FollowClear(short cardNum, short profile, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_FollowStart(short cardNum, int mask, int option);
        [DllImport("gts.dll")]
        public static extern short GT_FollowSwitch(short cardNum, int mask);
        [DllImport("gts.dll")]
        public static extern short GT_SetFollowMemory(short cardNum, short profile, short memory);
        [DllImport("gts.dll")]
        public static extern short GT_GetFollowMemory(short cardNum, short profile, out short memory);
        [DllImport("gts.dll")]
        public static extern short GT_GetFollowStatus(short cardNum, short profile, out short pFifoNum, out short pSwitchStatus);
        [DllImport("gts.dll")]
        public static extern short GT_SetFollowPhasing(short cardNum, short profile, short profilePhasing);
        [DllImport("gts.dll")]
        public static extern short GT_GetFollowPhasing(short cardNum, short profile, out short pProfilePhasing);
        [DllImport("gts.dll")]
        public static extern short GT_Compile(short cardNum, string pFileName, out TCompileInfo pWrongInfo);
        [DllImport("gts.dll")]
        public static extern short GT_Download(short cardNum, string pFileName);
        [DllImport("gts.dll")]
        public static extern short GT_GetFunId(short cardNum, string pFunName, out short pFunId);
        [DllImport("gts.dll")]
        public static extern short GT_Bind(short cardNum, short thread, short funId, short page);
        [DllImport("gts.dll")]
        public static extern short GT_RunThread(short cardNum, short thread);
        [DllImport("gts.dll")]
        public static extern short GT_StopThread(short cardNum, short thread);
        [DllImport("gts.dll")]
        public static extern short GT_PauseThread(short cardNum, short thread);
        [DllImport("gts.dll")]
        public static extern short GT_GetThreadSts(short cardNum, short thread, out TThreadSts pThreadSts);
        [DllImport("gts.dll")]
        public static extern short GT_GetVarId(short cardNum, string pFunName, string pVarName, out TVarInfo pVarInfo);
        [DllImport("gts.dll")]
        public static extern short GT_SetVarValue(short cardNum, short page, ref TVarInfo pVarInfo, ref double pValue, short count);
        [DllImport("gts.dll")]
        public static extern short GT_GetVarValue(short cardNum, short page, ref TVarInfo pVarInfo, out double pValue, short count);
        [DllImport("gts.dll")]
        public static extern short GT_SetCrdPrm(short cardNum, short crd, ref TCrdPrm pCrdPrm);
        [DllImport("gts.dll")]
        public static extern short GT_GetCrdPrm(short cardNum, short crd, out TCrdPrm pCrdPrm);
        [DllImport("gts.dll")]
        public static extern short GT_CrdSpace(short cardNum, short crd, out int pSpace, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_CrdData(short cardNum, short crd, System.IntPtr pCrdData, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_CrdDataCircle(short cardNum, short crd, ref TCrdData pCrdData, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXY(short cardNum, short crd, int x, int y, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZ(short cardNum, short crd, int x, int y, int z, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZA(short cardNum, short crd, int x, int y, int z, int a, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYG0(short cardNum, short crd, int x, int y, double synVel, double synAcc, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZG0(short cardNum, short crd, int x, int y, int z, double synVel, double synAcc, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZAG0(short cardNum, short crd, int x, int y, int z, int a, double synVel, double synAcc, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYR(short cardNum, short crd, int x, int y, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYC(short cardNum, short crd, int x, int y, double xCenter, double yCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcYZR(short cardNum, short crd, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcYZC(short cardNum, short crd, int y, int z, double yCenter, double zCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcZXR(short cardNum, short crd, int z, int x, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcZXC(short cardNum, short crd, int z, int x, double zCenter, double xCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYZ(short cardNum, short crd, int x, int y, int z, double interX, double interY, double interZ, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYOverride2(short cardNum, short crd, int x, int y, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZOverride2(short cardNum, short crd, int x, int y, int z, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZAOverride2(short cardNum, short crd, int x, int y, int z, int a, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYG0Override2(short cardNum, short crd, int x, int y, double synVel, double synAcc, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZG0Override2(short cardNum, short crd, int x, int y, int z, double synVel, double synAcc, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZAG0Override2(short cardNum, short crd, int x, int y, int z, int a, double synVel, double synAcc, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYROverride2(short cardNum, short crd, int x, int y, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYCOverride2(short cardNum, short crd, int x, int y, double xCenter, double yCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcYZROverride2(short cardNum, short crd, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcYZCOverride2(short cardNum, short crd, int y, int z, double yCenter, double zCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcZXROverride2(short cardNum, short crd, int z, int x, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcZXCOverride2(short cardNum, short crd, int z, int x, double zCenter, double xCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixXYRZ(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixXYCZ(short cardNum, short crd, int x, int y, int z, double xCenter, double yCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixYZRX(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixYZCX(short cardNum, short crd, int x, int y, int z, double yCenter, double zCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixZXRY(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixZXCY(short cardNum, short crd, int x, int y, int z, double zCenter, double xCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixXYRZOverride2(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixXYCZOverride2(short cardNum, short crd, int x, int y, int z, double xCenter, double yCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixYZRXOverride2(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixYZCXOverride2(short cardNum, short crd, int x, int y, int z, double yCenter, double zCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixZXRYOverride2(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixZXCYOverride2(short cardNum, short crd, int x, int y, int z, double zCenter, double xCenter, short circleDir, double synVel, double synAcc, double velEnd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYWN(short cardNum, short crd, int x, int y, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZWN(short cardNum, short crd, int x, int y, int z, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZAWN(short cardNum, short crd, int x, int y, int z, int a, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYG0WN(short cardNum, short crd, int x, int y, double synVel, double synAcc, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZG0WN(short cardNum, short crd, int x, int y, int z, double synVel, double synAcc, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZAG0WN(short cardNum, short crd, int x, int y, int z, int a, double synVel, double synAcc, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYRWN(short cardNum, short crd, int x, int y, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYCWN(short cardNum, short crd, int x, int y, double xCenter, double yCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcYZRWN(short cardNum, short crd, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcYZCWN(short cardNum, short crd, int y, int z, double yCenter, double zCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcZXRWN(short cardNum, short crd, int z, int x, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcZXCWN(short cardNum, short crd, int z, int x, double zCenter, double xCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYZWN(short cardNum, short crd, int x, int y, int z, double interX, double interY, double interZ, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYOverride2WN(short cardNum, short crd, int x, int y, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZOverride2WN(short cardNum, short crd, int x, int y, int z, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZAOverride2WN(short cardNum, short crd, int x, int y, int z, int a, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYG0Override2WN(short cardNum, short crd, int x, int y, double synVel, double synAcc, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZG0Override2WN(short cardNum, short crd, int x, int y, int z, double synVel, double synAcc, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_LnXYZAG0Override2WN(short cardNum, short crd, int x, int y, int z, int a, double synVel, double synAcc, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYROverride2WN(short cardNum, short crd, int x, int y, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcXYCOverride2WN(short cardNum, short crd, int x, int y, double xCenter, double yCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcYZROverride2WN(short cardNum, short crd, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcYZCOverride2WN(short cardNum, short crd, int y, int z, double yCenter, double zCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcZXROverride2WN(short cardNum, short crd, int z, int x, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_ArcZXCOverride2WN(short cardNum, short crd, int z, int x, double zCenter, double xCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixXYRZWN(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixXYCZWN(short cardNum, short crd, int x, int y, int z, double xCenter, double yCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixYZRXWN(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixYZCXWN(short cardNum, short crd, int x, int y, int z, double yCenter, double zCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixZXRYWN(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixZXCYWN(short cardNum, short crd, int x, int y, int z, double zCenter, double xCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixXYRZOverride2WN(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixXYCZOverride2WN(short cardNum, short crd, int x, int y, int z, double xCenter, double yCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixYZRXOverride2WN(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixYZCXOverride2WN(short cardNum, short crd, int x, int y, int z, double yCenter, double zCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixZXRYOverride2WN(short cardNum, short crd, int x, int y, int z, double radius, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_HelixZXCYOverride2WN(short cardNum, short crd, int x, int y, int z, double zCenter, double xCenter, short circleDir, double synVel, double synAcc, double velEnd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufIO(short cardNum, short crd, ushort doType, ushort doMask, ushort doValue, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufEnableDoBitPulse(short cardNum, short crd, short doType, short doIndex, ushort highLevelTime, ushort lowLevelTime, int pulseNum, short firstLevel, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufDisableDoBitPulse(short cardNum, short crd, short doType, short doIndex, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufDelay(short cardNum, short crd, ushort delayTime, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufComparePulse(short cardNum, short crd, short level, short outputType, short time, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufDA(short cardNum, short crd, short chn, short daValue, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufLmtsOn(short cardNum, short crd, short axis, short limitType, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufLmtsOff(short cardNum, short crd, short axis, short limitType, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufSetStopIo(short cardNum, short crd, short axis, short stopType, short inputType, short inputIndex, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufMove(short cardNum, short crd, short moveAxis, int pos, double vel, double acc, short modal, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufGear(short cardNum, short crd, short gearAxis, int pos, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufGearPercent(short cardNum, short crd, short gearAxis, int pos, short accPercent, short decPercent, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufStopMotion(short cardNum, short crd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufSetVarValue(short cardNum, short crd, short pageId, out TVarInfo pVarInfo, double value, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufJumpNextSeg(short cardNum, short crd, short axis, short limitType, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufSynchPrfPos(short cardNum, short crd, short encoder, short profile, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufVirtualToActual(short cardNum, short crd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufSetLongVar(short cardNum, short crd, short index, int value, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufSetDoubleVar(short cardNum, short crd, short index, double value, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_CrdStart(short cardNum, short mask, short option);
        [DllImport("gts.dll")]
        public static extern short GT_CrdStartStep(short cardNum, short mask, short option);
        [DllImport("gts.dll")]
        public static extern short GT_CrdStepMode(short cardNum, short mask, short option);
        [DllImport("gts.dll")]
        public static extern short GT_SetOverride(short cardNum, short crd, double synVelRatio);
        [DllImport("gts.dll")]
        public static extern short GT_SetOverride2(short cardNum, short crd, double synVelRatio);
        [DllImport("gts.dll")]
        public static extern short GT_InitLookAhead(short cardNum, short crd, short fifo, double T, double accMax, short n, System.IntPtr pLookAheadBuf);
        [DllImport("gts.dll")]
        public static extern short GT_GetLookAheadSpace(short cardNum, short crd, out int pSpace, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_GetLookAheadSegCount(short cardNum, short crd, out int pSegCount, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_CrdClear(short cardNum, short crd, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_CrdStatus(short cardNum, short crd, out short pRun, out int pSegment, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_SetUserSegNum(short cardNum, short crd, int segNum, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_GetUserSegNum(short cardNum, short crd, out int pSegment, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_GetUserSegNumWN(short cardNum, short crd, out int pSegment, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_GetRemainderSegNum(short cardNum, short crd, out int pSegment, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_SetCrdStopDec(short cardNum, short crd, double decSmoothStop, double decAbruptStop);
        [DllImport("gts.dll")]
        public static extern short GT_GetCrdStopDec(short cardNum, short crd, out double pDecSmoothStop, out double pDecAbruptStop);
        [DllImport("gts.dll")]
        public static extern short GT_SetCrdLmtStopMode(short cardNum, short crd, short lmtStopMode);
        [DllImport("gts.dll")]
        public static extern short GT_GetCrdLmtStopMode(short cardNum, short crd, out short pLmtStopMode);
        [DllImport("gts.dll")]
        public static extern short GT_GetUserTargetVel(short cardNum, short crd, out double pTargetVel);
        [DllImport("gts.dll")]
        public static extern short GT_GetSegTargetPos(short cardNum, short crd, out int pTargetPos);
        [DllImport("gts.dll")]
        public static extern short GT_GetCrdPos(short cardNum, short crd, out double pPos);
        [DllImport("gts.dll")]
        public static extern short GT_GetCrdVel(short cardNum, short crd, out double pSynVel);
        [DllImport("gts.dll")]
        public static extern short GT_SetCrdSingleMaxVel(short cardNum, short crd, ref double pMaxVel);
        [DllImport("gts.dll")]
        public static extern short GT_GetCrdSingleMaxVel(short cardNum, short crd, out double pMaxVel);
        [DllImport("gts.dll")]
        public static extern short GT_GetCmdCount(short cardNum, short crd, out short pResult, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_BufLaserOn(short cardNum, short crd, short fifo, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_BufLaserOff(short cardNum, short crd, short fifo, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_BufLaserPrfCmd(short cardNum, short crd, double laserPower, short fifo, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_BufLaserFollowRatio(short cardNum, short crd, double ratio, double minPower, double maxPower, short fifo, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_BufLaserFollowMode(short cardNum, short crd, short source, short fifo, short channel, double startPower);
        [DllImport("gts.dll")]
        public static extern short GT_BufLaserFollowOff(short cardNum, short crd, short fifo, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_BufLaserFollowSpline(short cardNum, short crd, short tableId, double minPower, double maxPower, short fifo, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_PrfPvt(short cardNum, short profile);
        [DllImport("gts.dll")]
        public static extern short GT_SetPvtLoop(short cardNum, short profile, int loop);
        [DllImport("gts.dll")]
        public static extern short GT_GetPvtLoop(short cardNum, short profile, out int pLoopCount, out int pLoop);
        [DllImport("gts.dll")]
        public static extern short GT_PvtStatus(short cardNum, short profile, out short pTableId, out double pTime, short count);
        [DllImport("gts.dll")]
        public static extern short GT_PvtStart(short cardNum, int mask);
        [DllImport("gts.dll")]
        public static extern short GT_PvtTableSelect(short cardNum, short profile, short tableId);
        [DllImport("gts.dll")]
        public static extern short GT_PvtTable(short cardNum, short tableId, int count, ref double pTime, ref double pPos, ref double pVel);
        [DllImport("gts.dll")]
        public static extern short GT_PvtTableEx(short cardNum, short tableId, int count, ref double pTime, ref double pPos, ref double pVelBegin, ref double pVelEnd);
        [DllImport("gts.dll")]
        public static extern short GT_PvtTableComplete(short cardNum, short tableId, int count, ref double pTime, ref double pPos, ref double pA, ref double pB, ref double pC, double velBegin, double velEnd);
        [DllImport("gts.dll")]
        public static extern short GT_PvtTablePercent(short cardNum, short tableId, int count, ref double pTime, ref double pPos, ref double pPercent, double velBegin);
        [DllImport("gts.dll")]
        public static extern short GT_PvtPercentCalculate(short cardNum, int n, ref double pTime, ref double pPos, ref double pPercent, double velBegin, ref double pVel);
        [DllImport("gts.dll")]
        public static extern short GT_PvtTableContinuous(short cardNum, short tableId, int count, ref double pPos, ref double pVel, ref double pPercent, ref double pVelMax, ref double pAcc, ref double pDec, double timeBegin);
        [DllImport("gts.dll")]
        public static extern short GT_PvtContinuousCalculate(short cardNum, int n, ref double pPos, ref double pVel, ref double pPercent, ref double pVelMax, ref double pAcc, ref double pDec, ref double pTime);
        [DllImport("gts.dll")]
        public static extern short GT_PvtTableMovePercent(short cardNum, short tableId, long distance, double vm, double acc, double pa1, double pa2, double dec, double pd1, double pd2, out double pVel, out double pAcc, out double pDec, out double pTime);
        [DllImport("gts.dll")]
        public static extern short GT_HomeInit(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_Home(short cardNum, short axis, int pos, double vel, double acc, int offset);
        [DllImport("gts.dll")]
        public static extern short GT_Index(short cardNum, short axis, int pos, int offset);
        [DllImport("gts.dll")]
        public static extern short GT_HomeStop(short cardNum, short axis, int pos, double vel, double acc);
        [DllImport("gts.dll")]
        public static extern short GT_HomeSts(short cardNum, short axis, out ushort pStatus);
        [DllImport("gts.dll")]
        public static extern short GT_HandwheelInit(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_SetHandwheelStopDec(short cardNum, short slave, double decSmoothStop, double decAbruptStop);
        [DllImport("gts.dll")]
        public static extern short GT_StartHandwheel(short cardNum, short slave, short master, short masterEven, short slaveEven, short intervalTime, double acc, double dec, double vel, short stopWaitTime);
        [DllImport("gts.dll")]
        public static extern short GT_EndHandwheel(short cardNum, short slave);
        [DllImport("gts.dll")]
        public static extern short GT_SetTrigger(short cardNum, short i, ref TTrigger pTrigger);
        [DllImport("gts.dll")]
        public static extern short GT_GetTrigger(short cardNum, short i, out TTrigger pTrigger);
        [DllImport("gts.dll")]
        public static extern short GT_GetTriggerStatus(short cardNum, short i, out TTriggerStatus pTriggerStatus, short count);
        [DllImport("gts.dll")]
        public static extern short GT_ClearTriggerStatus(short cardNum, short i);
        [DllImport("gts.dll")]
        public static extern short GT_SetComparePort(short cardNum, short channel, short hsio0, short hsio1);
        [DllImport("gts.dll")]
        public static extern short GT_ComparePulse(short cardNum, short level, short outputType, short time);
        [DllImport("gts.dll")]
        public static extern short GT_CompareStop(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_CompareStatus(short cardNum, out short pStatus, out int pCount);
        [DllImport("gts.dll")]
        public static extern short GT_CompareData(short cardNum, short encoder, short source, short pulseType, short startLevel, short time, ref int pBuf1, short count1, ref int pBuf2, short count2);
        [DllImport("gts.dll")]
        public static extern short GT_CompareLinear(short cardNum, short encoder, short channel, int startPos, int repeatTimes, int interval, short time, short source);
        [DllImport("gts.dll")]
        public static extern short GT_CompareContinuePulseMode(short cardNum, short mode, short count, short standTime);
        [DllImport("gts.dll")]
        public static extern short GT_SetEncResponseCheck(short cardNum, short control, short dacThreshold, double minEncVel, int time);
        [DllImport("gts.dll")]
        public static extern short GT_GetEncResponseCheck(short cardNum, short control, out short pDacThreshold, out double pMinEncVel, out int pTime);
        [DllImport("gts.dll")]
        public static extern short GT_EnableEncResponseCheck(short cardNum, short control);
        [DllImport("gts.dll")]
        public static extern short GT_DisableEncResponseCheck(short cardNum, short control);
        [DllImport("gts.dll")]
        public static extern short GT_2DCompareMode(short cardNum, short chn, short mode);
        [DllImport("gts.dll")]
        public static extern short GT_2DComparePulse(short cardNum, short chn, short level, short outputType, short time);
        [DllImport("gts.dll")]
        public static extern short GT_2DCompareStop(short cardNum, short chn);
        [DllImport("gts.dll")]
        public static extern short GT_2DCompareClear(short cardNum, short chn);
        [DllImport("gts.dll")]
        public static extern short GT_2DCompareStatus(short cardNum, short chn, out short pStatus, out int pCount, out short pFifo, out short pFifoCount, out short pBufCount);
        [DllImport("gts.dll")]
        public static extern short GT_2DCompareSetPrm(short cardNum, short chn, ref T2DComparePrm pPrm);
        [DllImport("gts.dll")]
        public static extern short GT_2DCompareData(short cardNum, short chn, short count, ref T2DCompareData pBuf, short fifo);
        [DllImport("gts.dll")]
        public static extern short GT_2DCompareStart(short cardNum, short chn);
        [DllImport("gts.dll")]
        public static extern short GT_SetAxisMode(short cardNum, short axis, short mode);
        [DllImport("gts.dll")]
        public static extern short GT_GetAxisMode(short cardNum, short axis, out short pMode);
        [DllImport("gts.dll")]
        public static extern short GT_SetHSIOOpt(short cardNum, ushort value, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_GetHSIOOpt(short cardNum, out ushort pValue, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_LaserPowerMode(short cardNum, short laserPowerMode, double maxValue, double minValue, short channel, short delaymode);
        [DllImport("gts.dll")]
        public static extern short GT_LaserPrfCmd(short cardNum, double outputCmd, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_LaserOutFrq(short cardNum, double outFrq, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_SetPulseWidth(short cardNum, uint width, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_SetWaitPulse(short cardNum, ushort mode, double waitPulseFrq, double waitPulseDuty, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_SetPreVltg(short cardNum, ushort mode, double voltageValue, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_SetLevelDelay(short cardNum, ushort offDelay, ushort onDelay, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_EnaFPK(short cardNum, ushort time1, ushort time2, ushort laserOffDelay, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_DisFPK(short cardNum, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_SetLaserDisMode(short cardNum, short mode, short source, ref int pPos, ref double pScale, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_SetLaserDisRatio(short cardNum, ref double pRatio, double minPower, double maxPower, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_SetWaitPulseEx(short cardNum, ushort mode, double waitPulseFrq, double waitPulseDuty);
        [DllImport("gts.dll")]
        public static extern short GT_SetLaserMode(short cardNum, short mode);
        [DllImport("gts.dll")]
        public static extern short GT_SetLaserFollowSpline(short cardNum, short tableId, long n, ref double pX, ref double pY, double beginValue, double endValue, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_GetLaserFollowSpline(short cardNum, short tableId, long n, out double pX, out double pY, out double pA, out double pB, out double pC, out long pCount, short channel);
        //ExtMdl
        [DllImport("gts.dll")]
        public static extern short GT_OpenExtMdl(short cardNum, string pDllName);
        [DllImport("gts.dll")]
        public static extern short GT_CloseExtMdl(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_SwitchtoCardNoExtMdl(short cardNum, short card);
        [DllImport("gts.dll")]
        public static extern short GT_ResetExtMdl(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_LoadExtConfig(short cardNum, string pFileName);
        [DllImport("gts.dll")]
        public static extern short GT_SetExtIoValue(short cardNum, short mdl, ushort value);
        [DllImport("gts.dll")]
        public static extern short GT_GetExtIoValue(short cardNum, short mdl, out ushort pValue);
        [DllImport("gts.dll")]
        public static extern short GT_SetExtIoBit(short cardNum, short mdl, short index, ushort value);
        [DllImport("gts.dll")]
        public static extern short GT_GetExtIoBit(short cardNum, short mdl, short index, out ushort pValue);
        [DllImport("gts.dll")]
        public static extern short GT_GetExtAdValue(short cardNum, short mdl, short chn, out ushort pValue);
        [DllImport("gts.dll")]
        public static extern short GT_GetExtAdVoltage(short cardNum, short mdl, short chn, out double pValue);
        [DllImport("gts.dll")]
        public static extern short GT_SetExtDaValue(short cardNum, short mdl, short chn, ushort value);
        [DllImport("gts.dll")]
        public static extern short GT_SetExtDaVoltage(short cardNum, short mdl, short chn, double value);
        [DllImport("gts.dll")]
        public static extern short GT_GetStsExtMdl(short cardNum, short mdl, short chn, out ushort pStatus);
        [DllImport("gts.dll")]
        public static extern short GT_GetExtDoValue(short cardNum, short mdl, out ushort pValue);
        [DllImport("gts.dll")]
        public static extern short GT_GetExtMdlMode(short cardNum, out short pMode);
        [DllImport("gts.dll")]
        public static extern short GT_SetExtMdlMode(short cardNum, short mode);
        [DllImport("gts.dll")]
        public static extern short GT_UploadConfig(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_DownloadConfig(short cardNum);
        [DllImport("gts.dll")]
        public static extern short GT_GetUuid(short cardNum, out char pCode, short count);
        //2D Compensate
        public struct TCompensate2DTable
        {
            public short count1;
            public short count2;
            public int posBegin1;
            public int posBegin2;
            public int step1;
            public int step2;
        }
        public struct TCompensate2D
        {
            public short enable;
            public short tableIndex;
            public short axisType1;
            public short axisType2;
            public short axisIndex1;
            public short axisIndex2;
        }
        [DllImport("gts.dll")]
        public static extern short GT_SetCompensate2DTable(short cardNum, short tableIndex, ref TCompensate2DTable pTable, ref int pData, short externComp);
        [DllImport("gts.dll")]
        public static extern short GT_GetCompensate2DTable(short cardNum, short tableIndex, out TCompensate2DTable pTable, out short pExternComp);
        [DllImport("gts.dll")]
        public static extern short GT_SetCompensate2D(short cardNum, short axis, ref TCompensate2D pComp2d);
        [DllImport("gts.dll")]
        public static extern short GT_GetCompensate2D(short cardNum, short axis, out TCompensate2D pComp2d);
        [DllImport("gts.dll")]
        public static extern short GT_GetCompensate2DValue(short cardNum, short axis, out double pValue);
        //Smart Home
        public const short HOME_STAGE_IDLE = 0;
        public const short HOME_STAGE_START = 1;
        public const short HOME_STAGE_SEARCH_LIMIT = 10;
        public const short HOME_STAGE_SEARCH_LIMIT_STOP = 11;
        public const short HOME_STAGE_SEARCH_LIMIT_ESCAPE = 13;
        public const short HOME_STAGE_SEARCH_LIMIT_RETURN = 15;
        public const short HOME_STAGE_SEARCH_LIMIT_RETURN_STOP = 16;
        public const short HOME_STAGE_SEARCH_HOME = 20;
        public const short HOME_STAGE_SEARCH_HOME_RETURN = 25;
        public const short HOME_STAGE_SEARCH_INDEX = 30;
        public const short HOME_STAGE_SEARCH_GPI = 40;
        public const short HOME_STAGE_SEARCH_GPI_RETURN = 45;
        public const short HOME_STAGE_GO_HOME = 80;
        public const short HOME_STAGE_END = 100;
        public const short HOME_ERROR_NONE = 0;
        public const short HOME_ERROR_NOT_TRAP_MODE = 1;
        public const short HOME_ERROR_DISABLE = 2;
        public const short HOME_ERROR_ALARM = 3;
        public const short HOME_ERROR_STOP = 4;
        public const short HOME_ERROR_STAGE = 5;
        public const short HOME_ERROR_HOME_MODE = 6;
        public const short HOME_ERROR_SET_CAPTURE_HOME = 7;
        public const short HOME_ERROR_NO_HOME = 8;
        public const short HOME_ERROR_SET_CAPTURE_INDEX = 9;
        public const short HOME_ERROR_NO_INDEX = 10;
        public const short HOME_MODE_LIMIT = 10;
        public const short HOME_MODE_LIMIT_HOME = 11;
        public const short HOME_MODE_LIMIT_INDEX = 12;
        public const short HOME_MODE_LIMIT_HOME_INDEX = 13;
        public const short HOME_MODE_HOME = 20;
        public const short HOME_MODE_HOME_INDEX = 22;
        public const short HOME_MODE_INDEX = 30;
        public struct THomePrm
        {
            public short mode;
            public short moveDir;
            public short indexDir;
            public short edge;
            public short triggerIndex;
            public short pad1_1;
            public short pad1_2;
            public short pad1_3;
            public double velHigh;
            public double velLow;
            public double acc;
            public double dec;
            public short smoothTime;
            public short pad2_1;
            public short pad2_2;
            public short pad2_3;
            public int homeOffset;
            public int searchHomeDistance;
            public int searchIndexDistance;
            public int escapeStep;
            public int pad3_1;
            public int pad3_2;
            public int pad3_3;
        }
        public struct THomeStatus
        {
            public short run;
            public short stage;
            public short error;
            public short pad1;
            public int capturePos;
            public int targetPos;
        }
        [DllImport("gts.dll")]
        public static extern short GT_GoHome(short cardNum, short axis, ref THomePrm pHomePrm);
        [DllImport("gts.dll")]
        public static extern short GT_GetHomePrm(short cardNum, short axis, out THomePrm pHomePrm);
        [DllImport("gts.dll")]
        public static extern short GT_GetHomeStatus(short cardNum, short axis, out THomeStatus pHomeStatus);
        //Extern Control
        public struct TControlConfigEx
        {
            public short refType;
            public short refIndex;
            public short feedbackType;
            public short feedbackIndex;
            public int errorLimit;
            public short feedbackSmooth;
            public short controlSmooth;
        }
        [DllImport("gts.dll")]
        public static extern short GT_SetControlConfigEx(short cardNum, short control, ref TControlConfigEx pControl);
        [DllImport("gts.dll")]
        public static extern short GT_GetControlConfigEx(short cardNum, short control, out TControlConfigEx pControl);
        //Adc filter
        public struct TAdcConfig
        {
            public short active;
            public short reverse;
            public double a;
            public double b;
            public short filterMode;
        }
        [DllImport("gts.dll")]
        public static extern short GT_SetAdcConfig(short cardNum, short adc, ref TAdcConfig pAdc);
        [DllImport("gts.dll")]
        public static extern short GT_GetAdcConfig(short cardNum, short adc, out TAdcConfig pAdc);
        [DllImport("gts.dll")]
        public static extern short GT_SetAdcFilterPrm(short cardNum, short adc, double k);
        [DllImport("gts.dll")]
        public static extern short GT_GetAdcFilterPrm(short cardNum, short adc, out double pk);
        //Superimposed
        [DllImport("gts.dll")]
        public static extern short GT_SetControlSuperimposed(short cardNum, short control, short superimposedType, short superimposedIndex);
        [DllImport("gts.dll")]
        public static extern short GT_GetControlSuperimposed(short cardNum, short control, out short pSuperimposedType, out short pSuperimposedIndex);
        [DllImport("gts.dll")]
        public static extern short GT_ZeroLaserOnTime(short cardNum, short channel);
        [DllImport("gts.dll")]
        public static extern short GT_GetLaserOnTime(short cardNum, short channel, out uint pTime);
    }
}
src/Bro.Device.GTSCard/GTSCardConfig.cs
New file
@@ -0,0 +1,247 @@
using Bro.Common.Base;
using Bro.Common.Helper;
using Bro.Common.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Drawing.Design;
namespace Bro.Device.GTSCard
{
    public abstract class GTSCardOperationConfigBase : OperationConfigBase
    {
        ///// <summary>
        ///// 需要操作的PLC项
        ///// </summary>
        //public List<PLCItem> Items { get; set; } = new List<PLCItem>();
    }
    //public class GTSCardInitialConfigBase : InitialConfigBase, IMonitorConfig
    //{
    //    [Category("驱动类型")]
    //    [Description("驱动类型")]
    //    [DisplayName("驱动类型")]
    //    [TypeConverter(typeof(PLCTypeConverter))]
    //    public override string DriverType { get; set; }
    //    [Category("警报配置")]
    //    [Description("警报配置列表")]
    //    [DisplayName("警报配置")]
    //    [TypeConverter(typeof(CollectionCountConvert))]
    //    [Editor(typeof(WarningSetsEditor), typeof(UITypeEditor))]
    //    public List<WarningSet> WarningSetCollection { get; set; } = new List<WarningSet>();
    //    #region IMonitorConfig
    //    [Category("监听设置")]
    //    [Description("监听操作配置集合")]
    //    [DisplayName("监听配置")]
    //    [TypeConverter(typeof(CollectionCountConvert))]
    //    [Editor(typeof(ComplexCollectionEditor<MonitorSet>), typeof(UITypeEditor))]
    //    public List<IMonitorSet> MonitorSetCollection { get; set; } = new List<IMonitorSet>();
    //    [Category("监听设置")]
    //    [Description("true:启动监听 false:关闭监听")]
    //    [DisplayName("监听启用")]
    //    public bool IsEnableMonitor { get; set; } = true;
    //    [Category("监听设置")]
    //    [Description("扫描间隔时间,单位:ms")]
    //    [DisplayName("扫描间隔")]
    //    public int MonitorInterval { get; set; } = 100;
    //    [Category("监听设置")]
    //    [Description("超时设置,单位:ms")]
    //    [DisplayName("监听超时")]
    //    public int MonitorTimeout { get; set; } = 500;
    //    [Category("事件地址设置")]
    //    [Description("事件开始地址,PLC的实际寄存器地址。十进制,不包含功能码。")]
    //    [DisplayName("监听开始地址")]
    //    public int EventStartAddress { get; set; } = 8000;
    //    [Category("事件地址设置")]
    //    [Description("事件地址长度,最大长度128")]
    //    [DisplayName("监听长度")]
    //    public int EventLength { get; set; } = 120;
    //    public List<IMonitorSet> GetAllMonitorSet()
    //    {
    //        WarningSetCollection.ForEach(m => m.Source = this.Name);
    //        MonitorSetCollection.ForEach(m => m.SourceDevice = this.Id);
    //        return MonitorSetCollection;
    //    }
    //    #endregion
    //    #region IMotion Related
    //    [Category("运动配置")]
    //    [Description("运动轴状态集合")]
    //    [DisplayName("运动轴状态集合")]
    //    [TypeConverter(typeof(CollectionCountConvert))]
    //    [Editor(typeof(ComplexCollectionEditor<PLCMotionDefinition_State>), typeof(UITypeEditor))]
    //    public List<PLCMotionDefinition_State> MotionStateCollection { get; set; } = new List<PLCMotionDefinition_State>();
    //    #endregion
    //}
    /// <summary>
    /// 点位类型
    /// </summary>
    public enum PosType
    {
        /// <summary>
        /// 直线插补
        /// </summary>
        Line = 1,
        /// <summary>
        /// 圆弧插补(半径)
        /// </summary>
        CircleRadius,
        /// <summary>
        /// 圆弧插补(圆心)
        /// </summary>
        CircleCenter
    }
    public static class GTSCardParameter
    {
        #region 运动参数
        public static int Dangliang = 1;
        public static int AxisCount = 2;//运动轴数量
        public static short CardNum = Convert.ToInt16(ConfigurationManager.AppSettings["cardNum"]);
        public static short fifo = Convert.ToInt16(ConfigurationManager.AppSettings["fifo"]);
        public static int FlySpeed = Convert.ToInt32(ConfigurationManager.AppSettings["flySpeed"]);
        public static double FlyAcc = Convert.ToDouble(ConfigurationManager.AppSettings["flyAcc"]);
        public static int P2PSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["p2pSpeed"]);
        public static double P2PAcc = Convert.ToDouble(ConfigurationManager.AppSettings["p2pAcc"]);
        public static double P2PDec = Convert.ToDouble(ConfigurationManager.AppSettings["p2pDec"]);
        public static int FreeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["freeSpeed"]);
        public static int VelEnd = Convert.ToInt32(ConfigurationManager.AppSettings["velEnd"]);//飞拍结束速度
        public static int HomeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["homeSpeed"]);
        public static int Loading = Convert.ToInt32(ConfigurationManager.AppSettings["loading"]);
        //public const short cardn = 0;//运动控制器卡号 默认为:0
        //public const short crdn = 1;//坐标系号 取值范围:[1, 2]
        //public const short fifo = 0;//插补缓存区号 取值范围:[0, 1],默认值为:0
        //public const int flySpeed = 250;//飞拍速度
        //public const double flyAcc = 0.5;//飞拍加速度
        //public const int gocatorSpeed = 150;//3D检测轴运动速度
        //public const int p2pSpeed = 250;//P2P速度
        //public const double p2pAcc = 1;//P2P加速度
        //public const double p2pDec = 1;//P2P减速度
        //public const int calibrationSpeed = 10;//标定速度
        //public const int calibrationZ = 19336;//标定Z轴高度
        //public const int barcodeSpeed = 250;//条码检测轴运动速度
        //public const int freeSpeed = 250;//非检测时轴运动速度
        //public const int velEnd = 0;//飞拍结束速度
        //public const int homeSpeed = 50;//回零速度
        //public const int loading = 80000;//上料位置
        #endregion
        #region IO
        /// <summary>
        /// 输入IO默认值
        /// </summary>
        public const int InDefaultValue = 0xFFDA;
        /// <summary>
        /// 夹紧气缸
        /// </summary>
        public const short EXO_1 = 100;//夹紧气缸
        /// <summary>
        /// 日光灯
        /// </summary>
        public const short EXO_2 = 101;//日光灯
        /// <summary>
        /// 光源切换
        /// </summary>
        public const short EXO_3 = 102;//光源切换
        /// <summary>
        /// 红灯
        /// </summary>
        public const short EXO_4 = 103;//红灯
        /// <summary>
        /// 黄灯
        /// </summary>
        public const short EXO_5 = 104;//黄灯
        /// <summary>
        /// 绿灯
        /// </summary>
        public const short EXO_6 = 105;//绿灯
        /// <summary>
        /// 蜂鸣器
        /// </summary>
        public const short EXO_7 = 106;//蜂鸣器
        /// <summary>
        /// Gocator X
        /// </summary>
        public const short EXO_8 = 107;//Gocator X
        /// <summary>
        /// 正面光(左)
        /// </summary>
        public const short EXO_9 = 108;//正面光(左)
        /// <summary>
        /// 正面光(后)
        /// </summary>
        public const short EXO_10 = 109;//正面光(后)
        /// <summary>
        /// 正面光(右)
        /// </summary>
        public const short EXO_11 = 110;//正面光(右)
        /// <summary>
        /// 正面光(前)
        /// </summary>
        public const short EXO_12 = 111;//正面光(前)
        /// <summary>
        /// Gocator Y
        /// </summary>
        public const short EXO_16 = 115;//Gocator Y
        /// <summary>
        /// 输出IO默认值
        /// </summary>
        public const int OutDefaultValue = 0xFFF;
        /// <summary>
        /// 左启动
        /// </summary>
        public const short EXI0 = 0;//左起动
        /// <summary>
        /// 右启动
        /// </summary>
        public const short EXI1 = 1;//右起动
        /// <summary>
        /// 停止
        /// </summary>
        public const short EXI2 = 2;//停止
        /// <summary>
        /// 复位
        /// </summary>
        public const short EXI3 = 3;//复位
        /// <summary>
        /// 急停
        /// </summary>
        public const short EXI4 = 4;//急停
        /// <summary>
        /// 门开关
        /// </summary>
        public const short EXI5 = 5;//门开关
        /// <summary>
        /// 安全光幕
        /// </summary>
        public const short EXI6 = 6;//安全光幕
        public const short EXI7 = 7;//
        /// <summary>
        /// 夹紧气缸原位
        /// </summary>
        public const short EXI8 = 8;//夹紧气缸原位
        /// <summary>
        /// 夹紧气缸到位
        /// </summary>
        public const short EXI9 = 9;//夹紧气缸到位
        #endregion
    }
}
src/Bro.Device.GTSCard/GTSCardDriver.cs
New file
@@ -0,0 +1,237 @@
using Bro.Common.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bro.Device.GTSCard
{
    public class GTSCardDriver : DeviceBase, IMotion
    {
        public List<AxisInfo> GetCurrentAxisInfo(params string[] axisName)
        {
            throw new NotImplementedException();
        }
        protected override void Init()
        {
            throw new NotImplementedException();
        }
        protected override void Pause()
        {
            throw new NotImplementedException();
        }
        protected override void Resume()
        {
            throw new NotImplementedException();
        }
        protected override void Start()
        {
            throw new NotImplementedException();
        }
        protected override void Stop()
        {
            throw new NotImplementedException();
        }
        /// <summary>
        /// 点位到点位 运动
        /// </summary>
        /// <param name="cardNum">卡号</param>
        /// <param name="axisNum">轴号</param>
        /// <param name="prfPosition">规划位置,单位毫米</param>
        /// <param name="prfVelocity">规划速度,单位米每秒</param>
        public void P2P(short cardNum, short axisNum, int prfPosition, int prfVelocity)
        {
            GTSCardAPI.TTrapPrm trapprm;
            GTSCardAPI.GT_PrfTrap(cardNum, axisNum);
            GTSCardAPI.GT_GetTrapPrm(cardNum, axisNum, out trapprm);
            trapprm.acc = GTSCardParameter.P2PAcc;
            trapprm.dec = GTSCardParameter.P2PDec;
            trapprm.smoothTime = 1;
            GTSCardAPI.GT_SetTrapPrm(cardNum, axisNum, ref trapprm);
            GTSCardAPI.GT_SetPos(cardNum, axisNum, prfPosition * GTSCardParameter.Dangliang);
            GTSCardAPI.GT_SetVel(cardNum, axisNum, prfVelocity * GTSCardParameter.Dangliang);
            GTSCardAPI.GT_Update(cardNum, 1 << (axisNum - 1));
        }
        /// <summary>
        /// Jog运动
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="axisNum"></param>
        /// <param name="velocity">规划速度,单位米每秒</param>
        public void Jog(short cardNum, short axisNum, double velocity)
        {
            GTSCardAPI.TJogPrm jogprm = new GTSCardAPI.TJogPrm();
            short rtn = GTSCardAPI.GT_PrfJog(cardNum, axisNum);
            jogprm.acc = 1;
            jogprm.dec = 1;
            GTSCardAPI.GT_SetJogPrm(cardNum, axisNum, ref jogprm);//设置jog运动参数
            GTSCardAPI.GT_SetVel(cardNum, axisNum, velocity);//设置目标速度
            GTSCardAPI.GT_Update(cardNum, 1 << (axisNum - 1));//更新轴运动
        }
        /// <summary>
        /// 读取输入
        /// </summary>
        /// <param name="cardNum">卡号</param>
        /// <param name="index">输入口</param>
        /// <returns>有输入返回true,无输入返回false</returns>
        public bool GetDi(short cardNum, short index)
        {
            int value;
            GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_GPI, out value);
            if ((value & 1 << index) == 0) return true;//有输入返回true
            else return false;          //无输入返回false
        }
        /// <summary>
        /// 输出
        /// </summary>
        /// <param name="cardNumo">卡号</param>
        /// <param name="index">输出口,返回1-16</param>
        /// <param name="value">0表示输出,1表示关闭</param>
        public void WriteOut(short cardNumo, short index, bool value)
        {
            short outNum = (short)(index % 100 + 1);
            switch (value)
            {
                case true:
                    {
                        GTSCardAPI.GT_SetDoBit(cardNumo, GTSCardAPI.MC_GPO, outNum, 0);//按位输出,0表示输出,1表示关闭
                    }
                    break;
                case false:
                    {
                        GTSCardAPI.GT_SetDoBit(cardNumo, GTSCardAPI.MC_GPO, outNum, 1);//按位输出,0表示输出,1表示关闭
                    }
                    break;
            }
        }
        /// <summary>
        /// 停止 某个轴
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="axisNum"></param>
        /// <param name="option">0表示平滑停止,1表示紧急停止</param>
        public void Stop(short cardNum, short axisNum, short option)
        {
            GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), option);
        }
        /// <summary>
        /// 停止 某个轴
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="axisNum">轴号</param>
        /// <param name="value">停止方式,false表示平滑停止,true表示紧急停止</param>
        public void Stop(short cardNum, short axisNum, bool value)
        {
            switch (value)
            {
                case false:
                    {
                        GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 0);
                    }
                    break;
                case true:
                    {
                        GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 1 << (axisNum - 1));
                    }
                    break;
            }
        }
        /// <summary>
        /// 停止 全部轴
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="value">停止方式,false表示平滑停止,true表示紧急停止</param>
        public void StopAll(short cardNum, bool value)
        {
            for (short i = 1; i <= GTSCardParameter.AxisCount; i++)
            {
                Stop(cardNum, i, value);
            }
        }
        /// <summary>
        /// IO输出
        /// </summary>
        /// <param name="cardNum">卡号</param>
        /// <param name="mdl">模块号</param>
        /// <param name="index">IO输出</param>
        /// <param name="value">true表示输出,false表示无输出</param>
        public void MC_WriteDigitalOutput(short cardNum, short mdl, short index, bool value)
        {
            if (value)
            {
                GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 0);
            }
            else
            {
                GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 1);
            }
        }
        /// <summary>
        /// 读取IO输出状态
        /// </summary>
        /// <param name="cardNumo"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public bool GetDoSts(short cardNumo, short index)
        {
            short outNum = 0;
            int outSts;
            outNum = (short)(index % 100);
            GTSCardAPI.GT_GetDo(cardNumo, GTSCardAPI.MC_GPO, out outSts);
            if ((outSts & (1 << outNum)) == 0) return true;
            else return false;
        }
        static object lockObj = new object();
        /// <summary>
        /// 读取当前值
        /// </summary>
        /// <param name="cardNum">卡号</param>
        /// <param name="axisNum">轴号</param>
        /// <returns>返回当前值,单位毫米</returns>
        public double GetPosMM(short cardNum, short axisNum)
        {
            lock (lockObj)
            {
                double prfpos = 0; uint pclock = 0;
                GTSCardAPI.GT_GetPrfPos(cardNum, axisNum, out prfpos, 1, out pclock);
                return prfpos / GTSCardParameter.Dangliang;
            }
        }
        /// <summary>
        /// 读取轴状态,判断电机是否停止
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="axisNum"></param>
        /// <returns></returns>
        public bool IsStop(short cardNum, short axisNum)
        {
            lock (lockObj)
            {
                int sts = 0;
                uint pclock = 0;
                GTSCardAPI.GT_GetSts(cardNum, axisNum, out sts, 1, out pclock);
                if ((sts & 0x400) == 0) return true;//停止返回true
                else return false;              //运行中返回false
            }
        }
    }
}
src/Bro.Device.GTSCard/GtsCardManager.cs
New file
@@ -0,0 +1,440 @@
//using Bro.Common.PubSub;
//using Broc.AOI.Entity;
//using Broc.AOI.Manager;
//using HalconDotNet;
//using Lmi3d.GoSdk;
//using Lmi3d.Zen;
//using Lmi3d.Zen.Io;
//using System;
//using System.Collections.Generic;
//using System.Configuration;
//using System.Diagnostics;
//using System.IO;
//using System.Linq;
//using System.Runtime.InteropServices;
//using System.Threading;
//using System.Threading.Tasks;
//using static Broc.AOI.Manager.LogHelper;
//namespace Bro.Device.GTSCard
//{
//    public class GtsCardManager
//    {
//        GtsMotionCard _gts = new GtsMotionCard();
//        int pCount;//位置比较已输出次数
//        bool canStop = false;
//        private static GtsIO curValueIo = new GtsIO();
//        CancellationTokenSource cts = new CancellationTokenSource();
//        private static int lastInputValue = Parameter.InDefaultValue;
//        int StopType = 0; //0:未收到手动停止信号 1:收到收到停止信号 2:收到急停信号
//        public GtsCardManager(ProductManager productManager)
//        {
//            try
//            {
//                _product = productManager.GetProductList().Find(x => x.IsDefault);
//                Monitor();
//                InitGocatorIO();
//                PubSubCenter.GetInstance().RemoveSubscribers(MessageType.StopType.ToString());
//                PubSubCenter.GetInstance().Subscribe(MessageType.StopType.ToString(), OnStopType);
//                gocatorRecord = new GocatorRecord();
//                //gocatorRecord.OnDataDone = OnGocatorDataDone;
//                gocatorRecord.Connect();
//                gocatorRecord.GocatorStop();
//            }
//            catch (Exception ex)
//            {
//                Trace.TraceError(ex.ToString());
//            }
//        }
//        private object OnStopType(ISubscriber arg1, object arg2, object arg3)
//        {
//            StopType = (int)arg2;
//            Trace.TraceInformation($"停止信号变更为:{StopType}");
//            if (StopType > 0)
//            {
//                Trace.TraceError("停止后请重启软件");
//            }
//            return null;
//        }
//        public void InitGocatorIO()
//        {
//            _gts.WriteOut(Parameter.cardn, Parameter.EXO_8, false);
//            _gts.WriteOut(Parameter.cardn, Parameter.EXO_16, false);
//        }
//        public void DoCompare(List<ST_Point> pointList)
//        {
//            canStop = !canStop;
//            GTSCardAPI.T2DComparePrm prm;
//            short t;
//            short sRtn;
//            GTSCardAPI.T2DCompareData[] dataBuf = new GTSCardAPI.T2DCompareData[1];
//            short pStatus,
//            pFifo,//当前空闲fifo
//            pFifoCount,//当前空闲fifo剩余空间
//            pBufCount;//FPGA 中 FIFO 剩余空间, FPGA 的 FIFO 总大小为 512,启动位置比较之前,压入的数据先进入 FPGA 的 FIFO
//            sRtn = GTSCardAPI.GT_2DCompareClear(0, 0);
//            sRtn = GTSCardAPI.GT_2DCompareMode(0, 0, GTSCardAPI.COMPARE2D_MODE_2D);
//            prm.encx = Axisn.X;       // X 轴为1轴
//            prm.ency = Axisn.Y;       // Y 轴为2轴
//            prm.maxerr = 500;   // 最大误差Pulse
//            prm.outputType = 0; // 输出类型 = 脉冲
//            prm.source = 1;     // 比较源0 :规划1:编码器
//            prm.startLevel = 0; //起始电平方式0:位置比较输出引脚电平复位    1:位置比较输出引脚电平取反
//            prm.threshold = 0; // 最优点计算阈值
//            prm.time = 50;   // 脉冲宽度 us
//            sRtn = GTSCardAPI.GT_2DCompareSetPrm(0, 0, ref prm);
//            sRtn = GTSCardAPI.GT_SetComparePort(0, GTSCardAPI.COMPARE_PORT_HSIO, 0, 1);
//            sRtn = GTSCardAPI.GT_2DCompareStart(0, 0);
//            foreach (var point in pointList)
//            {
//                dataBuf[0].px = point.X - (pointList[0].X + 2000);
//                dataBuf[0].py = point.Y - pointList[0].Y;
//                do
//                {
//                    t = GTSCardAPI.GT_2DCompareStatus(0, 0, out pStatus, out pCount, out pFifo, out pFifoCount, out pBufCount);
//                    t = GTSCardAPI.GT_2DCompareData(0, 0, 1, ref dataBuf[0], pFifo);//压入数据
//                } while (t != 0);
//            }
//        }
//        public void ChaBu(List<ST_Point> pointList)
//        {
//            short sRtn = -1;        //Googol返回值查询
//            GTSCardAPI.TCrdPrm crdPrm = new GTSCardAPI.TCrdPrm();        //坐标系参数结构体
//            int[] posTest = new int[2];
//            GTSCardAPI.TCrdData temp = new GTSCardAPI.TCrdData();//定义前瞻缓存区大小为200段
//            GTSCardAPI.TCrdData[] crdData = new GTSCardAPI.TCrdData[400];
//            int size = Marshal.SizeOf(temp) * 400;
//            IntPtr pCrdData = Marshal.AllocHGlobal(size);
//            //******第一步建二维立坐标系1轴X二轴Y,使用坐标系1的FIFO0压入数据。
//            crdPrm.dimension = 3;                        // 建立三维的坐标系
//            crdPrm.synVelMax = 500;                      // 坐标系的最大合成速度是: 500 pulse/ms
//            crdPrm.synAccMax = 5;                        // 坐标系的最大合成加速度是: 5 pulse/ms^2
//            crdPrm.evenTime = 0;                         // 坐标系的最小匀速时间为0
//            crdPrm.profile1 = 1;                         // 规划器1对应到X轴
//            crdPrm.profile2 = 2;                         // 规划器2对应到Y轴
//            crdPrm.profile3 = 3;
//            crdPrm.profile4 = 0;
//            crdPrm.profile5 = 0;
//            crdPrm.profile6 = 0;
//            crdPrm.profile7 = 0;                         // 若profile7 = 1,规划器7对应到X轴
//            crdPrm.profile8 = 0;
//            crdPrm.setOriginFlag = 1;                    // 需要设置加工坐标系原点位置
//            crdPrm.originPos1 = 0;                       // 加工坐标系原点位置在(0,0),即与机床坐标系原点重合
//            crdPrm.originPos2 = 0;
//            crdPrm.originPos3 = 0;
//            crdPrm.originPos4 = 0;
//            crdPrm.originPos5 = 0;
//            crdPrm.originPos6 = 0;
//            crdPrm.originPos7 = 0;
//            crdPrm.originPos8 = 0;
//            sRtn = GTSCardAPI.GT_SetCrdPrm(0, 1, ref crdPrm);   //必须在轴调用停止状态下
//            sRtn = GTSCardAPI.GT_CrdClear(0, 1, 0);//清除坐标系1 FIFO1中的数据缓存
//            // 初始化坐标系1的FIFO0的前瞻模块
//            sRtn = GTSCardAPI.GT_InitLookAhead(Parameter.cardn,           //卡号
//                                       Parameter.crdn,           //坐标系
//                                       Parameter.fifo,           //FIFO
//                                       5,           //拐角时间T
//                                       5,           //accMax
//                                      200,         //数据段N
//                                      pCrdData);   //结构体crdData
//            //*******第二步压入数据,超过4096段循环压入。
//            foreach (var point in pointList)
//            {
//                //sRtn = mc.GT_LnXY(Parameter.cardn, Parameter.crdn, point.X, point.Y, Parameter.speed, Parameter.synAcc, Parameter.velEnd, Parameter.fifo);
//                sRtn = GTSCardAPI.GT_LnXYZ(Parameter.cardn, Parameter.crdn, point.X, point.Y, point.Z.Value, Parameter.flySpeed, Parameter.flyAcc, Parameter.velEnd, Parameter.fifo);
//            }
//            sRtn = GTSCardAPI.GT_CrdData(Parameter.cardn, Parameter.crdn, System.IntPtr.Zero, Parameter.fifo);
//            GTSCardAPI.GT_CrdStart(0, 1, 0);
//        }
//        public void On()
//        {
//            for (int i = 1; i <= Axisn.Count; i++)
//            {
//                GTSCardAPI.GT_AxisOn(0, (short)i);
//            }
//        }
//        public void Off()
//        {
//            for (int i = 1; i <= Axisn.Count; i++)
//            {
//                GTSCardAPI.GT_AxisOff(0, (short)i);
//            }
//        }
//        public void GoHome()
//        {
//            try
//            {
//                //清除报警
//                ClearGtsAlarm();
//                Task.Run(() =>
//                {
//                    //关闭Gocator X Y
//                    _gts.WriteOut(Parameter.cardn, Parameter.EXO_8, false);
//                    _gts.WriteOut(Parameter.cardn, Parameter.EXO_16, false);
//                    ////切换Gocator的Job为长边Job
//                    //gocatorRecord.GocatorStop();
//                    //gocatorRecord.SwitchJob(_product.JobLong);
//                    //Z轴回原点,返回电机方向,待结束后再动X、Y轴,避免碰撞
//                    _gts.GoHome(Parameter.cardn, Axisn.Z, GTSCardAPI.HOME_MODE_LIMIT_HOME, -1, 0);
//                    //X轴回原点,远离电机
//                    _gts.GoHome(Parameter.cardn, Axisn.X, GTSCardAPI.HOME_MODE_LIMIT_HOME, 1, 0);
//                    _gts.GoHome(Parameter.cardn, Axisn.Y, GTSCardAPI.HOME_MODE_LIMIT_HOME, 1, 0);
//                    while (true)
//                    {
//                        Thread.Sleep(100);
//                        if (_gts.IsStop(0, Axisn.X) && _gts.IsStop(0, Axisn.Y) && _gts.IsStop(0, Axisn.Z) && StopType == 0)
//                        {
//                            //前往上料点
//                            GoLoading();
//                            PubSubCenter.GetInstance().Publish(MessageType.IsHome.ToString(), null, null);
//                            break;
//                        }
//                    }
//                });
//            }
//            catch (Exception ex)
//            {
//                Trace.TraceError("GoHome异常:{0}", ex);
//            }
//        }
//        public void GoLoading()
//        {
//            try
//            {
//                while (true)
//                {
//                    if (_gts.IsStop(0, Axisn.Y))
//                    {
//                        _gts.P2P(Parameter.cardn, Axisn.Y, Parameter.loading, Parameter.freeSpeed);
//                        break;
//                    }
//                }
//            }
//            catch (Exception ex)
//            {
//                Trace.TraceError("GoLoading异常:{0}", ex);
//            }
//        }
//        public void ClearGtsAlarm()
//        {
//            int axis_sts;
//            uint clk;
//            GTSCardAPI.GT_ClrSts(Parameter.cardn, 1, Axisn.Count);
//            for (short i = Axisn.Count; i > 0; i--)
//            {
//                GTSCardAPI.GT_GetSts(Parameter.cardn, i, out axis_sts, 1, out clk);
//                if ((axis_sts & 0x200) == 0)
//                {
//                    var rst = GTSCardAPI.GT_AxisOn(0, i);
//                }
//                // 正极限报警
//                if ((axis_sts & 0x20) != 0)
//                {
//                    // 位置请零
//                    GTSCardAPI.GT_ZeroPos(Parameter.cardn, 1, Axisn.Count);
//                    // 负向移动
//                    _gts.P2P(Parameter.cardn, i, -50, Parameter.homeSpeed);
//                }
//                // 负极限报警
//                if ((axis_sts & 0x40) != 0)
//                {
//                    // 位置请零
//                    GTSCardAPI.GT_ZeroPos(Parameter.cardn, 1, Axisn.Count);
//                    // 正向移动
//                    _gts.P2P(Parameter.cardn, i, 50, Parameter.homeSpeed);
//                }
//            }
//            // 清除状态
//            GTSCardAPI.GT_ClrSts(Parameter.cardn, 1, Axisn.Count);
//        }
//        public void Stop(bool value)
//        {
//            Task.Run(() =>
//            {
//                try
//                {
//                    _gts.Stop(Parameter.cardn, Axisn.X, value);
//                    _gts.Stop(Parameter.cardn, Axisn.Y, value);
//                    _gts.Stop(Parameter.cardn, Axisn.Z, value);
//                }
//                catch (Exception ex)
//                {
//                }
//            });
//        }
//        public void GoToFirst(ST_Point point)
//        {
//            _gts.P2P(Parameter.cardn, Axisn.X, point.X + 2000, Parameter.p2pSpeed);
//            _gts.P2P(Parameter.cardn, Axisn.Y, point.Y, Parameter.p2pSpeed);
//            _gts.P2P(Parameter.cardn, Axisn.Z, point.Z.Value, Parameter.p2pSpeed);
//            while (true)
//            {
//                if (_gts.IsStop(0, Axisn.X) && _gts.IsStop(0, Axisn.Y) && _gts.IsStop(0, Axisn.Z)) break;
//            }
//        }
//        //public void ExistSport(int checkId, string barcode, CameraManager cameraManager, List<ST_Point> pointList, List<ST_CheckItem> checkItemExistList, string path)
//        //{
//        //    cameraManager.SetExposure(Parameter.existExposure);
//        //    cameraManager.BeginAcquisition();
//        //    int speed = 0;
//        //    int i = 1;
//        //    foreach (var point in pointList)
//        //    {
//        //        //四个正面光:true表示熄灭、false表示亮起
//        //        if (!string.IsNullOrEmpty(point.Light) && point.Light.Contains(","))
//        //        {
//        //            SetLightOn(point.Light);
//        //        }
//        //        speed = Parameter.p2pSpeed;
//        //        _gts.P2P(Parameter.cardn, Axisn.X, point.X, speed);
//        //        _gts.P2P(Parameter.cardn, Axisn.Y, point.Y, speed);
//        //        _gts.P2P(Parameter.cardn, Axisn.Z, point.Z.Value, speed);
//        //        while (true)
//        //        {
//        //            if (_gts.IsStop(0, Axisn.X) && _gts.IsStop(0, Axisn.Y) && _gts.IsStop(0, Axisn.Z) && StopType == 0) break;
//        //        }
//        //        cameraManager.ExistCheck(checkId, barcode, checkItemExistList, i, point, path);
//        //        CheckProcess checkProcess = i == 1 ? CheckProcess.Begin : i == pointList.Count ? CheckProcess.CheckEnd : CheckProcess.In;
//        //        i++;
//        //    }
//        //    //四个正面光:true表示熄灭、false表示亮起
//        //    SetLightOff();
//        //}
//        public void Monitor()
//        {
//            lastInputValue = Parameter.InDefaultValue;
//            Task.Factory.StartNew(() =>
//            {
//                while (!cts.IsCancellationRequested)
//                {
//                    try
//                    {
//                        Thread.Sleep(100);
//                        //mc.GT_GetDi(Parameter.cardn, mc.MC_LIMIT_POSITIVE, out curValueIo.Limpos);
//                        //mc.GT_GetDi(Parameter.cardn, mc.MC_LIMIT_NEGATIVE, out curValueIo.Limneg);
//                        //mc.GT_GetDi(Parameter.cardn, mc.MC_HOME, out curValueIo.Home);
//                        //mc.GT_GetDi(Parameter.cardn, mc.MC_ALARM, out curValueIo.Alarm);
//                        GTSCardAPI.GT_GetDi(Parameter.cardn, GTSCardAPI.MC_GPI, out curValueIo.Input);
//                        //mc.GT_GetDo(Parameter.cardn, mc.MC_GPO, out curValueIo.Output);
//                        //if (_gts.IsAlarm())
//                        //{
//                        //    //急停
//                        //    _gts.Stop(Parameter.cardn, true);
//                        //    // 开启提示红灯和声音
//                        //    AlarmLight(AlarmType.Red);
//                        //}
//                        if (curValueIo.Input != lastInputValue)
//                        {
//                            OnMessageIO();
//                            lastInputValue = curValueIo.Input;
//                        }
//                    }
//                    catch (Exception ex)
//                    {
//                        Trace.TraceError("Monitor: {0}", ex.Message);
//                    }
//                }
//            }, cts.Token);
//        }
//        //private void OnMessageIO()
//        //{
//        //    try
//        //    {
//        //        //根据信号执行相应动作
//        //        for (var i = 0; i < 16; i++)
//        //        {
//        //            if ((lastInputValue & (1 << i)) != (curValueIo.Input & (1 << i)))
//        //            {
//        //                // 有变化在发布通知 InputBitIndex-Value(0/1)
//        //                byte v = (byte)((curValueIo.Input & (1 << i)) >> i);
//        //                PubSubCenter.GetInstance().Publish(MessageType.MessageIO.ToString(), i, v);
//        //            }
//        //        }
//        //    }
//        //    catch (Exception ex)
//        //    {
//        //        Trace.TraceError("OnServerMessage: {0}", ex.Message);
//        //    }
//        //}
//        //private void SetLightOn(string lights)
//        //{
//        //    if (lights.Contains("1"))
//        //    {
//        //        _gts.WriteOut(Parameter.cardn, Parameter.EXO_9, false);
//        //    }
//        //    else
//        //    {
//        //        _gts.WriteOut(Parameter.cardn, Parameter.EXO_9, true);
//        //    }
//        //    if (lights.Contains("2"))
//        //    {
//        //        _gts.WriteOut(Parameter.cardn, Parameter.EXO_10, false);
//        //    }
//        //    else
//        //    {
//        //        _gts.WriteOut(Parameter.cardn, Parameter.EXO_10, true);
//        //    }
//        //    if (lights.Contains("3"))
//        //    {
//        //        _gts.WriteOut(Parameter.cardn, Parameter.EXO_11, false);
//        //    }
//        //    else
//        //    {
//        //        _gts.WriteOut(Parameter.cardn, Parameter.EXO_11, true);
//        //    }
//        //    if (lights.Contains("4"))
//        //    {
//        //        _gts.WriteOut(Parameter.cardn, Parameter.EXO_12, false);
//        //    }
//        //    else
//        //    {
//        //        _gts.WriteOut(Parameter.cardn, Parameter.EXO_12, true);
//        //    }
//        //}
//        //private void SetLightOff()
//        //{
//        //    _gts.WriteOut(Parameter.cardn, Parameter.EXO_10, true);
//        //    _gts.WriteOut(Parameter.cardn, Parameter.EXO_9, true);
//        //    _gts.WriteOut(Parameter.cardn, Parameter.EXO_11, true);
//        //    _gts.WriteOut(Parameter.cardn, Parameter.EXO_12, true);
//        //}
//    }
//}
src/Bro.Device.GTSCard/GtsIO.cs
New file
@@ -0,0 +1,63 @@
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//namespace Bro.Device.GTSCard
//{
//    public class GtsIO
//    {
//        /// <summary>
//        /// 输入点位
//        /// </summary>
//        public int Input;
//        /// <summary>
//        /// 输出点位
//        /// </summary>
//        public int Output;
//        /// <summary>
//        /// 回零点位
//        /// </summary>
//        public int Home;
//        /// <summary>
//        /// 正极限
//        /// </summary>
//        public int Limpos;
//        /// <summary>
//        /// 负极限
//        /// </summary>
//        public int Limneg;
//        /// <summary>
//        /// 报警信息
//        /// </summary>
//        public int Alarm;
//        /// <summary>
//        /// 轴状态
//        /// </summary>
//        public int AxisSts;
//        /// <summary>
//        /// X轴规划位置
//        /// </summary>
//        public double PrfPosX;
//        /// <summary>
//        /// Y轴规划位置
//        /// </summary>
//        public double PrfPosY;
//        /// <summary>
//        /// Z轴规划位置
//        /// </summary>
//        public double PrfPosZ;
//        /// <summary>
//        /// A轴规划位置
//        /// </summary>
//        public double PrfPosA;
//    }
//}
src/Bro.Device.GTSCard/GtsMotionCard.cs
New file
@@ -0,0 +1,483 @@
//using Broc.AOI.Entity;
//using System;
//using System.Collections.Generic;
//using System.Runtime.InteropServices;
//using System.Threading;
//namespace Bro.Device.GTSCard
//{
//    public class GtsMotionCard
//    {
//        private const int dangliang = 1;
//        private object lockobj = new object();//线程锁
//        /// <summary>
//        /// 初始化卡
//        /// </summary>
//        /// <returns></returns>
//        public bool InitCard()
//        {
//            short rtn;
//            rtn = GTSCardAPI.GT_Open(0, 0, 1);                  //打开运动控制器。参数必须为(0,1),不能修改。
//            //rtn += mc.GT_Reset(0);
//            rtn += GTSCardAPI.GT_LoadConfig(0, AppDomain.CurrentDomain.BaseDirectory + @"Gts800.cfg");
//            rtn += GTSCardAPI.GT_ClrSts(0, 1, 8);
//            return rtn == 0;
//        }
//        /// <summary>
//        /// 扩展模块初始化
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <returns></returns>
//        public bool ExtIOModuleInit(short cardNum)
//        {
//            short rtn = 0;
//            rtn += GTSCardAPI.GT_OpenExtMdl(cardNum, "gts.dll");
//            rtn += GTSCardAPI.GT_LoadExtConfig(cardNum, "ExtModule.cfg");
//            rtn += GTSCardAPI.GT_ResetExtMdl(cardNum);
//            return rtn == 0;
//        }
//        /// <summary>
//        /// 回零
//        /// </summary>
//        /// <param name="cardNum">卡号</param>
//        /// <param name="axisNum">轴号</param>
//        /// <param name="homests">轴回原点状态</param>
//        public bool GoHome(short cardNum, short axisNum, short home_mode, short home_dir, int homeoffset)
//        {
//            GTSCardAPI.GT_ZeroPos(cardNum, axisNum, 1);
//            GTSCardAPI.THomePrm thomeprm;
//            GTSCardAPI.THomeStatus homests;
//            short rtn = GTSCardAPI.GT_GetHomePrm(cardNum, axisNum, out thomeprm);
//            thomeprm.mode = home_mode;//回零方式
//            thomeprm.moveDir = home_dir;//回零方向
//            thomeprm.edge = 0;
//            thomeprm.velHigh = 50;
//            thomeprm.velLow = 50;
//            thomeprm.acc = 50;
//            thomeprm.dec = 50;
//            thomeprm.searchHomeDistance = 9999999;//搜搜距离
//            thomeprm.homeOffset = 0;  //偏移距离
//            thomeprm.escapeStep = 1000;
//            rtn = GTSCardAPI.GT_GoHome(cardNum, axisNum, ref thomeprm);  //启动回零
//            //do
//            //{
//            //    mc.GT_GetHomeStatus(cardNum, axisNum, out homests);//获取回原点状态
//            //} while (homests.run == 1); // 等待搜索原点停止
//            //mc.GT_ZeroPos(cardNum, axisNum, 1);
//            //return true;
//            while (true)
//            {
//                Thread.Sleep(5);
//                GTSCardAPI.GT_GetHomeStatus(cardNum, axisNum, out homests);
//                if (homests.run == 0)
//                {
//                    if (homests.error == 0)
//                    {
//                        Thread.Sleep(200);
//                        GTSCardAPI.GT_ZeroPos(cardNum, axisNum, 1);
//                    }
//                    return true;
//                }
//            }
//        }
//        /// <summary>
//        /// 点位到点位 运动
//        /// </summary>
//        /// <param name="cardNum">卡号</param>
//        /// <param name="axisNum">轴号</param>
//        /// <param name="prfPosition">规划位置,单位毫米</param>
//        /// <param name="prfVelocity">规划速度,单位米每秒</param>
//        public void P2P(short cardNum, short axisNum, int prfPosition, int prfVelocity)
//        {
//            GTSCardAPI.TTrapPrm trapprm;
//            GTSCardAPI.GT_PrfTrap(cardNum, axisNum);
//            GTSCardAPI.GT_GetTrapPrm(cardNum, axisNum, out trapprm);
//            trapprm.acc = Parameter.p2pAcc;
//            trapprm.dec = Parameter.p2pDec;
//            trapprm.smoothTime = 1;
//            GTSCardAPI.GT_SetTrapPrm(cardNum, axisNum, ref trapprm);
//            GTSCardAPI.GT_SetPos(cardNum, axisNum, prfPosition * dangliang);
//            GTSCardAPI.GT_SetVel(cardNum, axisNum, prfVelocity * dangliang);
//            GTSCardAPI.GT_Update(cardNum, 1 << (axisNum - 1));
//        }
//        /// <summary>
//        /// 停止
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="axisNum"></param>
//        /// <param name="option">0表示平滑停止,1表示紧急停止</param>
//        public void Stop(short cardNum, short axisNum, short option)
//        {
//            GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), option);
//        }
//        /// <summary>
//        /// 停止
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="value">停止方式,false表示平滑停止,true表示紧急停止</param>
//        public void Stop(short cardNum, bool value)
//        {
//            for (short i = 1; i <= Axisn.Count; i++)
//            {
//                Stop(cardNum, i, value);
//            }
//        }
//        /// <summary>
//        /// Jog运动
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="axisNum"></param>
//        /// <param name="prfvel_ms">规划速度,单位米每秒</param>
//        public void Jog(short cardNum, short axisNum, double prfvel_ms)
//        {
//            GTSCardAPI.TJogPrm jogprm = new GTSCardAPI.TJogPrm();
//            short rtn = GTSCardAPI.GT_PrfJog(cardNum, axisNum);
//            jogprm.acc = 1;
//            jogprm.dec = 1;
//            GTSCardAPI.GT_SetJogPrm(cardNum, axisNum, ref jogprm);//设置jog运动参数
//            GTSCardAPI.GT_SetVel(cardNum, axisNum, prfvel_ms);//设置目标速度
//            GTSCardAPI.GT_Update(cardNum, 1 << (axisNum - 1));//更新轴运动
//        }
//        /// <summary>
//        /// 读取输入
//        /// </summary>
//        /// <param name="cardNum">卡号</param>
//        /// <param name="index">输入口</param>
//        /// <returns>有输入返回true,无输入返回false</returns>
//        public bool GetDi(short cardNum, short index)
//        {
//            int value;
//            GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_GPI, out value);
//            if ((value & 1 << index) == 0) return true;//有输入返回true
//            else return false;          //无输入返回false
//        }
//        /// <summary>
//        /// 读取正限位
//        /// </summary>
//        /// <param name="cardNum">卡号</param>
//        /// <param name="axisNum">轴号</param>
//        /// <returns>0表示触发限位,1表示没有触发</returns>
//        public bool GetPosLimit(short cardNum, short axisNum)
//        {
//            int value;
//            GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_LIMIT_POSITIVE, out value);
//            if ((value & 1 << axisNum) == 0) return true;////0表示触发限位,返回true,
//            else return false;    // //1表示没有触发,返回false
//        }
//        /// <summary>
//        /// 读取负限位
//        /// </summary>
//        /// <param name="cardNum">卡号</param>
//        /// <param name="axisNum">轴号</param>
//        /// <returns>0表示触发限位,返回true,1表示没有触发,返回false</returns>
//        public bool GetNegLimit(short cardNum, short axisNum)
//        {
//            int value;
//            GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_LIMIT_NEGATIVE, out value);
//            if ((value & 1 << axisNum) == 0) return true;//0表示触发限位,返回true,
//            else return false;                         //1表示没有触发,返回false
//        }
//        /// <summary>
//        /// 输出
//        /// </summary>
//        /// <param name="cardNumo">卡号</param>
//        /// <param name="index">输出口,返回1-16</param>
//        /// <param name="value">0表示输出,1表示关闭</param>
//        public void WriteOut(short cardNumo, short index, bool value)
//        {
//            short outNum = 0;
//            outNum = (short)(index % 100 + 1);
//            switch (value)
//            {
//                case true:
//                    {
//                        GTSCardAPI.GT_SetDoBit(cardNumo, GTSCardAPI.MC_GPO, outNum, 0);//按位输出,0表示输出,1表示关闭
//                    }
//                    break;
//                case false:
//                    {
//                        GTSCardAPI.GT_SetDoBit(cardNumo, GTSCardAPI.MC_GPO, outNum, 1);//按位输出,0表示输出,1表示关闭
//                    }
//                    break;
//            }
//        }
//        /// <summary>
//        /// 读取IO输出状态
//        /// </summary>
//        /// <param name="cardNumo"></param>
//        /// <param name="index"></param>
//        /// <returns></returns>
//        public bool GetDoSts(short cardNumo, short index)
//        {
//            short outNum = 0;
//            int outSts;
//            outNum = (short)(index % 100);
//            GTSCardAPI.GT_GetDo(cardNumo, GTSCardAPI.MC_GPO, out outSts);
//            if ((outSts & (1 << outNum)) == 0) return true;
//            else return false;
//        }
//        /// <summary>
//        /// 读取当前值
//        /// </summary>
//        /// <param name="cardNum">卡号</param>
//        /// <param name="axisNum">轴号</param>
//        /// <returns>返回当前值,单位毫米</returns>
//        public double GetPosMM(short cardNum, short axisNum)
//        {
//            lock (lockobj)
//            {
//                double prfpos = 0; uint pclock = 0;
//                GTSCardAPI.GT_GetPrfPos(cardNum, axisNum, out prfpos, 1, out pclock);
//                return prfpos / dangliang;
//            }
//        }
//        /// <summary>
//        /// 读取轴状态,判断电机是否停止
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="axisNum"></param>
//        /// <returns></returns>
//        public bool IsStop(short cardNum, short axisNum)
//        {
//            lock (lockobj)
//            {
//                int sts = 0;
//                uint pclock = 0;
//                GTSCardAPI.GT_GetSts(cardNum, axisNum, out sts, 1, out pclock);
//                if ((sts & 0x400) == 0) return true;//停止返回true
//                else return false;              //运行中返回false
//            }
//        }
//        /// <summary>
//        /// 二维位置比较输出
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="output_data"></param>
//        public void Compare2DOutput(short cardNum, short chn, int[] output_data)
//        {
//            GTSCardAPI.GT_2DCompareClear(cardNum, chn);
//            GTSCardAPI.GT_2DCompareMode(cardNum, chn, GTSCardAPI.COMPARE2D_MODE_2D);
//            GTSCardAPI.GT_SetComparePort(cardNum, GTSCardAPI.COMPARE_PORT_GPO, 0, 1);
//            GTSCardAPI.T2DComparePrm Prm;
//            Prm.encx = 1;
//            Prm.ency = 2;
//            Prm.maxerr = 300;
//            Prm.outputType = 0;
//            Prm.source = 0;
//            Prm.startLevel = 0;
//            Prm.threshold = 10;
//            Prm.time = 10000;
//            GTSCardAPI.GT_2DCompareSetPrm(cardNum, chn, ref Prm);
//            GTSCardAPI.T2DCompareData[] pBuf = new GTSCardAPI.T2DCompareData[5];
//            for (int i = 0; i < output_data.Length / 2; i += 2)
//            {
//                pBuf[i].px = 1000;
//                pBuf[i + 1].py = 1000;
//            }
//            GTSCardAPI.GT_2DCompareData(cardNum, chn, (short)(output_data.Length / 2), ref pBuf[0], 0);
//            GTSCardAPI.GT_2DCompareStart(cardNum, chn);
//        }
//        /// <summary>
//        /// 按位读取扩展IO输入口
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="mdl"></param>
//        /// <param name="index"></param>
//        /// <returns></returns>
//        public bool GetDiBit(short cardNum, short mdl, short index)
//        {
//            ushort pvalue = 0;
//            GTSCardAPI.GT_GetExtIoBit(cardNum, mdl, index, out pvalue);
//            return pvalue == 0;
//        }
//        /// <summary>
//        /// IO输出
//        /// </summary>
//        /// <param name="cardNum">卡号</param>
//        /// <param name="mdl">模块号</param>
//        /// <param name="index">IO输出</param>
//        /// <param name="value">true表示输出,false表示无输出</param>
//        public void MC_WriteDigitalOutput(short cardNum, short mdl, short index, bool value)
//        {
//            if (value)
//            {
//                GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 0);
//            }
//            else
//            {
//                GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 1);
//            }
//        }
//        /// <summary>
//        /// 建立插补坐标系
//        /// </summary>
//        /// <param name="crdnum">坐标系号</param>
//        public void BuildCrd(short cardNum, short crdn, short axis_x, short axis_y, double maxVel, double maxAcc, short evenTime)
//        {
//            GTSCardAPI.TCrdPrm crdPrm;
//            crdPrm.dimension = 2;
//            crdPrm.synVelMax = maxVel;
//            crdPrm.synAccMax = maxAcc;
//            crdPrm.evenTime = evenTime;
//            crdPrm.profile1 = 1;
//            crdPrm.profile2 = 2;
//            crdPrm.profile3 = 0;
//            crdPrm.profile4 = 0;
//            crdPrm.profile5 = 0;
//            crdPrm.profile6 = 0;
//            crdPrm.profile7 = 0;
//            crdPrm.profile8 = 0;
//            crdPrm.setOriginFlag = 1;
//            crdPrm.originPos1 = 0;
//            crdPrm.originPos2 = 0;
//            crdPrm.originPos3 = 0;
//            crdPrm.originPos4 = 0;
//            crdPrm.originPos5 = 0;
//            crdPrm.originPos6 = 0;
//            crdPrm.originPos7 = 0;
//            crdPrm.originPos8 = 0;
//            GTSCardAPI.GT_SetCrdPrm(cardNum, crdn, ref crdPrm);
//            GTSCardAPI.GT_CrdClear(cardNum, crdn, 0);
//            GTSCardAPI.GT_ClrSts(cardNum, 1, 4);
//        }
//        /// <summary>
//        /// 直线插补
//        /// </summary>
//        /// <param name="chabunum"></param>
//        public void LnXY(short cardNum, short crdn, short fifon, int[] data, double vel, double prfacc, double endVel)
//        {
//            short run;
//            int segment;
//            for (int i = 0; i < data.Length; i += 2)
//            {
//                run = GTSCardAPI.GT_LnXY(cardNum, crdn, data[i], data[i + 1], vel, prfacc, endVel, fifon);
//            }
//            run = GTSCardAPI.GT_CrdStart(cardNum, crdn, 0);
//            //while (true)
//            //{
//            //    mc.GT_CrdStatus(cardNum, crdn, out run, out segment, fifon);
//            //    if (run == 0)
//            //    {
//            //        break;
//            //    }
//            //}
//        }
//        /// <summary>
//        /// 以圆心做圆弧插补
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="crdn"></param>
//        /// <param name="fifon"></param>
//        /// <param name="data"></param>
//        /// <param name="xCenter"></param>
//        /// <param name="yCenter"></param>
//        /// <param name="dir"></param>
//        /// <param name="vel"></param>
//        /// <param name="prfacc"></param>
//        /// <param name="endVel"></param>
//        public void ArcXYC(short cardNum, short crdn, short fifon, int[] data, double xCenter, double yCenter, short dir, double vel, double prfacc, double endVel)
//        {
//            short run;
//            int segment;
//            for (int i = 0; i < data.Length; i += 2)
//            {
//                GTSCardAPI.GT_ArcXYC(cardNum, crdn, data[i], data[i + 1], xCenter, yCenter, dir, vel, prfacc, endVel, fifon);
//            }
//            GTSCardAPI.GT_CrdStart(cardNum, crdn, 0);
//            while (true)
//            {
//                GTSCardAPI.GT_CrdStatus(cardNum, crdn, out run, out segment, fifon);
//                if (run == 0)
//                {
//                    break;
//                }
//            }
//        }
//        /// <summary>
//        /// 以半径做圆弧插补
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="crdn"></param>
//        /// <param name="fifon"></param>
//        /// <param name="data"></param>
//        /// <param name="rad"></param>
//        /// <param name="dir"></param>
//        /// <param name="vel"></param>
//        /// <param name="prfacc"></param>
//        /// <param name="endVel"></param>
//        public void ArcXYR(short cardNum, short crdn, short fifon, int[] data, double rad, short dir, double vel, double prfacc, double endVel)
//        {
//            short run;
//            int segment;
//            for (int i = 0; i < data.Length; i += 2)
//            {
//                GTSCardAPI.GT_ArcXYR(cardNum, crdn, data[i], data[i + 1], rad, dir, vel, prfacc, endVel, fifon);
//            }
//            GTSCardAPI.GT_CrdStart(cardNum, crdn, 0);
//            while (true)
//            {
//                GTSCardAPI.GT_CrdStatus(cardNum, crdn, out run, out segment, fifon);
//                if (run == 0)
//                {
//                    break;
//                }
//            }
//        }
//        /// <summary>
//        /// 停止运动
//        /// </summary>
//        /// <param name="cardNum"></param>
//        /// <param name="axisNum">轴号</param>
//        /// <param name="value">停止方式,false表示平滑停止,true表示紧急停止</param>
//        public void Stop(short cardNum, short axisNum, bool value)
//        {
//            switch (value)
//            {
//                case false:
//                    {
//                        GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 0);
//                    }
//                    break;
//                case true:
//                    {
//                        GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 1 << (axisNum - 1));
//                    }
//                    break;
//            }
//        }
//        /// <summary>
//        /// 是否报警
//        /// bit 0-光栅,bit 1-门开关,bit 2-急停
//        /// 1100 0000 0101
//        /// </summary>
//        /// <returns></returns>
//        public bool IsAlarm()
//        {
//            GTSCardAPI.GT_GetDi(Parameter.cardNum, GTSCardAPI.MC_GPI, out var input);
//            var bRet =
//                ((input & (1 << Parameter.EXI6)) >> Parameter.EXI6) == 1 ||
//                //((input & (1 << GlueInCommands.EXI1)) >> GlueInCommands.EXI1) == 0 || todo
//                ((input & (1 << Parameter.EXI4)) >> Parameter.EXI4) == 1;
//            //var bRet = isAlarm ||
//            //    ((input & (1 << Parameter.EXI6)) >> Parameter.EXI6) == 1 ||
//            //    //((input & (1 << GlueInCommands.EXI1)) >> GlueInCommands.EXI1) == 0 || todo
//            //    ((input & (1 << Parameter.EXI4)) >> Parameter.EXI4) == 1;
//            return bRet;
//        }
//    }
//}
src/Bro.Device.GTSCard/GtsParameter.cs
New file
@@ -0,0 +1,194 @@
//using System;
//using System.Collections.Generic;
//using System.Configuration;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//namespace Broc.AOI.Entity
//{
//    /// <summary>
//    /// 点位类型
//    /// </summary>
//    public enum PointType
//    {
//        /// <summary>
//        /// 直线插补
//        /// </summary>
//        Line = 1,
//        /// <summary>
//        /// 圆弧插补(半径)
//        /// </summary>
//        CircleRadius,
//        /// <summary>
//        /// 圆弧插补(圆心)
//        /// </summary>
//        CircleCenter
//    }
//    public static class Axisn
//    {
//        public const short X = 1;
//        public const short Y = 2;
//        public const short Z = 3;
//        public const short Count = 4;
//    }
//    public static class Parameter
//    {
//        #region 运动参数
//        public static short cardn = Convert.ToInt16(ConfigurationManager.AppSettings["cardn"]);
//        public static short crdn = Convert.ToInt16(ConfigurationManager.AppSettings["crdn"]);
//        public static short fifo = Convert.ToInt16(ConfigurationManager.AppSettings["fifo"]);
//        public static int flySpeed = Convert.ToInt32(ConfigurationManager.AppSettings["flySpeed"]);
//        public static double flyAcc = Convert.ToDouble(ConfigurationManager.AppSettings["flyAcc"]);
//        public static int gocatorSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["gocatorSpeed"]);
//        public static int p2pSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["p2pSpeed"]);
//        public static double p2pAcc = Convert.ToDouble(ConfigurationManager.AppSettings["p2pAcc"]);
//        public static double p2pDec = Convert.ToDouble(ConfigurationManager.AppSettings["p2pDec"]);
//        public static int calibrationSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["calibrationSpeed"]);
//        public static int calibrationZ = Convert.ToInt16(ConfigurationManager.AppSettings["calibrationZ"]);
//        public static int barcodeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["barcodeSpeed"]);
//        public static int freeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["freeSpeed"]);
//        public static int velEnd = Convert.ToInt32(ConfigurationManager.AppSettings["velEnd"]);
//        public static int homeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["homeSpeed"]);
//        public static int loading = Convert.ToInt32(ConfigurationManager.AppSettings["loading"]);
//        //public const short cardn = 0;//运动控制器卡号 默认为:0
//        //public const short crdn = 1;//坐标系号 取值范围:[1, 2]
//        //public const short fifo = 0;//插补缓存区号 取值范围:[0, 1],默认值为:0
//        //public const int flySpeed = 250;//飞拍速度
//        //public const double flyAcc = 0.5;//飞拍加速度
//        //public const int gocatorSpeed = 150;//3D检测轴运动速度
//        //public const int p2pSpeed = 250;//P2P速度
//        //public const double p2pAcc = 1;//P2P加速度
//        //public const double p2pDec = 1;//P2P减速度
//        //public const int calibrationSpeed = 10;//标定速度
//        //public const int calibrationZ = 19336;//标定Z轴高度
//        //public const int barcodeSpeed = 250;//条码检测轴运动速度
//        //public const int freeSpeed = 250;//非检测时轴运动速度
//        //public const int velEnd = 0;//飞拍结束速度
//        //public const int homeSpeed = 50;//回零速度
//        //public const int loading = 80000;//上料位置
//        #endregion
//        #region 相机参数
//        public static int flyExposure = Convert.ToInt32(ConfigurationManager.AppSettings["flyExposure"]);
//        public static int photoExposure = Convert.ToInt32(ConfigurationManager.AppSettings["photoExposure"]);
//        public static int codeExposure = Convert.ToInt32(ConfigurationManager.AppSettings["codeExposure"]);
//        public static int existExposure = Convert.ToInt32(ConfigurationManager.AppSettings["existExposure"]);
//        public static int holeExposure = Convert.ToInt32(ConfigurationManager.AppSettings["holeExposure"]);
//        public static int realTimeExposure = Convert.ToInt32(ConfigurationManager.AppSettings["realTimeExposure"]);
//        //public const int flyExposure = 200;//飞拍曝光
//        //public const int photoExposure = 250000;//拍照曝光
//        //public const int codeExposure = 20000;//条码曝光
//        //public const int existExposure = 20000;//有无检测的曝光
//        #endregion
//        #region IO
//        /// <summary>
//        /// 输入IO默认值
//        /// </summary>
//        public const int InDefaultValue = 0xFFDA;
//        /// <summary>
//        /// 夹紧气缸
//        /// </summary>
//        public const short EXO_1 = 100;//夹紧气缸
//        /// <summary>
//        /// 日光灯
//        /// </summary>
//        public const short EXO_2 = 101;//日光灯
//        /// <summary>
//        /// 光源切换
//        /// </summary>
//        public const short EXO_3 = 102;//光源切换
//        /// <summary>
//        /// 红灯
//        /// </summary>
//        public const short EXO_4 = 103;//红灯
//        /// <summary>
//        /// 黄灯
//        /// </summary>
//        public const short EXO_5 = 104;//黄灯
//        /// <summary>
//        /// 绿灯
//        /// </summary>
//        public const short EXO_6 = 105;//绿灯
//        /// <summary>
//        /// 蜂鸣器
//        /// </summary>
//        public const short EXO_7 = 106;//蜂鸣器
//        /// <summary>
//        /// Gocator X
//        /// </summary>
//        public const short EXO_8 = 107;//Gocator X
//        /// <summary>
//        /// 正面光(左)
//        /// </summary>
//        public const short EXO_9 = 108;//正面光(左)
//        /// <summary>
//        /// 正面光(后)
//        /// </summary>
//        public const short EXO_10 = 109;//正面光(后)
//        /// <summary>
//        /// 正面光(右)
//        /// </summary>
//        public const short EXO_11 = 110;//正面光(右)
//        /// <summary>
//        /// 正面光(前)
//        /// </summary>
//        public const short EXO_12 = 111;//正面光(前)
//        /// <summary>
//        /// Gocator Y
//        /// </summary>
//        public const short EXO_16 = 115;//Gocator Y
//        /// <summary>
//        /// 输出IO默认值
//        /// </summary>
//        public const int OutDefaultValue = 0xFFF;
//        /// <summary>
//        /// 左启动
//        /// </summary>
//        public const short EXI0 = 0;//左起动
//        /// <summary>
//        /// 右启动
//        /// </summary>
//        public const short EXI1 = 1;//右起动
//        /// <summary>
//        /// 停止
//        /// </summary>
//        public const short EXI2 = 2;//停止
//        /// <summary>
//        /// 复位
//        /// </summary>
//        public const short EXI3 = 3;//复位
//        /// <summary>
//        /// 急停
//        /// </summary>
//        public const short EXI4 = 4;//急停
//        /// <summary>
//        /// 门开关
//        /// </summary>
//        public const short EXI5 = 5;//门开关
//        /// <summary>
//        /// 安全光幕
//        /// </summary>
//        public const short EXI6 = 6;//安全光幕
//        public const short EXI7 = 7;//
//        /// <summary>
//        /// 夹紧气缸原位
//        /// </summary>
//        public const short EXI8 = 8;//夹紧气缸原位
//        /// <summary>
//        /// 夹紧气缸到位
//        /// </summary>
//        public const short EXI9 = 9;//夹紧气缸到位
//        #endregion
//    }
//}
src/Bro.Device.GTSCard/GtsPos.cs
New file
@@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bro.Device.GTSCard
{
    /// <summary>
    /// 固高点位结构
    /// </summary>
    public class GtsPos
    {
        /// <summary>
        /// 点位类型
        /// </summary>
        public PosType Type;
        /// <summary>
        /// 插补段 x 轴终点坐标值,取值范围:[-1073741823, 1073741823],单位:pulse
        /// </summary>
        public int X;
        /// <summary>
        /// 插补段 y 轴终点坐标值。取值范围:[-1073741823, 1073741823],单位:pulse
        /// </summary>
        public int Y;
        /// <summary>
        /// 插补段 z 轴终点坐标值。取值范围:[-1073741823, 1073741823],单位:pulse
        /// </summary>
        public int Z;
        /// <summary>
        /// 圆弧插补的圆心 x 方向相对于起点位置的偏移量。
        /// </summary>
        public double CenterX;
        /// <summary>
        /// 圆弧插补的圆心 y 方向相对于起点位置的偏移量
        /// </summary>
        public double CenterY;
        /// <summary>
        /// 圆弧插补的圆弧半径值。取值范围:[-1073741823, 1073741823],单位:pulse。
        /// 半径为正时,表示圆弧为小于等于 180°圆弧。
        /// 半径为负时,表示圆弧为大于 180°圆弧。
        /// 半径描述方式不能用来描述整圆。
        /// </summary>
        public double Radius;
        /// <summary>
        /// 圆弧的旋转方向。 0:顺时针圆弧。 1:逆时针圆弧
        /// </summary>
        public short CircleDir;
        /// <summary>
        /// 插补段的目标合成速度。取值范围:(0, 32767),单位:pulse/ms。
        /// </summary>
        public double Vel;
        /// <summary>
        /// 插补段的合成加速度。取值范围:(0, 32767),单位:pulse/ms2。
        /// </summary>
        public double Acc;
        /// <summary>
        /// 插补段的终点速度。取值范围:[0, 32767),单位:pulse/ms。
        /// 该值只有在没有使用 前瞻预处理功能时才有意义,否则该值无效。默认值为:0。
        /// </summary>
        public double EndVel;
        /// <summary>
        /// 关联字段
        /// </summary>
        public int CameraPoSq { get; set; }
    }
}
src/Bro.M071.Process.DBManager/Bro.M071.Process.DBManager.csproj
@@ -79,11 +79,11 @@
    </ProjectReference>
    <ProjectReference Include="..\Bro.Common.Device\Bro.Common.Device.csproj">
      <Project>{987308DD-8BAA-463A-94E2-77D62E01A5BF}</Project>
      <Name>Bro.Process.Common</Name>
      <Name>Bro.Common.Device</Name>
    </ProjectReference>
    <ProjectReference Include="..\Bro.Process.Model\Bro.Process.Model.csproj">
    <ProjectReference Include="..\Bro.M071.Process.Model\Bro.M071.Process.Model.csproj">
      <Project>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</Project>
      <Name>Bro.Process.Model</Name>
      <Name>Bro.M071.Process.Model</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
src/Bro.Process.DBManager/BaseModel.cs
New file
@@ -0,0 +1,200 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Bro.Process.DataBase
{
    public class BaseModel
    {
        /// <summary>
        /// 编号,唯一值,使用GUID
        /// </summary>
        [Key]
        [Required(ErrorMessage = "编号不可为空!")]
        [StringLength(64)]
        public string ID { get; set; } = Guid.NewGuid().ToString().ToUpper();
        /// <summary>
        /// 禁用状态 0 未禁用 1 已禁用
        /// </summary>
        [Required]
        public int IS_DISABLED { get; set; } = 0;
        /// <summary>
        /// 删除状态 0 未删除 1 已删除
        /// </summary>
        [Required]
        public int IS_DELETED { get; set; } = 0;
        /// <summary>
        /// 创建人信息
        /// </summary>
        //[Required]
        [StringLength(64)]
        public string CREATE_USER { get; set; }
        /// <summary>
        /// 创建时间
        /// </summary>
        //[Required]
        public DateTime? CREATE_TIME { get; set; } = DateTime.Now;
        /// <summary>
        /// 更新人信息
        /// </summary>
        [StringLength(64)]
        public string UPDATE_USER { get; set; }
        /// <summary>
        /// 更新时间
        /// </summary>
        public DateTime? UPDATE_TIME { get; set; }
    }
    public static class BaseModelHelper
    {
        public static void SetNew<T>(this T t, string userId) where T : BaseModel
        {
            t.CREATE_USER = userId;
            t.CREATE_TIME = DateTime.Now;
        }
        public static void SetUpdate<T>(this T t, string userId) where T : BaseModel
        {
            t.UPDATE_USER = userId;
            t.UPDATE_TIME = DateTime.Now;
        }
        static List<string> NoTransferProps = new List<string>() { "ID", "CREATE_USER", "CREATE_TIME", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED" };
        public static void DataTransfer<T>(this T destT, T sourceT) where T : BaseModel
        {
            destT.DataFrom(sourceT, NoTransferProps);
        }
        public static void DataFrom<T1, T2>(this T1 destT, T2 sourceT, List<string> exceptionProps = null) where T1 : class where T2 : class
        {
            PropertyInfo[] propDest = destT.GetType().GetProperties().Where(p => !(p.GetMethod.IsVirtual && !p.GetMethod.IsFinal)).ToArray();
            PropertyInfo[] propSource = sourceT.GetType().GetProperties();
            Array.ForEach(propDest, prop =>
            {
                if (exceptionProps == null || !exceptionProps.Contains(prop.Name))
                {
                    if (prop.CanWrite)
                    {
                        PropertyInfo propS = propSource.FirstOrDefault(p => p.Name == prop.Name);
                        if (propS != null && propS.CanRead)
                        {
                            prop.SetValue(destT, propS.GetValue(sourceT));
                        }
                    }
                }
            });
        }
        public static List<T> ToPagedList<T>(this IQueryable<T> orderQuery, BaseRequest request) where T : class
        {
            return orderQuery.Skip((request.PageNum - 1) * request.PageSize).Take(request.PageSize).ToList();
        }
    }
    public class BaseRequest : INotifyPropertyChanged
    {
        private int pageNum = 1;
        /// <summary>
        /// 查询结果页数
        /// </summary>
        public int PageNum
        {
            get => pageNum;
            set
            {
                if (pageNum != value)
                {
                    pageNum = value;
                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("PageNum"), null, null);
                }
            }
        }
        private int pageSize = 100;
        /// <summary>
        /// 每页的查询结果条数
        /// </summary>
        public int PageSize
        {
            get => pageSize;
            set
            {
                if (pageSize != value)
                {
                    pageSize = value;
                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("PageSize"), null, null);
                }
            }
        }
        /// <summary>
        /// 查询起始时间
        /// </summary>
        public DateTime? StartTime { get; set; }
        /// <summary>
        /// 查询结束时间
        /// </summary>
        public DateTime? EndTime { get; set; }
        /// <summary>
        /// 启用状态过滤器 1:仅未启用 0:仅启用 -1:全部
        /// </summary>
        public int DisableFilter { get; set; } = 0;
        /// <summary>
        /// 查询字符串
        /// </summary>
        public string SearchTxt { get; set; }
        private int totalNum = 0;
        /// <summary>
        /// 数据总数
        /// </summary>
        public int TotalNum
        {
            get => totalNum;
            set
            {
                if (totalNum != value)
                {
                    totalNum = value;
                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("TotalNum"), null, null);
                }
                TotalPage = (int)Math.Ceiling((double)TotalNum / PageSize);
            }
        }
        private int totalPage = 0;
        /// <summary>
        /// 总页数
        /// </summary>
        public int TotalPage
        {
            get => totalPage;
            set
            {
                if (totalPage != value)
                {
                    totalPage = value;
                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("TotalPage"), null, null);
                }
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
}
src/Bro.Process.DBManager/Bro.Process.DataBase.csproj
File was renamed from src/Bro.Process.DBManager/Bro.Process.DBManager.csproj
@@ -67,6 +67,8 @@
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="BaseModel.cs" />
    <Compile Include="DataBaseContext.cs" />
    <Compile Include="ModelManager.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="SQLiteHelper.cs" />
src/Bro.Process.DBManager/DataBaseContext.cs
New file
@@ -0,0 +1,67 @@
//using Bro.Process.Model.Migrations;
//using Bro.Process.Model.Model;
//using System;
//using System.Data.Entity;
//using System.Data.Entity.ModelConfiguration.Conventions;
//using System.Linq;
//namespace Bro.Process.DataBase
//{
//    public class DataBaseContext : DbContext
//    {
//        //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
//        //使用“DBModel”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
//        //“Bro.Process.Model.DBModel”数据库。
//        //
//        //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“DBModel”
//        //连接字符串。
//        public DBModel()
//            : base("name=DBModel")
//        {
//            ////数据库迁移检查暂时放在构造函数中,回头会放到程序初始化中
//            //Database.SetInitializer(new MigrateDatabaseToLatestVersion<DBModel, Configuration>());
//        }
//        //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First  模型
//        //的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109。
//        // public virtual DbSet<MyEntity> MyEntities { get; set; }
//        //public virtual DbSet<PRODUCTION_SECRETKEY> PRODUCTION_SECRETKEY { get; set; }
//        //public virtual DbSet<PRODUCTION_CONFIG> PRODUCTION_CONFIG { get; set; }
//        public virtual DbSet<ProductionDetectionRecords> ProductionDetectionRecords { get; set; }
//        public virtual DbSet<ProductionDetectionRecordsDetail> ProductionDetectionRecordsDetail { get; set; }
//        public virtual DbSet<OperationRecords> OperationRecords { get; set; }
//        public virtual DbSet<ProductionDetectionImageRecords> ProductionDetectionImageRecords { get; set; }
//        public virtual DbSet<ManualDetectionRecords> ManualDetectionRecords { get; set; }
//        public virtual DbSet<EventTimeRecords> EventTimeRecords { get; set; }
//        protected override void OnModelCreating(DbModelBuilder modelBuilder)
//        {
//            //base.OnModelCreating(modelBuilder);
//            #region for sqlite db
//            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//            modelBuilder.Configurations.AddFromAssembly(typeof(DBModel).Assembly);
//            #endregion
//        }
//    }
//    public static class DatabaseInitialize
//    {
//        public static void Initialize()
//        {
//            Database.SetInitializer(new MigrateDatabaseToLatestVersion<DBModel, Configuration>());
//            using (DbContext dbContext = new DBModel())
//            {
//                dbContext.Database.Initialize(true);
//            }
//        }
//    }
//    //public class MyEntity
//    //{
//    //    public int Id { get; set; }
//    //    public string Name { get; set; }
//    //}
//}
src/Bro.Process.DBManager/ModelManager.cs
@@ -10,7 +10,7 @@
//using System.Text;
//using System.Threading.Tasks;
//namespace Bro.Process.DBManager
//namespace Bro.Process.DataBase
//{
//    public class ModelManager<T> where T : BaseModel, new()
//    {
src/Bro.Process.DBManager/SQLiteHelper.cs
@@ -7,7 +7,7 @@
using System.Data.SQLite;
using System.Configuration;
namespace Bro.Process.DBManager
namespace Bro.Process.DataBase
{
    public class SQLiteHelper
    {