调用dll库遇到,库函数init()之后没有句柄的情况(雷赛控制卡dll)

By admin at 2017-12-10 • 0人收藏 • 1886人看过

调用雷赛DMC2410C控制卡的库,主界面上

import DMC2410C;

之后,开启一个新的线程,线程里面调用控制卡库函数

thread.invoke( 
    function(){
        //import win;
        import DMC2410C;
        import console;
         
        console.log(DMC2410C.get_position(0));
        //win.delay(1000)
         
    }
)

发现显示出来的一直是0, 这个显然是不对的, 把这个函数放到主界面用定时器循环获取pos,

可以取得正确的值!

后来猜测创建主线程的时候,直接传递一个Fun()函数,这个Fun()函数里面getpos()是不是行的通?

测试结果还是不行...


那么就郁闷了.

判断: 应该是主界面import 的库,和线程里面import的库是独立的,不在一个线程池里....!!

如果真是这样,那么就好操作了,只需要把他们两个联系起来?!!

怎么联系起来呢?

写入共享名称, 代码如下:

dll = ..raw.loadDll($"\res\DMC2410.dll","DMC2410Cshare");

今天才知道这个共享名称是干啥用的,⊙﹏⊙b汗!!

再次,测试线程中读取位置信息,成功!!

特此记录!



8 个回复 | 最后更新于 2018-11-09
2018-09-10   #1

smc6048

检测G代码是否正规。

import console;
console.open()

var dll = ..raw.loadDll("\res\smc6x.dll","smc");
SMCCheckProgramSyntax = dll.api("SMCCheckProgramSyntax","int(string sin,string& err)") 


var str = "N0 G00"

winform.button.oncommand = function(id,event){
	var ret = raw.buffer(1024);
	console.dump( SMCCheckProgramSyntax(str,ret))	
}

没有N0就不对。

2018-09-11   #2

测试库的写法:

import console; 

class test{
	ctor(){
		if(flag == -1000){
			..console.log("hahdhgashdgh")
			flag = -999;	
		}
		
	};

}
namespace test{
    	flag = -1000;
    	getn = function(){
		return flag; 
	};	
}

test();
console.log(test.getn())

console.pause(true);

image.png

2018-09-13   #3

关于圆弧插补参数的设置:

第一种方式:

声明:

arc_move= dll.api("d2410_arc_move","int(pointer axis,pointer target_pos,pointer cen_pos, WORD arc_dir)");
rel_arc_move= dll.api("d2410_rel_arc_move","int(pointer axis,pointer rel_pos,pointer rel_cen, WORD arc_dir)");
调用:    
var axisc = raw.buffer({ WORD b[]={1;0;}});
var tarpos = raw.buffer({ int b[]={2000; 2000;}});
var cenpos = raw.buffer({ int b[]={1000; 1000;}});
var ret = DMC2410C.rel_arc_move(axisc,tarpos,cenpos,0);

第二种方式:

var axisc = raw.buffer({ WORD axis1=1;WORD axis2=0;});
var tarpos = raw.buffer({ int targetPos1=2000; int targetPos2=2000;});
var cenpos = raw.buffer({ int cenPos1=1000; int cenPos1=1000;});
var ret = DMC2410C.rel_arc_move(axisc,tarpos,cenpos,0);

blob.png

2018-09-13   #4
import console; 

	var IOstatus = 2#0101011111111111;
	var PEL = (IOstatus & (1<<11))?true:false;
	var NEL = (IOstatus & (1<<12))?true:false;
	var ORG = (IOstatus & (1<<13))?true:false;
	console.log( ORG,NEL,PEL)

console.pause(true);


2018-09-13   #5

库写完了,调用示例如下:

