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

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

调用雷赛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,一起学习

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...