| 作者 | 主题 |
|---|---|
|
柳叶飘飘 侠圣
经验值:2634 发帖数:95 精华帖:7 |
楼主
主题:大批量仪表量程转换(修正版) 本程序想给偷懒不想用FC105一个个转换仪表量程使用(假如有几十上百个一个个转换比较费时间),即批量话转换。刚写好就发出来了 各位测试哈吧 不明白请回帖 第一次发的程序有点问题 以下是修改后的程序给大家测试。 源代码如下 //############################################## //实现批量化的量程转换 //比较适合采样点特别多的情况 //仅适合需要量程转换的通道比如电流4~20MA电压+-10V //默认最大1000个仪表以内可以修改 //############################################ FUNCTION_BLOCK FB80 TITLE = 'AI_OUT' // // 模拟量输入量程批量转换 // VERSION: '1.0' AUTHOR: EBCLW NAME: AI_OUT FAMILY: EBC KNOW_HOW_PROTECT // Block Parameters VAR_INPUT ADDRESS:INT:=512;//开始的PIW地址 NUM:INT:=1;//仪表数量即多少个PIW地址 DATA:BLOCK_DB; //用于存放数据的量程 偏差设定 //DB数据结构为(每个仪表均是这样的结构建议用STL生成) //------------------ // 量程上限 REAL // 量程下限 REAL // 修正偏差 REAL //-------------------
BIPOLAR:ARRAY[1..1000] OF BOOL;//1为双极性,0为单极性 END_VAR VAR_IN_OUT // I/O Parameters END_VAR VAR_OUTPUT //默认一千个 OUT:ARRAY[1..1000] OF REAL; ERR:ARRAY[1..1000]OF BOOL; // Output Parameters END_VAR VAR_TEMP I:INT;//循环变量 END_VAR VAR K1:REAL; K2:REAL; END_VAR //循环批量转换循环体 FOR I:= 1 TO NUM BY 1 DO //判断是否是双极性 IF BIPOLAR[I] THEN K1:= -27648.0; K2:= 27648.0; IF (WORD_TO_INT(PIW[ADDRESS +(I-1)*2]) <-27649) OR (WORD_TO_INT(PIW[ADDRESS +(I-1)*2]) >27649) THEN //双极性低于正常或者高于正常则通道标志位置1 ERR[I]:=1; ELSE ERR[I]:=0; END_IF; ELSE K1:=0.0; K2:=27648.0; //判断是否在量程范围内不在测量范围内即对该仪表报警 IF (WORD_TO_INT(PIW[ADDRESS +(I-1)*2]) <-1) OR (WORD_TO_INT(PIW[ADDRESS +(I-1)*2]) >27649) THEN //单极性低于正常或者高于正常则通道标志位置1 ERR[I]:=1; ELSE ERR[I]:=0; END_IF; END_IF; //若在量程范围内就做量程转换 //采用FC105相同的计算公式OUT = ((FLOAT (IN) -K1)/(K2-K1)) * (HI_LIM-LO_LIM) + LO_LIM //增加一个修正偏差公式改为OUT = ((FLOAT (IN) -K1)/(K2-K1)) * (HI_LIM-LO_LIM) + LO_LIM + OFFSET
OUT[I]:=(INT_TO_REAL(WORD_TO_INT(PIW[ADDRESS +(I-1)*2]))-K1)/(K2-K1)*(DWORD_TO_REAL(DATA.DD[(I-1)*12])-DWORD_TO_REAL(DATA.DD[(I-1)*12+4]))+DWORD_TO_REAL(DATA.DD[(I-1)*12+4])+DWORD_TO_REAL(DATA.DD[(I-1)*12+8]); END_FOR; END_FUNCTION_BLOCK //原创程序 欢迎交流 QQ275578306? //本程序编译通过测试,有BUG的话请告知 //修改了双极性的问题20161229
努力赚钱 养家糊口
|
|
宁超 至圣 经验值:11563 发帖数:1009 精华帖:39 |
27楼
主题:回复:大批量仪表量程转换(修正版)以前也用过类似的方法,实际项目,可适应性范围很小:
针对楼主的程序显而易见的缺点除了上面外,另:
|