
一. 先随意用norm_x和scale_x来写一个模拟量换算// 模拟量转工程量 IF #AI_Input 0 AND #AI_Input 27648 THEN #temp1 : NORM_X(MIN : #AI_L, VALUE : #AI_Input, MAX : #AI_H); #Q_OS : SCALE_X(MIN : #OS_L, VALUE : #temp1, MAX : #OS_H); ELSE #Q_OS: 0.0; END_IF;二. 批量处理模拟量程序西门子8路ai, 从iw96-iw1101. 新建一个PLC数据类型命名Type_AI2. 建一个全局db, 命名位data.3. 将IW96关联到Anglog[0].AI_Input。(* // 单个 data.Analog[0].AI_Input : WORD_TO_INT( PEEK_WORD(area : 16#81, dbNumber : 0, byteOffset : 96)); *)4. 使用for循环来批量关联FOR #i : 0 TO 7 DO // 注意byteoffset是dint数据类型所以#i也要是dint // 正常读取I区area:16#81. 这里为了方便直接使用M区代替16#83 // 注意 byteOffset : 96i*2, 第一次i0位mw96. 第二次则为mw98 data.Analog[#i].AI_Input : WORD_TO_INT(PEEK_WORD(area : 16#83, dbNumber : 0, byteOffset : 96#i*2)); // 模拟量换算 IF data.Analog[#i].AI_Input 0 AND data.Analog[#i].AI_Input 27648 THEN #temp[#i] : NORM_X(MIN : data.Analog[#i].AI_L, VALUE : data.Analog[#i].AI_Input, MAX : data.Analog[#i].AI_H); data.Analog[#i].Ov : SCALE_X(MIN:data.Analog[#i].Osl, VALUE:#temp[#i], MAX:data.Analog[#i].Osh); ELSE data.Analog[#i].Ov : 0.0; END_IF; END_FOR;三. 监控。数据传输和换算都没有问题。