问题描述:通过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产生的动态链接库步骤应该是怎样的呢??
急候佳音!谢谢谢谢!
最佳答案
将 myadd.dll 拷贝至 C:\Program Files\SIEMENS\WINCC\bin 目录下,然后直接调用:
#pragma code ("myadd.dll")
提问者对于答案的评价:
恩,只要#pragma code("myadd.dll")。后来拿windows的一个dll试了一下可以,我自己的问题出在函数的声明上,看了下同时生成的myadd.h,里面函数定义的是bool MW_CALL_CONV mlfmyadd(int nargout, mxArray **c, mxArray *a, mxArray *b); 要声明成这个。
但问题又来了,这样岂不是开头还要include"myadd.h"?而且这个头文件里还包含了N多matlab的头文件,全要拷到工程里来,还会报错。wincc调matlab这个问题没那么简单啊,打算单独开个贴请教这个问题,您要有时间再来指导一下?
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc265925.html