类型匹配的补充说明-工程伦理课后习题答案_李正风版工程伦理_整理版
(3)类型匹配的补充说明1. M a tlab并不支持真正的指针寻址,其对指针和结构类型的匹配操作是通过“类” ( class)间接实现的。 2.此法不支持Window s API类型声明,例如C头文件中的MMRESULT等字段须删除,而PWCHAR类型须改为cha r*,否则DLL无法被M at- lab加载。 3. DLL被加载后,库函数输入和输出变量的数据类型和排列形式可能与头文件中的原始定义稍有区别,必要时须借助前述查询函数。 3编程方法的应用以DLL形式发布的应用程序,具有程序结构模块化、源码保密性好和节省内存资源等优点,因而被广泛采用。文中介绍的混合编程方法,使得M atlab能够轻松地利用已有的DLL形式的程序资源,并且与其它编程语言进行交互。此外,设备驱动和硬件通信程序广泛采用DLL形式,利用此法通过调用相关DLL能够实现M atlab程序对硬件的控制。据此,作者开发了针对开放式数控系统的加工监视软件。通信对象为ISA板卡PMAC2-PC。该板卡通过板载DSP自动完成电机伺服更新,并对上位机提供Pcomm 32. dll(由厂商采用C语言针对板卡开发)以读取数据和控制电机。编程思路:在M代码中,定义带有选项′ac tion′的递归函数monito r,利用M atlab定时器定期调用DLL库函数以读取各轴位置,并更新显示加工轨迹。主要程序代码及注释如下: functionm on itor( action ) sw itch action, case′in it′, %初始化%创建主窗口,并定义退出函数f ig = f igu re(′deletefcn′, ′m on itor(″close″)′); axes( ′Un its′, ′norm alized′, ′Pos ition′, [ 0 0 1 1] ); %建立绘图区[在此处创建菜单和文本框等控件] %创建定时器,周期为0. 05 s T im er_1 = tim er(′t im erfcn′, ′m on itor(″tim er″)′, ′period′, 0. 05); %加载Pcomm32. d ll,并重命名为′pm′ loadlibrary(′Pcomm32′, ′pm acu. h′, ′alias′, ′pm′); cal llib(′pm′, ′OpenPm acD evice′, C rd); % C rd是板卡编号%开启“实时更新” ,每10个伺服周期更新电机1 ~ 5 cal llib(′pm′, ′Pm acDPRRealT im eE x′, C rd, 5, 10, ON); case′tim er′, %定时读取各轴位置,重绘三维轨迹cal llib(′pm′, ′Pm acDPRUpd ateRealTime′, C rd); %更新电机xP = ca lllib(′pm′, ′Pm acDPRPosition′, C rd, 1667); yP = ca lllib(′pm′, ′Pm acDPRPosition′, C rd, 2, 1667); …… case′close′, %退出stop(T im er_1); %停止定时器set( f ig , ′de letefcn′, ″); %改退出函数为空,避免死循环%关闭“实时更新” cal llib(′pm′, ′Pm acDPRRealT im eE x′, C rd, 5, 0, OFF); cal llib(′pm′, ′C losePm acDevice′, C rd); unload lib rary(′pm′); end;软件的运行界面如图1所示。由于M代码可读性强、代码效率高,采用这种混合编程方法大大缩短了软件的开发时间。另外, M atlab中三维图形编程较简单,减少了编程工作量。图1开放式数控系统加工监视软件界面4总结文中介绍的方法实现了M atlab与其它高级语言的结合。相对其它混合编程方法,其编译设置非常简单,而且无需在M atlab或其它高级语言中引入中间数据类型。此法兼顾了运行效率和易于编程。可利用运行效率较高的VC等高级语言开发核心算法或者硬件通信程序,编译生成DLL,然后再用简单灵活的M代码开发上层软件对其调用。其主要缺点是,程序不能编译生成独立执行程序而脱离M at- lab环境运行,运行效率要低于C /C ++等高级语言。同时,程序运行时, M atlab软件本身也占用一定的内存资源。因而此法不适于对运行效率和实时性要求很高的场合。 (下转第180页)
203.08KB
文件大小:
评论区