import win.ui;
/*DSG{{*/
mainForm = win.form(text="DMC2410Test";right=791;bottom=611)
mainForm.add(
NEL={cls="plus";left=144;top=155;right=173;bottom=182;forecolor=8421376;z=11};
ORG={cls="plus";left=95;top=155;right=124;bottom=182;forecolor=255;z=10};
PEL={cls="plus";left=48;top=155;right=77;bottom=182;forecolor=8421376;z=9};
axis={cls="combobox";left=49;top=42;right=145;bottom=68;edge=1;items={"0";"1";"2";"3"};mode="dropdown";z=2};
button={cls="button";text="Go_ON";left=450;top=104;right=567;bottom=130;z=14};
dir={cls="combobox";left=186;top=40;right=282;bottom=66;edge=1;items={"0";"1"};mode="dropdown";z=3};
juedui={cls="radiobutton";text="juedui";left=48;top=103;right=142;bottom=125;z=15};
juli={cls="edit";text="5";left=318;top=106;right=421;bottom=132;edge=1;z=12};
lineON={cls="button";text="Line_ON";left=450;top=40;right=567;bottom=66;z=7};
nowpos={cls="edit";text="5";left=198;top=155;right=301;bottom=181;edge=1;z=17};
speed={cls="edit";text="5";left=318;top=42;right=421;bottom=68;edge=1;z=1};
static={cls="static";text="juli";left=323;top=80;right=417;bottom=103;transparent=1;z=13};
static2={cls="static";text="axis";left=49;top=14;right=143;bottom=37;transparent=1;z=4};
static3={cls="static";text="dir";left=187;top=14;right=281;bottom=37;transparent=1;z=5};
static4={cls="static";text="speed";left=319;top=14;right=413;bottom=37;transparent=1;z=6};
stop={cls="button";text="stop";left=666;top=6;right=783;bottom=67;z=8};
xiangdui={cls="radiobutton";text="xiangdui";left=147;top=103;right=241;bottom=125;checked=1;z=16}
)
/*}}*/

import console
console.open()

import UserDmc;
var cardNum = UserDmc.init();
if(cardNum>0){
	UserDmc.setPulseMode(2/* 轴0 */,2/* 轴1 */,2/* 轴2 */,2/* 轴3 */);
	UserDmc.setEL(2/* 轴0 */,2/* 轴1 */,2/* 轴2 */,2/* 轴3 */);
    UserDmc.setAxisUp(0/* 轴号 */,0.72/* 步距角 */,1/* 螺距(mm) */,20/* 细分 */);
    UserDmc.setAxisUp(1/* 轴号 */,0.72/* 步距角 */,1/* 螺距(mm) */,20/* 细分 */);
    UserDmc.setAxisUp(2/* 轴号 */,0.72/* 步距角 */,1/* 螺距(mm) */,20/* 细分 */);
    UserDmc.setAxisUp(3/* 轴号 */,0.72/* 步距角 */,1/* 螺距(mm) */,20/* 细分 */);
	var speedTab = UserDmc.setSpeedTab(
		0/*轴号*/,
		1/*起始速度(mm/s)*/,
		5/*运行速度(mm/s)*/,
		null/*加速时间(s 默认0.05)*/,
		null/*减速时间(s 默认0.05)*/
	);
	
	thread.invoke( 
		function(mainForm){
			import win.ui;
			import UserDmc;
			
			while(win.delay(20)){
					var a,b,c = UserDmc.getELOrg(0);
					mainForm.PEL.foreground= a?0xFFC7344A:0xFF008521;
					mainForm.ORG.foreground= b?0xFFC7344A:0xFF008521;
					mainForm.NEL.foreground= c?0xFFC7344A:0xFF008521;
					mainForm.nowpos.text = UserDmc.getPos(0);		
			}
		},mainForm
	)	
}
mainForm.lineON.oncommand = function(id,event){
		speedTab = UserDmc.setSpeedTab(
			0/*轴号*/,
			1/*起始速度(mm/s)*/,
			mainForm.speed.text/*运行速度(mm/s)*/,
			null/*加速时间(s 默认0.05)*/,
			null/*减速时间(s 默认0.05)*/
		);
	UserDmc.moveSV(mainForm.axis.text/*轴号*/,mainForm.dir.text/*方向:0=负向 1=正向*/,speedTab/*速度表(可为空但必须至少有一次填写)*/);
}

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

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

mainForm.show();
return win.loopMessage();

blob.png

2018-09-15   #6

已知起点和圆心坐标,给定角度和方向,求终点坐标

image.png

2018-11-09   #7

回复#1 @admin :

我也在用Halcon,主要用Qt和QML开发,可以交流一下嘛

2018-11-09   #8

回复#7 @zhang424358225 :

开发工具不重要,主要是学halcon,一起学习

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...