wincc在调用matlab编译的动态链接库时遇到的问题 点击:1453 | 回复:4



lanneret_lzy

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 16回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2010年10月22日
发表于:2011-04-26 19:34:45
楼主
问题描述:通过matlab的m文件编译出的动态链接库dll文件,在wincc的c脚本中调用时遇到的问题,请高人们帮我分析一下。。。

先看看我的过程:
1、简单编一个m文件myadd.m
function c = myadd(a,b)
c = a + b;
2、matlab2010中输命令:
mcc -W lib:myadd -T link:lib myadd回车
产生myadd.dll等一堆文件
3、把myadd.dll拷到E:/ (或者拷到wincc项目目录下,都试过了)
4、wincc中拖个按钮,加单击c脚本,添加:
#pragma code("E:/myadd.dll")
float myadd(float a, float b);
#pragma code()
float a=1;
float b=2;
float c;
c = myadd(a, b);
SetTagFloat("result", c);
5、运行,然后变量result里什么也没有。调试后觉得c = myadd(a, b);这句就没运行的起。

问题出在哪呢?事实上这些步骤也是看网上资料的,不一定对,希望有高人指点一下正确的wincc调用matlab产生的动态链接库步骤应该是怎样的呢??

急候佳音!谢谢谢谢!



lanneret_lzy

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 16回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2010年10月22日
发表于:2011-04-29 20:30:21
1楼

上面说的问题我也试出来了,只要#pragma code("myadd.dll")就行,问题出在函数声明上, 看了下matlab同时生成的myadd.h,里面函数定义的是bool MW_CALL_CONV mlfmyadd(int nargout, mxArray **c, mxArray *a, mxArray *b); 要声明成这个。
但问题又来了,这样岂不是开头还要include"myadd.h"?而且这个头文件里还包含了N多matlab的头文件,全要拷到工程里来,而且C和C脚本毕竟还有些不同,程序还会报错。

其实我的情况是这样的。我要用wincc编个系统,接收一组数据,需要分析这组数据的拟合直线的斜率(就是看它们的增长速度),再进行假设检验等功能。
目前想到的是调用matlab。查到几种方法,DDE、OPC以及做成dll等,但这些都要求系统的使用者同时装个matlab,不现实。还有个办法就是matlab生成exe文件给wincc调用,还没搞懂怎么做,所以提问题如下:
1、matlab生成dll的办法到底能不能让系统最后脱离matlab运行,如果行该怎么做?
2、问题1不行就生成exe,那又该怎么做呢?(matlab和wincc两边都给点指导吧。。)
3、实在不行,高人们再帮我想想还有没有别的法实现我的系统要求的功能呢??

lanneret_lzy

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 16回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2010年10月22日
发表于:2011-05-05 18:32:41
2楼
好吧,自问自答,最后用exe实现了,让wincc放个按钮单击运行exe程序。。。。。不能给自己分数。。

Piston

  • 精华:0帖
  • 求助:1帖
  • 帖子:23帖 | 13107回
  • 年度积分:18
  • 历史总积分:40065
  • 注册:2009年5月22日
发表于:2011-05-12 01:29:30
3楼
看来楼主的问题已经解决了,那就好!

杨铮

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:23
  • 注册:2019年3月15日
发表于:2019-11-26 19:56:31
4楼

回复内容:

对: Piston 看来楼主的问题已经解决了,那就好!     内容的回复:

楼主,解决了没有,我也遇到这个难题了!求分享!没有输出值!!!问题也出在动态链接库上了!


热门招聘
相关主题

官方公众号

智造工程师