发表于:2007-08-03 16:17:00
楼主
各位大虾,小弟实在想不出来错误出在哪,特来求教
情况说明:组态王作为服务器,MATLAB作为客户。MATLAB读取组态王的某个变量,计算后返回给另一个变量。
在MATLAB中编写了如下程序:
clear;
chann=ddeinit('VIEW','TAGNAME');
if chann~=0
disp('DDE成功');
else
disp('DDE失败');
end;
b2='仿真PLC2.STATIC10';
a2=ddereq(chann,b2);
rc1=ddeadv(chann,b2,'a4=fun3(a2)','a2');
rc2=ddepoke(chann,'仿真PLC.STATIC20',a4);
ddeterm(chann);
组态王作为服务器,打开自带的范例kingdeom1。
添加两个仿真PLC,分别命名仿真PLC和仿真PCL2,对应的寄存器为STATIC20和STATIC10.
在数据词典里,设置原料罐液位和反应罐液位为I/O实型,分别对应仿真PCL2和仿真PCL。目地是用原料罐液位来控制反应罐液位。在命令语言内,将控制反应罐液位的语句全部注释掉。
根据我设想,启动组态王系统并在MATLAB运行上面那段程序后,MATLAB将读取“原料罐液位”的数据,然后经过fun3()这个函数的计算,然后把结果反馈给组态王的“反应罐液位”变量。
但是实际运行结果是,能够建立通道,也能够读取原料罐液位的数据,但是无法计算并返回反应罐液位的数值。在运行的系统中,仿真PLC2.STATIC10(原料罐液位)的数值是不断变化的,理论上ddeadv(chann,b2,'a4=fun3(a2)','a2')应该不断的执行a4=fun3(a2)语句才是。第一次捣鼓DDE,也不知道哪弄错了。