quote:以下是引用杭州小子在2012-09-20 13:01:07的发言:quote:以下是引用还是新手在2012-09-19 20:15:00的发言:quote:以下是引用杭州小子在2012-09-19 12:52:50的发言:quote:以下是引用还是新手在2012-09-19 08:15:24的发言:
不用AT指令。在FB内部定义UDT就可以了。定义UDT格式:
TYPE XXX //for UDT name
STRUCT
XXXX:XX // XXXX UDT内部变量名称,XX为变量类型
XXXX:XX // XXXX UDT内部变量名称,XX为变量类型
XXXX:XX // XXXX UDT内部变量名称,XX为变量类型
END_STRUCT
END_TYPE
这样本FB接口标签或Sata变量类型就可以定义为XXX(你建的UDT)类型了。
例如:
VAR
abc:XXX; // Static Variables,XXX为在程序内部定义的UDT
END_VAR
感谢楼上的回答,定义UDT倒是可以,不过如何读取外面的数据呢?是否还是需要利用sfc14来读取。比如从IW100.0开始连续读取100个byte.
主要是用在DPcoupling通讯。而且我看说明似乎是sfc14的存取地址要创建一个any类型的struct。
??没明白读外部数据用sfc14干嘛??
直接PIW不就OK了。读100个byte循环50次不就OK了吗???
下边程序供参考:
VAR_INPUT
BeginAdd:INT;
END_VAR
VAR
count:INT;
aaa: ARRAY[0..49] OF INT;
END_VAR
FOR count:= 0 TO 49 BY 1 DO
aaa[count]:=WORD_TO_INT(PIW[BeginAdd+2*count]);
END_FOR;
如果想放到对应UDT里。定义好UDT就行了,一样放。
楼上的这种用法我也知道,不过读到aaa[count]中后,aaa定义的是array格式的,如果读进来后想以UDT 的格式使用该如何转换呢?比如我读进来的是100个byte,但是用的时候有byte,bool,word,等等 ,那么如何把100个byte的array转换成100个byte的UDT格式变量呢?还希望楼上的帮忙解决一下。
都告诉你了,FB照样创建UDT的。你咋还纠结呢???????????????????????
FUNCTION_BLOCK FB111
VAR_INPUT
BeginAdd:INT;
END_VAR
VAR
count:INT;
tempDATA:ARRAY[0..49] OF UDT_INT;
END_VAR
BEGIN
FOR count:= 0 TO 49 BY 1 DO
tempDATA[count].data_int:=WORD_TO_INT(PIW[BeginAdd+2*count]);
END_FOR;
// Statement Section
END_FUNCTION_BLOCK
TYPE UDT_INT // for UDT name
STRUCT
data_int:INT;
END_STRUCT
END_TYPE
以上代码编译通过。
你读进来的数据分BOOL,BYTE,WORD。你类似int处理一下就行了吧??
不知道这次是不是你想要的结果。