#include "stdafx.h"
#include "AdlinkMotionCardLibrary.h"extern "C" _declspec(dllexport) bool _stdcall MotionCardIni(I32& BoardId_InBits, I32 Mode)
{  try{//mode=0:: 系统指定卡号    mode=1::由拨码开关指定卡号I32 BoardId_InBits, I32 Moderet=APS_initial(&BoardId_InBits, Mode);     Card1ret =APS_load_param_from_file("MotionCardId1.xml");Card0ret = APS_load_param_from_file("MotionCardId0.xml");ret = APS_set_axis_param(1, (I32)PRA_HOME_MODE, 1);ret = APS_set_axis_param(5, (I32)PRA_HOME_MODE, 1);return true;}catch (...){ return false; }
}extern "C" _declspec(dllexport) bool _stdcall AxisHome(I32 AxisID){try{ret = APS_home_move(AxisID);  //check okreturn true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardWriteDoutput(I32 BoardID, I32 DoGroup, I32 ChannelNO, I32 OnOff){try{ret = APS_write_d_channel_output(BoardID, DoGroup, ChannelNO, OnOff);  //write one bit  check okreturn true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardSetTrigerPara(I32 BoardID){try{ret = APS_set_trigger_param(BoardID, (I32)TGR_TRG_EN, 15);// ch0 set upret = APS_set_trigger_param(BoardID, (I32)TGR_TRG0_SRC, 0x05); //set ch0 to manual mode& table0ret = APS_set_trigger_param(BoardID, (I32)TGR_TRG0_LOGIC, 0x0);//not inverseret = APS_set_trigger_param(BoardID, (I32)TGR_TRG0_TGL, 0x0);//pulse out moderet = APS_set_trigger_param(BoardID, (I32)TGR_TRG0_PWD, 500000);// (n-1)*20ns    1ms=1000us=1000000ns n-1=1000000ns/20  =50000=5W             //Table compare direction: Bi-direction(No direction)ret = APS_set_trigger_param(BoardID, (I32)TGR_TCMP0_DIR, 2);//Table compare source: encoder counter0  ret = APS_set_trigger_param(BoardID, (I32)TGR_TCMP0_SRC, 0x0);  //encoder counter0  //check okreturn true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardSetTriger2CHPara(I32 BoardID){try{ret = APS_set_trigger_param(BoardID, (I32)TGR_TRG_EN, 15);  // ch0 set upret = APS_set_trigger_param(BoardID, (I32)TGR_TRG1_SRC, 0x09); //set ch1 to manual mode& table1ret = APS_set_trigger_param(BoardID, (I32)TGR_TRG1_LOGIC, 0x0);//not inverseret = APS_set_trigger_param(BoardID, (I32)TGR_TRG1_TGL, 0x0);//pulse out moderet = APS_set_trigger_param(BoardID, (I32)TGR_TRG1_PWD, 500000);// (n-1)*20ns    1ms=1000us=1000000ns n-1=1000000ns/20  =50000             //Table compare direction: Bi-direction(No direction)ret = APS_set_trigger_param(BoardID, (I32)TGR_TCMP1_DIR, 2);//Table compare source: encoder0 ret = APS_set_trigger_param(BoardID, (I32)TGR_TCMP1_SRC, 0x04);  //encoder counter0 //check okreturn true;}catch (...){ return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardSetTriger3CHPara(I32 BoardID){try{ret = APS_set_trigger_param(BoardID, (I32)TGR_TRG_EN, 15);// ch0 set upret = APS_set_trigger_param(BoardID, (I32)TGR_TRG2_SRC, 0x01); //set ch1 to manual mode& table1ret = APS_set_trigger_param(BoardID, (I32)TGR_TRG2_LOGIC, 0x0);//not inverseret = APS_set_trigger_param(BoardID, (I32)TGR_TRG2_TGL, 0x0);//pulse out moderet = APS_set_trigger_param(BoardID, (I32)TGR_TRG2_PWD, 500000);// (n-1)*20ns    1ms=1000us=1000000ns n-1=1000000ns/20  =50000             //check okreturn true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardSetTrigerTable(I32 BoardID, I32& PosArray){try{        ret = APS_set_trigger_table(BoardID, 0, &PosArray, 2);//check okreturn true;}catch (...){ return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardSetTriger2CHTable(I32 BoardID, I32& PosArray){try{      ret = APS_set_trigger_table(BoardID, 1, &PosArray, 2);//check okreturn true;}catch (...){ return false; }}extern "C" _declspec(dllexport) bool _stdcall MotionCardManualTrigerStart(I32 BoardID, I32 TrgCh){try{ret = APS_set_trigger_manual(BoardID, TrgCh);//check okreturn true;}catch (...){ return false; }}extern "C" _declspec(dllexport) bool _stdcall MotionCardGetPosition(I32 AxisID, I32 &Position){try{ret = APS_get_position(AxisID, &Position);//check okreturn true;}catch (...){ return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardGetMotionStatus(I32 AxisID, I32& MotionStatus){try{MotionStatus =APS_motion_status(AxisID);//check okreturn true;}catch (...){MotionStatus = -1;return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardSetMovePara(I32 AxisID, double RunSpeed, double AcceleratedSpeed, double AxisScale){try{ret = APS_set_axis_param_f(AxisID, (I32)PRA_SF, 1.0);ret = APS_set_axis_param_f(AxisID, (I32)PRA_ACC, (I32)(RunSpeed / AcceleratedSpeed * AxisScale));ret = APS_set_axis_param_f(AxisID, (I32)PRA_DEC, (I32)(RunSpeed / AcceleratedSpeed * AxisScale));ret = APS_set_axis_param_f(AxisID, (I32)PRA_VM, RunSpeed * AxisScale);ret = APS_set_axis_param_f(AxisID, (I32)PRA_VS, 0);ret = APS_set_axis_param_f(AxisID, (I32)PRA_VE, 0);//check okreturn true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardABSmove(I32 AxisID, I32 Position, I32 MaxSpeedPls){try{ret = APS_absolute_move(AxisID, Position, MaxSpeedPls);//check okreturn true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardClose(){try{ret = APS_close();return true;}catch (...){ return false; }}extern "C" _declspec(dllexport) bool _stdcall MotionCardAxisServoOnOff(I32 AxisID, I32 OnOff){try{ret = APS_set_servo_on(AxisID, OnOff);return true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardGetMotionIOstatus(I32 AxisID, I32& IOstatus){try{IOstatus= APS_motion_io_status(AxisID);return true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardGetDinput(I32 BoardId, I32& DiData){try{I32*data = &DiData;ret = APS_read_d_input(BoardId, 0, data);return true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardGetDout(I32 BoardId, I32& DiData){try{I32*data = &DiData;ret = APS_read_d_output(BoardId, 0, data);return true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardStopAxis(I32 AxisId){try{ret = APS_stop_move(AxisId);return true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardGetTrigerCnt(I32 boardID, I32 ch, I32& trgCnt){try{I32* Cnt = &trgCnt;ret = APS_get_trigger_count(boardID, ch, Cnt);return true;}catch (...){return false;} }extern "C" _declspec(dllexport) bool _stdcall MotionCardResteTrigerCnt(I32 boardID, I32 ch){try{ret = APS_reset_trigger_count(boardID, ch);return true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall ZcanMoveToAttach(I32 XAxisId, I32 YAxisId, I32 RAxisId, double XTarmm, double YTarmm, double RTarmm, double ZTarmm, double Xnowmm,double Ynowmm, double Rnowmm, double Znowmm, double XScale, double YScale, double RScale, double ZScale, double Xacc, double Yacc, double Racc, double Zacc, double Zspeedmm,bool ZcanAttch){I32 XspeedPulse = 0, YspeedPulse = 0, RspeedPulse = 0;double XTime = 999, YTime = 999, RTime = 999, ZTime = 0;try{ret = APS_get_feedback_velocity(XAxisId, &XspeedPulse);ret = APS_get_feedback_velocity(YAxisId, &YspeedPulse);ret = APS_get_feedback_velocity(RAxisId, &RspeedPulse);ZTime = Zacc + abs(Znowmm - ZTarmm) / Zspeedmm;if (XspeedPulse > 0 && abs(Xnowmm - XTarmm) < 10){XTime = Xacc + abs(Xnowmm - XTarmm) / (XspeedPulse / XScale);}else if (XspeedPulse == 0 && abs(Xnowmm - XTarmm)<0.1){XTime = -1;}if (YspeedPulse > 0 && abs(Ynowmm - YTarmm)<10){YTime = Yacc + abs(Ynowmm - YTarmm) / (YspeedPulse / YScale);}else if (YspeedPulse == 0 && abs(Ynowmm - YTarmm)<0.1){YTime = -1;}if (RspeedPulse > 0 && abs(Rnowmm - RTarmm)<10){RTime = Racc + abs(Rnowmm - RTarmm) / (RspeedPulse / RScale);}else if (RspeedPulse == 0 && abs(Rnowmm - RTarmm)<0.1){RTime = -1;}if ((ZTime>XTime)&&(ZTime>YTime)&&(ZTime>RTime)){ZcanAttch = true;}else{ZcanAttch = false;}return true;}catch (...){ZcanAttch = false;return false;}}extern "C" _declspec(dllexport) bool _stdcall ZcanMoveToPickMat(I32 XAxisId, I32 RAxisId, double XTarmm, double RTarmm, double ZTarmm, double Xnowmm,double Rnowmm, double Znowmm, double XScale, double RScale, double ZScale, double Xacc, double Racc, double Zacc, double Zspeedmm, bool ZcanPick){I32 XspeedPulse = 0, RspeedPulse = 0;double XTime = 999, RTime = 999, ZTime = 0;try{ret = APS_get_feedback_velocity(XAxisId, &XspeedPulse);ret = APS_get_feedback_velocity(RAxisId, &RspeedPulse);ZTime = Zacc + abs(Znowmm - ZTarmm) / Zspeedmm;if (XspeedPulse > 0 && abs(Xnowmm - XTarmm) < 10){XTime = Xacc + abs(Xnowmm - XTarmm) / (XspeedPulse / XScale);}else if (XspeedPulse == 0 && abs(Xnowmm - XTarmm) < 0.1){XTime = -1;}if (RspeedPulse > 0 && abs(Rnowmm - RTarmm) < 10){RTime = Racc + abs(Rnowmm - RTarmm) / (RspeedPulse / RScale);}else if (RspeedPulse == 0 && abs(Rnowmm - RTarmm) < 0.1){RTime = -1;}if ((ZTime > XTime) && (ZTime > RTime)){ZcanPick = true;}else{ZcanPick = false;}return true;}catch (...){ZcanPick = false;return false;}}
extern "C" _declspec(dllexport) bool _stdcall  AxisMoveTogether(I32 Dimention, I32& AxisArr, I32& PosArr, double MaxSpe, double AxisScale){try{ret = APS_absolute_linear_move(Dimention, &AxisArr, &PosArr, I32(MaxSpe*AxisScale));return true;}catch (...){return false;}}extern "C" _declspec(dllexport) bool _stdcall MotionCardGetSpeed(I32 AxisID, I32 &Speed)
{try{ret = APS_get_feedback_velocity(AxisID, &Speed);return true;}catch (...){return false;}}

AdlinkMotionCardLibrary函数C++相关推荐

  1. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  2. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  3. C++ 笔记(34)— C++ exit 函数

    当遇到 main 函数中的 return 语句时,C++ 程序将停止执行.但其他函数结束时,程序并不会停止.程序的控制将返回到函数调用之后的位置.然而,有时候会出现一些非常少见的情况,使得程序有必要在 ...

  4. C++ 笔记(30)— 友元函数与友元类

    我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...

  5. 浅显易懂 Makefile 入门 (07)— 其它函数(foreach 、if、call、origin )

    1. foreach 函数 foreach 函数定义如下: $(foreach <var>,<list>,<text>) 函数的功能是:把参数 <list&g ...

  6. 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)

    编写 Makefile 的时候,很多情况下需要对文件名进行操作.例如获取文件的路径,去除文件的路径,取出文件前缀或后缀等等. 注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待. 1 ...

  7. Go 学习笔记(65)— Go 中函数参数是传值还是传引用

    Go 语言中,函数参数传递采用是值传递的方式.所谓"值传递",就是将实际参数在内存中的表示逐位拷贝到形式参数中.对于像整型.数组.结构体这类类型,它们的内存表示就是它们自身的数据内 ...

  8. Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法

    函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...

  9. C++ 笔记(26)— 主函数 main(int argc, char *argv[]) 参数说明

    带形参的 main 函数,如 int main( int argc, char* argv[], char **env ) 是 UNIX .Linux 以及 Mac OS 操作系统中 C/C++ 的 ...

最新文章

  1. 2019-2020-3 《Java 程序设计》第三周知识总结
  2. 扩展欧几里得 POJ 1061
  3. Martix工作室考核题 —— 2019-3-8 第一题
  4. python的super用法_关于Python的super用法研究
  5. 在原有的基础之上,启用NAT模型
  6. 资源放送丨《PostgreSQL中的锁》PPT视频
  7. Android studio中添加外部的jar包
  8. lacp静态和动态区别_静态人脸识别和动态人脸识别有哪些区别
  9. Python入门--字符串的编码与解码
  10. CTP: 为什么报网络原因发送失败,但连接却成功?
  11. HDOJ 5296 Annoying problem LCA+数据结构
  12. html模板生成工具_HTML5模板生成器,框架和工具
  13. 2021年危险化学品经营单位安全管理人员复审考试及危险化学品经营单位安全管理人员模拟考试
  14. git恢复误删代码或文件
  15. BigCommerce vs WooCommerce,哪个更适合跨境电商开展业务?
  16. kali安装水泽,进行简单换源
  17. 什么是AR增强现实技术
  18. P5.js之数组使用——绘制水墨画笔,实现跟随鼠标移动的效果
  19. logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?configured -- resuming normal
  20. python如何读pst文件_python - 从win32或pypff读取PST文件 - SO中文参考 - www.soinside.com...

热门文章

  1. LightOJ1283 Shelving Books(DP)
  2. 字符串转换整形数,结构体数组排序
  3. iPhone开发资料之内存管理 ,循环引用导致的内存问题
  4. jqMobi + Android 试手
  5. javaScript第七天(2)
  6. 浏览器渲染原理与过程
  7. [Usaco2010 Nov]Visiting Cows
  8. koa中间件机制详解
  9. 关于Unity中NGUI的背包实现之Scrollview(基于Camera)
  10. Java 并发---ConcurrentHashMap