发布于 2013-08-28 18:50:31
73楼
如果考虑执行效率的话还是STL吧,另外提醒一下大家在SCL编译生成的调试信息的数量大小,并不止取决于本块代码量的大小,还取决于本块所使用数据块数据量的大小。
举个例子吧:
FC1操作DB1的数据:
TYPE UDT1
STRUCT
Names:STRING[20];
Quality:REAL;
Visble:BOOL;
ClearName:BOOL;
END_STRUCT
END_TYPE
TYPE UDT2
STRUCT
RecipeName:STRING[26];
RecipeNumber:STRING[12];
Material1:UDT1;
Material2:UDT1;
Material3:UDT1;
Material4:UDT1;
Material5:UDT1;
Material6:UDT1;
Material7:UDT1;
Material8:UDT1;
Material9:UDT1;
Material10:UDT1;
Material11:UDT1;
Material12:UDT1;
Material13:UDT1;
Material14:UDT1;
Material15:UDT1;
Material16:UDT1;
Material17:UDT1;
Material18:UDT1;
Material19:UDT1;
Material20:UDT1;
END_STRUCT
END_TYPE
DATA_BLOCK DB1
STRUCT
RationSet:REAL;
RecipeManufacture:UDT2;
EmpetyRecipeName:STRING[26];
EmpetyRecipeNumber:STRING[12];
EmpetyMaterialName:STRING[20];
RecipeManager:STRUCT
RecipeName:STRING[26];
Up:STRUCT
Upload:BOOL;
UnExist:BOOL;
UploadComplete:BOOL;
END_STRUCT;
Down:STRUCT
DownLoad:BOOL;
UnExist:BOOL;
ChangeRecipeName:BOOL;
DownloadComplete:BOOL;
END_STRUCT;
Next:STRUCT
NextRecipe:BOOL;
END_STRUCT;
New:STRUCT
Create:BOOL;
Exist:BOOL;
RoomEnough:BOOL;
CreateComplete:BOOL;
END_STRUCT;
END_STRUCT;
ClearNames:STRUCT
TargetRecipeName:BOOL;
TargetRecipeNumber:BOOL;
SelectRecipeName:BOOL;
END_STRUCT;
TargetRecipeData:UDT2;
//SourceRecipeData:ARRAY[1..50] OF UDT2;
SourceRecipeData1:UDT2;
SourceRecipeData2:UDT2;
SourceRecipeData3:UDT2;
SourceRecipeData4:UDT2;
SourceRecipeData5:UDT2;
SourceRecipeData6:UDT2;
SourceRecipeData7:UDT2;
SourceRecipeData8:UDT2;
SourceRecipeData9:UDT2;
SourceRecipeData10:UDT2;
SourceRecipeData11:UDT2;
SourceRecipeData12:UDT2;
SourceRecipeData13:UDT2;
SourceRecipeData14:UDT2;
SourceRecipeData15:UDT2;
SourceRecipeData16:UDT2;
SourceRecipeData17:UDT2;
SourceRecipeData18:UDT2;
SourceRecipeData19:UDT2;
SourceRecipeData20:UDT2;
SourceRecipeData21:UDT2;
SourceRecipeData22:UDT2;
SourceRecipeData23:UDT2;
SourceRecipeData24:UDT2;
SourceRecipeData25:UDT2;
SourceRecipeData26:UDT2;
SourceRecipeData27:UDT2;
SourceRecipeData28:UDT2;
SourceRecipeData29:UDT2;
SourceRecipeData30:UDT2;
SourceRecipeData31:UDT2;
SourceRecipeData32:UDT2;
SourceRecipeData33:UDT2;
SourceRecipeData34:UDT2;
SourceRecipeData35:UDT2;
SourceRecipeData36:UDT2;
SourceRecipeData37:UDT2;
SourceRecipeData38:UDT2;
SourceRecipeData39:UDT2;
SourceRecipeData40:UDT2;
// SourceRecipeData41:UDT2;
// SourceRecipeData42:UDT2;
//SourceRecipeData43:UDT2;
// SourceRecipeData44:UDT2;
// SourceRecipeData45:UDT2;
//SourceRecipeData46:UDT2;
//SourceRecipeData47:UDT2;
// SourceRecipeData48:UDT2;
// SourceRecipeData49:UDT2;
// SourceRecipeData50:UDT2;
END_STRUCT
BEGIN
END_DATA_BLOCK
1、在FC如果引用了DB1的数据,当SourceRecipeData超过40条,哪怕FC只有一句语句,在编译时生成调试信息时都会报生成编译信息超过64KB的错误,大家有兴趣的可以试一下。
2、SourceRecipeData:ARRAY[1..50] OF UDT2相比SourceRecipeData50:UDT2;同样数据量并不会报错。
3、可见数组与UDT在编译时所占资源还有很大区别的,监视以下两种情况下CPU工作存储器的已分配数据量有很大差距。
SCL的编译机制哪位大侠如有知道的还请赐教。