搜索
查看: 1408|回复: 1

[自动化] 分享:雷赛DMC2410C四轴运动控制卡封装库和使用示例

  [复制链接]

39

主题

174

帖子

1037

积分

荣誉会员

htmlayout.cn 我的学习笔记

Rank: 8Rank: 8

积分
1037
发表于 2018-9-14 13:09:16 | 显示全部楼层 |阅读模式
目前最火的是什么?
是AI , AI离不开运动控制, 工业4.0也离不开.
之前也有一直使用这个卡, 不过一直没有进行二次封装,一直都是直接调用dll里面的函数, 最近项目中可能会多次用到这个卡,所以花了几天时间稍微封装了下, 封装的原则是以后还可以兼容其他卡类,只需要判断卡类型即可.
今天测试发现这个dll可以内嵌到exe里面, 牛了.

写的过程中学习到不少东西 (代码智能提示的写法,dll中指针的使用啊啥的),希望这个代码能帮到希望和硬件对接的人.

kkkk.png
  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = win.form(text="DMC2410Test";right=791;bottom=363;border="dialog frame")
  4. mainForm.add(
  5. NEL={cls="plus";left=133;top=171;right=162;bottom=198;forecolor=8421376;z=11};
  6. ORG={cls="plus";left=90;top=171;right=119;bottom=198;forecolor=8421376;z=10};
  7. PEL={cls="plus";left=48;top=171;right=77;bottom=198;forecolor=8421376;z=9};
  8. axis={cls="combobox";left=49;top=42;right=145;bottom=68;edge=1;items={"0";"1";"2";"3"};mode="dropdown";z=2};
  9. button={cls="button";text="Go_ON";left=450;top=104;right=567;bottom=130;z=14};
  10. cieclespeed={cls="edit";text="5";left=450;top=314;right=544;bottom=340;edge=1;z=31};
  11. circleGo={cls="button";text="circle_Go";left=667;top=268;right=784;bottom=322;z=18};
  12. circledir={cls="combobox";left=450;top=252;right=546;bottom=278;edge=1;items={"0";"1"};mode="dropdown";z=29};
  13. circlejuedui={cls="radiobutton";text="juedui";left=561;top=274;right=655;bottom=296;group=1;z=33};
  14. circlexiangdui={cls="radiobutton";text="xiangdui";left=561;top=300;right=655;bottom=322;checked=1;z=34};
  15. dir={cls="combobox";left=186;top=40;right=282;bottom=66;edge=1;items={"0";"1"};mode="dropdown";z=3};
  16. juedui={cls="radiobutton";text="juedui";left=48;top=103;right=142;bottom=125;group=1;z=15};
  17. juli={cls="edit";text="5";left=318;top=106;right=421;bottom=132;edge=1;z=12};
  18. lineON={cls="button";text="Line_ON";left=450;top=40;right=567;bottom=66;z=7};
  19. mainAxis={cls="combobox";left=49;top=252;right=145;bottom=278;edge=1;items={"0";"1";"2";"3"};mode="dropdown";z=19};
  20. maincenter={cls="edit";text="1";left=186;top=252;right=289;bottom=278;edge=1;z=23};
  21. maintarget={cls="edit";text="5";left=318;top=252;right=421;bottom=278;edge=1;z=25};
  22. nowpos={cls="edit";text="5";left=186;top=171;right=289;bottom=197;disabled=1;edge=1;readonly=1;z=17};
  23. secondAxis={cls="combobox";left=49;top=314;right=145;bottom=340;edge=1;items={"0";"1";"2";"3"};mode="dropdown";z=21};
  24. secondcenter={cls="edit";text="1";left=186;top=314;right=289;bottom=340;edge=1;z=24};
  25. secondtarget={cls="edit";text="5";left=318;top=314;right=421;bottom=340;edge=1;z=26};
  26. setPos={cls="edit";text="5";left=318;top=171;right=421;bottom=197;edge=1;z=37};
  27. setpos={cls="button";text="SetPos";left=450;top=171;right=567;bottom=197;z=39};
  28. speed={cls="edit";text="5";left=318;top=42;right=421;bottom=68;edge=1;z=1};
  29. static={cls="static";text="juli";left=318;top=80;right=412;bottom=103;transparent=1;z=13};
  30. static11={cls="static";text="speed";left=450;top=293;right=544;bottom=316;transparent=1;z=32};
  31. static12={cls="static";text="Limit";left=46;top=143;right=92;bottom=166;transparent=1;z=35};
  32. static13={cls="static";text="current pos:";left=186;top=152;right=262;bottom=171;transparent=1;z=36};
  33. static14={cls="static";text="set position";left=318;top=150;right=394;bottom=173;transparent=1;z=38};
  34. static2={cls="static";text="axis";left=49;top=14;right=143;bottom=37;transparent=1;z=4};
  35. static3={cls="static";text="dir";left=187;top=14;right=281;bottom=37;transparent=1;z=5};
  36. static4={cls="static";text="speed";left=319;top=14;right=413;bottom=37;transparent=1;z=6};
  37. static5={cls="static";text="mainAxis";left=49;top=229;right=143;bottom=252;transparent=1;z=20};
  38. static6={cls="static";text="secondAxis";left=49;top=292;right=143;bottom=315;transparent=1;z=22};
  39. static7={cls="static";text="center";left=186;top=229;right=280;bottom=252;transparent=1;z=27};
  40. static8={cls="static";text="target";left=318;top=230;right=412;bottom=253;transparent=1;z=28};
  41. static9={cls="static";text="dir";left=450;top=230;right=544;bottom=253;transparent=1;z=30};
  42. stop={cls="button";text="stop";left=667;top=40;right=784;bottom=125;z=8};
  43. xiangdui={cls="radiobutton";text="xiangdui";left=147;top=103;right=241;bottom=125;checked=1;z=16}
  44. )
  45. /*}}*/

  46. import UserDmc;
  47. var cardNum = UserDmc.init();
  48. if(cardNum>0){
  49.         UserDmc.setPulseMode(2/* 轴0 */,2/* 轴1 */,2/* 轴2 */,2/* 轴3 */);
  50.         UserDmc.setEL(2/* 轴0 */,2/* 轴1 */,2/* 轴2 */,2/* 轴3 */);
  51.     UserDmc.setAxisUp(0/* 轴号 */,0.72/* 步距角 */,1/* 螺距(mm) */,20/* 细分 */);
  52.     UserDmc.setAxisUp(1/* 轴号 */,0.72/* 步距角 */,1/* 螺距(mm) */,20/* 细分 */);
  53.     UserDmc.setAxisUp(2/* 轴号 */,0.72/* 步距角 */,1/* 螺距(mm) */,20/* 细分 */);
  54.     UserDmc.setAxisUp(3/* 轴号 */,0.72/* 步距角 */,1/* 螺距(mm) */,20/* 细分 */);
  55.         var speedTab = UserDmc.setSpeedTab(
  56.                 0/*轴号*/,
  57.                 1/*起始速度(mm/s)*/,
  58.                 5/*运行速度(mm/s)*/,
  59.                 null/*加速时间(s 默认0.05)*/,
  60.                 null/*减速时间(s 默认0.05)*/
  61.         );
  62.        
  63.         thread.invoke(
  64.                 function(mainForm){
  65.                         import win.ui;
  66.                         import UserDmc;
  67.                        
  68.                         while(win.delay(20)){       
  69.                                         var a,b,c = UserDmc.getELOrg(mainForm.axis.text);
  70.                                         mainForm.PEL.foreground= a?0xFFC7344A:0xFF008080;
  71.                                         mainForm.ORG.foreground= b?0xFFC7344A:0xFF008080;
  72.                                         mainForm.NEL.foreground= c?0xFFC7344A:0xFF008080;
  73.                                         mainForm.nowpos.text = UserDmc.getPos(mainForm.axis.text);               
  74.                         }
  75.                 },mainForm
  76.         )       
  77. }
  78. mainForm.lineON.oncommand = function(id,event){
  79.                 speedTab = UserDmc.setSpeedTab(
  80.                         0/*轴号*/,
  81.                         1/*起始速度(mm/s)*/,
  82.                         mainForm.speed.text/*运行速度(mm/s)*/,
  83.                         null/*加速时间(s 默认0.05)*/,
  84.                         null/*减速时间(s 默认0.05)*/
  85.                 );
  86.         UserDmc.moveSV(mainForm.axis.text/*轴号*/,mainForm.dir.text/*方向:0=负向 1=正向*/,speedTab/*速度表(可为空但必须至少有一次填写)*/);
  87. }

  88. mainForm.stop.oncommand = function(id,event){
  89.         UserDmc.stopMove(mainForm.axis.text);
  90. }

  91. mainForm.button.oncommand = function(id,event){
  92.     speedTab = UserDmc.setSpeedTab(
  93.                         0/*轴号*/,
  94.                         1/*起始速度(mm/s)*/,
  95.                         mainForm.speed.text/*运行速度(mm/s)*/,
  96.                         null/*加速时间(s 默认0.05)*/,
  97.                         null/*减速时间(s 默认0.05)*/
  98.                 );
  99.         UserDmc.moveSP(
  100.                 mainForm.axis.text/*轴号*/,
  101.                 mainForm.juli.text/*距离(mm)*/,
  102.                 mainForm.juedui.checked?true:null/*模式: null=相对运动 非null=绝对运动*/,
  103.                 speedTab/*速度表(可为空但必须至少有一次填写)*/
  104.         );
  105. }

  106. mainForm.circleGo.oncommand = function(id,event){
  107.         UserDmc.moveARC2(//圆弧插补
  108.                 mainForm.mainAxis.text/*主轴号*/,
  109.                 mainForm.secondAxis.text/*副轴号*/,
  110.                 mainForm.maincenter.text/*主轴圆心位置(mm)*/,
  111.                 mainForm.secondcenter.text/*副轴圆心位置(mm)*/,
  112.                 mainForm.maintarget.text/*主轴终点位置(mm)*/,
  113.                 mainForm.secondtarget.text/*副轴终点位置(mm)*/,
  114.                 mainForm.circledir.text/*方向:0=顺时针 1=逆时针*/,
  115.                 mainForm.circlejuedui.checked?true:null/*模式:null=相对位置 非null=绝对位置*/,
  116.                 mainForm.cieclespeed.text/*最大速度(mm/s)*/,
  117.                 null/*加减速时间(s,默认0.05)*/
  118.         );
  119. }

  120. mainForm.setpos.oncommand = function(id,event){
  121.         UserDmc.setPos(mainForm.axis.text,mainForm.setPos.text);
  122. }

  123. mainForm.show();
  124. return win.loopMessage();
复制代码


附件下载: DMC2410Test.7z (75.28 KB, 下载次数: 57)
! www.HtmLayout.Cn 我的学习笔记
回复

使用道具 举报

2

主题

10

帖子

176

积分

一级会员

Rank: 2

积分
176
发表于 2018-9-14 17:42:34 | 显示全部楼层
感谢感谢,我可以学习封装调用IP摄像头的DLL,太感谢了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-15 14:21 , Processed in 0.078125 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表