技术论坛

批量模拟量输入或批量数据处理程序共享

作者 主题
官方工程师
西门子官方工程师

经验值: 438
发帖数: 192
精华帖: 5
批量模拟量输入或批量数据处理程序共享


只看楼主 2006-05-23 09:15:34
当工程中需要处理相当数量的模拟量输入怎么办呢,比如说80个模拟量,写80行调用 FC105 的程序吗?如果需要处理上千个不同参数运算的数据,该怎么办呢。此处仅仅仅仅仅仅提供一个参考,实际应用中大家可以增加或修改完善,也可用在其它的地方。

公开代码,编译后使用。

假设模拟量输入地址连续(只要有规律就行,哈哈),共10个模块80个输入,
FC1 为模拟量转换循环程序
PIW_START 是第一个模拟量通道的地址(此处假设从PIW256开始)
PIW_NUM 是模拟量通道数量(80个通道)
DBS_CALE 存放工程值参数(DB1)
DB_RESULT 存放模拟量工程值结果(DB2)

FC2 为模拟量转换通用程序,可以单独使用。为了增加易读性,编的比较长,增加了死区功能,减少的功能大家自己填。
PIW_IN 模拟量输入
HI_LIMIT 工程量上限
LOW_LIMIT 工程量下限
DEAD_BAND 死区设定值

DB1 (设为100组)
HI_LIMIT 工程量上限(假设都是100.0)
LOW_LIMIT 工程量下限(假设都是0.0)
DEAD_BAND 死区设定值(假设都是1.0)
实际使用时可以在EXCEL里面修改完再导入。

DB2(设为100组)
存放模拟量结果。
DATA_BLOCK DB 1
TITLE =
VERSION : 0.1


STRUCT
SCALE : ARRAY [0 .. 100 ] OF STRUCT
HI_LIMIT : REAL := 1.000000e+002;
LOW_LIMIT : REAL ;
DEAD_BAND : REAL := 1.000000e+000;
END_STRUCT ;
END_STRUCT ;
BEGIN
SCALE[0].HI_LIMIT := 1.000000e+002;
SCALE[0].LOW_LIMIT := 0.000000e+000;
SCALE[0].DEAD_BAND := 1.000000e+000;
SCALE[1].HI_LIMIT := 1.000000e+002;
SCALE[1].LOW_LIMIT := 0.000000e+000;
SCALE[1].DEAD_BAND := 1.000000e+000;
SCALE[2].HI_LIMIT := 1.000000e+002;
SCALE[2].LOW_LIMIT := 0.000000e+000;
SCALE[2].DEAD_BAND := 1.000000e+000;
SCALE[3].HI_LIMIT := 1.000000e+002;
SCALE[3].LOW_LIMIT := 0.000000e+000;
SCALE[3].DEAD_BAND := 1.000000e+000;
SCALE[4].HI_LIMIT := 1.000000e+002;
SCALE[4].LOW_LIMIT := 0.000000e+000;
SCALE[4].DEAD_BAND := 1.000000e+000;
SCALE[5].HI_LIMIT := 1.000000e+002;
SCALE[5].LOW_LIMIT := 0.000000e+000;
SCALE[5].DEAD_BAND := 1.000000e+000;
SCALE[6].HI_LIMIT := 1.000000e+002;
SCALE[6].LOW_LIMIT := 0.000000e+000;
SCALE[6].DEAD_BAND := 1.000000e+000;
SCALE[7].HI_LIMIT := 1.000000e+002;
SCALE[7].LOW_LIMIT := 0.000000e+000;
SCALE[7].DEAD_BAND := 1.000000e+000;
SCALE[8].HI_LIMIT := 1.000000e+002;
SCALE[8].LOW_LIMIT := 0.000000e+000;
SCALE[8].DEAD_BAND := 1.000000e+000;
SCALE[9].HI_LIMIT := 1.000000e+002;
SCALE[9].LOW_LIMIT := 0.000000e+000;
SCALE[9].DEAD_BAND := 1.000000e+000;
SCALE[10].HI_LIMIT := 1.000000e+002;
SCALE[10].LOW_LIMIT := 0.000000e+000;
SCALE[10].DEAD_BAND := 1.000000e+000;
SCALE[11].HI_LIMIT := 1.000000e+002;
SCALE[11].LOW_LIMIT := 0.000000e+000;
SCALE[11].DEAD_BAND := 1.000000e+000;
SCALE[12].HI_LIMIT := 1.000000e+002;
SCALE[12].LOW_LIMIT := 0.000000e+000;
SCALE[12].DEAD_BAND := 1.000000e+000;
SCALE[13].HI_LIMIT := 1.000000e+002;
SCALE[13].LOW_LIMIT := 0.000000e+000;
SCALE[13].DEAD_BAND := 1.000000e+000;
SCALE[14].HI_LIMIT := 1.000000e+002;
SCALE[14].LOW_LIMIT := 0.000000e+000;
SCALE[14].DEAD_BAND := 1.000000e+000;
SCALE[15].HI_LIMIT := 1.000000e+002;
SCALE[15].LOW_LIMIT := 0.000000e+000;
SCALE[15].DEAD_BAND := 1.000000e+000;
SCALE[16].HI_LIMIT := 1.000000e+002;
SCALE[16].LOW_LIMIT := 0.000000e+000;
SCALE[16].DEAD_BAND := 1.000000e+000;
SCALE[17].HI_LIMIT := 1.000000e+002;
SCALE[17].LOW_LIMIT := 0.000000e+000;
SCALE[17].DEAD_BAND := 1.000000e+000;
SCALE[18].HI_LIMIT := 1.000000e+002;
SCALE[18].LOW_LIMIT := 0.000000e+000;
SCALE[18].DEAD_BAND := 1.000000e+000;
SCALE[19].HI_LIMIT := 1.000000e+002;
SCALE[19].LOW_LIMIT := 0.000000e+000;
SCALE[19].DEAD_BAND := 1.000000e+000;
SCALE[20].HI_LIMIT := 1.000000e+002;
SCALE[20].LOW_LIMIT := 0.000000e+000;
SCALE[20].DEAD_BAND := 1.000000e+000;
SCALE[21].HI_LIMIT := 1.000000e+002;
SCALE[21].LOW_LIMIT := 0.000000e+000;
SCALE[21].DEAD_BAND := 1.000000e+000;
SCALE[22].HI_LIMIT := 1.000000e+002;
SCALE[22].LOW_LIMIT := 0.000000e+000;
SCALE[22].DEAD_BAND := 1.000000e+000;
SCALE[23].HI_LIMIT := 1.000000e+002;
SCALE[23].LOW_LIMIT := 0.000000e+000;
SCALE[23].DEAD_BAND := 1.000000e+000;
SCALE[24].HI_LIMIT := 1.000000e+002;
SCALE[24].LOW_LIMIT := 0.000000e+000;
SCALE[24].DEAD_BAND := 1.000000e+000;
SCALE[25].HI_LIMIT := 1.000000e+002;
SCALE[25].LOW_LIMIT := 0.000000e+000;
SCALE[25].DEAD_BAND := 1.000000e+000;
SCALE[26].HI_LIMIT := 1.000000e+002;
SCALE[26].LOW_LIMIT := 0.000000e+000;
SCALE[26].DEAD_BAND := 1.000000e+000;
SCALE[27].HI_LIMIT := 1.000000e+002;
SCALE[27].LOW_LIMIT := 0.000000e+000;
SCALE[27].DEAD_BAND := 1.000000e+000;
SCALE[28].HI_LIMIT := 1.000000e+002;
SCALE[28].LOW_LIMIT := 0.000000e+000;
SCALE[28].DEAD_BAND := 1.000000e+000;
SCALE[29].HI_LIMIT := 1.000000e+002;
SCALE[29].LOW_LIMIT := 0.000000e+000;
SCALE[29].DEAD_BAND := 1.000000e+000;
SCALE[30].HI_LIMIT := 1.000000e+002;
SCALE[30].LOW_LIMIT := 0.000000e+000;
SCALE[30].DEAD_BAND := 1.000000e+000;
SCALE[31].HI_LIMIT := 1.000000e+002;
SCALE[31].LOW_LIMIT := 0.000000e+000;
SCALE[31].DEAD_BAND := 1.000000e+000;
SCALE[32].HI_LIMIT := 1.000000e+002;
SCALE[32].LOW_LIMIT := 0.000000e+000;
SCALE[32].DEAD_BAND := 1.000000e+000;
SCALE[33].HI_LIMIT := 1.000000e+002;
SCALE[33].LOW_LIMIT := 0.000000e+000;
SCALE[33].DEAD_BAND := 1.000000e+000;
SCALE[34].HI_LIMIT := 1.000000e+002;
SCALE[34].LOW_LIMIT := 0.000000e+000;
SCALE[34].DEAD_BAND := 1.000000e+000;
SCALE[35].HI_LIMIT := 1.000000e+002;
SCALE[35].LOW_LIMIT := 0.000000e+000;
SCALE[35].DEAD_BAND := 1.000000e+000;
SCALE[36].HI_LIMIT := 1.000000e+002;
SCALE[36].LOW_LIMIT := 0.000000e+000;
SCALE[36].DEAD_BAND := 1.000000e+000;
SCALE[37].HI_LIMIT := 1.000000e+002;
SCALE[37].LOW_LIMIT := 0.000000e+000;
SCALE[37].DEAD_BAND := 1.000000e+000;
SCALE[38].HI_LIMIT := 1.000000e+002;
SCALE[38].LOW_LIMIT := 0.000000e+000;
SCALE[38].DEAD_BAND := 1.000000e+000;
SCALE[39].HI_LIMIT := 1.000000e+002;
SCALE[39].LOW_LIMIT := 0.000000e+000;
SCALE[39].DEAD_BAND := 1.000000e+000;
SCALE[40].HI_LIMIT := 1.000000e+002;
SCALE[40].LOW_LIMIT := 0.000000e+000;
SCALE[40].DEAD_BAND := 1.000000e+000;
SCALE[41].HI_LIMIT := 1.000000e+002;
SCALE[41].LOW_LIMIT := 0.000000e+000;
SCALE[41].DEAD_BAND := 1.000000e+000;
SCALE[42].HI_LIMIT := 1.000000e+002;
SCALE[42].LOW_LIMIT := 0.000000e+000;
SCALE[42].DEAD_BAND := 1.000000e+000;
SCALE[43].HI_LIMIT := 1.000000e+002;
SCALE[43].LOW_LIMIT := 0.000000e+000;
SCALE[43].DEAD_BAND := 1.000000e+000;
SCALE[44].HI_LIMIT := 1.000000e+002;
SCALE[44].LOW_LIMIT := 0.000000e+000;
SCALE[44].DEAD_BAND := 1.000000e+000;
SCALE[45].HI_LIMIT := 1.000000e+002;
SCALE[45].LOW_LIMIT := 0.000000e+000;
SCALE[45].DEAD_BAND := 1.000000e+000;
SCALE[46].HI_LIMIT := 1.000000e+002;
SCALE[46].LOW_LIMIT := 0.000000e+000;
SCALE[46].DEAD_BAND := 1.000000e+000;
SCALE[47].HI_LIMIT := 1.000000e+002;
SCALE[47].LOW_LIMIT := 0.000000e+000;
SCALE[47].DEAD_BAND := 1.000000e+000;
SCALE[48].HI_LIMIT := 1.000000e+002;
SCALE[48].LOW_LIMIT := 0.000000e+000;
SCALE[48].DEAD_BAND := 1.000000e+000;
SCALE[49].HI_LIMIT := 1.000000e+002;
SCALE[49].LOW_LIMIT := 0.000000e+000;
SCALE[49].DEAD_BAND := 1.000000e+000;
SCALE[50].HI_LIMIT := 1.000000e+002;
SCALE[50].LOW_LIMIT := 0.000000e+000;
SCALE[50].DEAD_BAND := 1.000000e+000;
SCALE[51].HI_LIMIT := 1.000000e+002;
SCALE[51].LOW_LIMIT := 0.000000e+000;
SCALE[51].DEAD_BAND := 1.000000e+000;
SCALE[52].HI_LIMIT := 1.000000e+002;
SCALE[52].LOW_LIMIT := 0.000000e+000;
SCALE[52].DEAD_BAND := 1.000000e+000;
SCALE[53].HI_LIMIT := 1.000000e+002;
SCALE[53].LOW_LIMIT := 0.000000e+000;
SCALE[53].DEAD_BAND := 1.000000e+000;
SCALE[54].HI_LIMIT := 1.000000e+002;
SCALE[54].LOW_LIMIT := 0.000000e+000;
SCALE[54].DEAD_BAND := 1.000000e+000;
SCALE[55].HI_LIMIT := 1.000000e+002;
SCALE[55].LOW_LIMIT := 0.000000e+000;
SCALE[55].DEAD_BAND := 1.000000e+000;
SCALE[56].HI_LIMIT := 1.000000e+002;
SCALE[56].LOW_LIMIT := 0.000000e+000;
SCALE[56].DEAD_BAND := 1.000000e+000;
SCALE[57].HI_LIMIT := 1.000000e+002;
SCALE[57].LOW_LIMIT := 0.000000e+000;
SCALE[57].DEAD_BAND := 1.000000e+000;
SCALE[58].HI_LIMIT := 1.000000e+002;
SCALE[58].LOW_LIMIT := 0.000000e+000;
SCALE[58].DEAD_BAND := 1.000000e+000;
SCALE[59].HI_LIMIT := 1.000000e+002;
SCALE[59].LOW_LIMIT := 0.000000e+000;
SCALE[59].DEAD_BAND := 1.000000e+000;
SCALE[60].HI_LIMIT := 1.000000e+002;
SCALE[60].LOW_LIMIT := 0.000000e+000;
SCALE[60].DEAD_BAND := 1.000000e+000;
SCALE[61].HI_LIMIT := 1.000000e+002;
SCALE[61].LOW_LIMIT := 0.000000e+000;
SCALE[61].DEAD_BAND := 1.000000e+000;
SCALE[62].HI_LIMIT := 1.000000e+002;
SCALE[62].LOW_LIMIT := 0.000000e+000;
SCALE[62].DEAD_BAND := 1.000000e+000;
SCALE[63].HI_LIMIT := 1.000000e+002;
SCALE[63].LOW_LIMIT := 0.000000e+000;
SCALE[63].DEAD_BAND := 1.000000e+000;
SCALE[64].HI_LIMIT := 1.000000e+002;
SCALE[64].LOW_LIMIT := 0.000000e+000;
SCALE[64].DEAD_BAND := 1.000000e+000;
SCALE[65].HI_LIMIT := 1.000000e+002;
SCALE[65].LOW_LIMIT := 0.000000e+000;
SCALE[65].DEAD_BAND := 1.000000e+000;
SCALE[66].HI_LIMIT := 1.000000e+002;
SCALE[66].LOW_LIMIT := 0.000000e+000;
SCALE[66].DEAD_BAND := 1.000000e+000;
SCALE[67].HI_LIMIT := 1.000000e+002;
SCALE[67].LOW_LIMIT := 0.000000e+000;
SCALE[67].DEAD_BAND := 1.000000e+000;
SCALE[68].HI_LIMIT := 1.000000e+002;
SCALE[68].LOW_LIMIT := 0.000000e+000;
SCALE[68].DEAD_BAND := 1.000000e+000;
SCALE[69].HI_LIMIT := 1.000000e+002;
SCALE[69].LOW_LIMIT := 0.000000e+000;
SCALE[69].DEAD_BAND := 1.000000e+000;
SCALE[70].HI_LIMIT := 1.000000e+002;
SCALE[70].LOW_LIMIT := 0.000000e+000;
SCALE[70].DEAD_BAND := 1.000000e+000;
SCALE[71].HI_LIMIT := 1.000000e+002;
SCALE[71].LOW_LIMIT := 0.000000e+000;
SCALE[71].DEAD_BAND := 1.000000e+000;
SCALE[72].HI_LIMIT := 1.000000e+002;
SCALE[72].LOW_LIMIT := 0.000000e+000;
SCALE[72].DEAD_BAND := 1.000000e+000;
SCALE[73].HI_LIMIT := 1.000000e+002;
SCALE[73].LOW_LIMIT := 0.000000e+000;
SCALE[73].DEAD_BAND := 1.000000e+000;
SCALE[74].HI_LIMIT := 1.000000e+002;
SCALE[74].LOW_LIMIT := 0.000000e+000;
SCALE[74].DEAD_BAND := 1.000000e+000;
SCALE[75].HI_LIMIT := 1.000000e+002;
SCALE[75].LOW_LIMIT := 0.000000e+000;
SCALE[75].DEAD_BAND := 1.000000e+000;
SCALE[76].HI_LIMIT := 1.000000e+002;
SCALE[76].LOW_LIMIT := 0.000000e+000;
SCALE[76].DEAD_BAND := 1.000000e+000;
SCALE[77].HI_LIMIT := 1.000000e+002;
SCALE[77].LOW_LIMIT := 0.000000e+000;
SCALE[77].DEAD_BAND := 1.000000e+000;
SCALE[78].HI_LIMIT := 1.000000e+002;
SCALE[78].LOW_LIMIT := 0.000000e+000;
SCALE[78].DEAD_BAND := 1.000000e+000;
SCALE[79].HI_LIMIT := 1.000000e+002;
SCALE[79].LOW_LIMIT := 0.000000e+000;
SCALE[79].DEAD_BAND := 1.000000e+000;
SCALE[80].HI_LIMIT := 1.000000e+002;
SCALE[80].LOW_LIMIT := 0.000000e+000;
SCALE[80].DEAD_BAND := 1.000000e+000;
SCALE[81].HI_LIMIT := 1.000000e+002;
SCALE[81].LOW_LIMIT := 0.000000e+000;
SCALE[81].DEAD_BAND := 1.000000e+000;
SCALE[82].HI_LIMIT := 1.000000e+002;
SCALE[82].LOW_LIMIT := 0.000000e+000;
SCALE[82].DEAD_BAND := 1.000000e+000;
SCALE[83].HI_LIMIT := 1.000000e+002;
SCALE[83].LOW_LIMIT := 0.000000e+000;
SCALE[83].DEAD_BAND := 1.000000e+000;
SCALE[84].HI_LIMIT := 1.000000e+002;
SCALE[84].LOW_LIMIT := 0.000000e+000;
SCALE[84].DEAD_BAND := 1.000000e+000;
SCALE[85].HI_LIMIT := 1.000000e+002;
SCALE[85].LOW_LIMIT := 0.000000e+000;
SCALE[85].DEAD_BAND := 1.000000e+000;
SCALE[86].HI_LIMIT := 1.000000e+002;
SCALE[86].LOW_LIMIT := 0.000000e+000;
SCALE[86].DEAD_BAND := 1.000000e+000;
SCALE[87].HI_LIMIT := 1.000000e+002;
SCALE[87].LOW_LIMIT := 0.000000e+000;
SCALE[87].DEAD_BAND := 1.000000e+000;
SCALE[88].HI_LIMIT := 1.000000e+002;
SCALE[88].LOW_LIMIT := 0.000000e+000;
SCALE[88].DEAD_BAND := 1.000000e+000;
SCALE[89].HI_LIMIT := 1.000000e+002;
SCALE[89].LOW_LIMIT := 0.000000e+000;
SCALE[89].DEAD_BAND := 1.000000e+000;
SCALE[90].HI_LIMIT := 1.000000e+002;
SCALE[90].LOW_LIMIT := 0.000000e+000;
SCALE[90].DEAD_BAND := 1.000000e+000;
SCALE[91].HI_LIMIT := 1.000000e+002;
SCALE[91].LOW_LIMIT := 0.000000e+000;
SCALE[91].DEAD_BAND := 1.000000e+000;
SCALE[92].HI_LIMIT := 1.000000e+002;
SCALE[92].LOW_LIMIT := 0.000000e+000;
SCALE[92].DEAD_BAND := 1.000000e+000;
SCALE[93].HI_LIMIT := 1.000000e+002;
SCALE[93].LOW_LIMIT := 0.000000e+000;
SCALE[93].DEAD_BAND := 1.000000e+000;
SCALE[94].HI_LIMIT := 1.000000e+002;
SCALE[94].LOW_LIMIT := 0.000000e+000;
SCALE[94].DEAD_BAND := 1.000000e+000;
SCALE[95].HI_LIMIT := 1.000000e+002;
SCALE[95].LOW_LIMIT := 0.000000e+000;
SCALE[95].DEAD_BAND := 1.000000e+000;
SCALE[96].HI_LIMIT := 1.000000e+002;
SCALE[96].LOW_LIMIT := 0.000000e+000;
SCALE[96].DEAD_BAND := 1.000000e+000;
SCALE[97].HI_LIMIT := 1.000000e+002;
SCALE[97].LOW_LIMIT := 0.000000e+000;
SCALE[97].DEAD_BAND := 1.000000e+000;
SCALE[98].HI_LIMIT := 1.000000e+002;
SCALE[98].LOW_LIMIT := 0.000000e+000;
SCALE[98].DEAD_BAND := 1.000000e+000;
SCALE[99].HI_LIMIT := 1.000000e+002;
SCALE[99].LOW_LIMIT := 0.000000e+000;
SCALE[99].DEAD_BAND := 1.000000e+000;
SCALE[100].HI_LIMIT := 1.000000e+002;
SCALE[100].LOW_LIMIT := 0.000000e+000;
SCALE[100].DEAD_BAND := 1.000000e+000;
END_DATA_BLOCK

DATA_BLOCK DB 2
TITLE =
VERSION : 0.1


STRUCT
RESULT : ARRAY [0 .. 100 ] OF REAL ;
END_STRUCT ;
BEGIN
RESULT[0] := 0.000000e+000;
RESULT[1] := 0.000000e+000;
RESULT[2] := 0.000000e+000;
RESULT[3] := 0.000000e+000;
RESULT[4] := 0.000000e+000;
RESULT[5] := 0.000000e+000;
RESULT[6] := 0.000000e+000;
RESULT[7] := 0.000000e+000;
RESULT[8] := 0.000000e+000;
RESULT[9] := 0.000000e+000;
RESULT[10] := 0.000000e+000;
RESULT[11] := 0.000000e+000;
RESULT[12] := 0.000000e+000;
RESULT[13] := 0.000000e+000;
RESULT[14] := 0.000000e+000;
RESULT[15] := 0.000000e+000;
RESULT[16] := 0.000000e+000;
RESULT[17] := 0.000000e+000;
RESULT[18] := 0.000000e+000;
RESULT[19] := 0.000000e+000;
RESULT[20] := 0.000000e+000;
RESULT[21] := 0.000000e+000;
RESULT[22] := 0.000000e+000;
RESULT[23] := 0.000000e+000;
RESULT[24] := 0.000000e+000;
RESULT[25] := 0.000000e+000;
RESULT[26] := 0.000000e+000;
RESULT[27] := 0.000000e+000;
RESULT[28] := 0.000000e+000;
RESULT[29] := 0.000000e+000;
RESULT[30] := 0.000000e+000;
RESULT[31] := 0.000000e+000;
RESULT[32] := 0.000000e+000;
RESULT[33] := 0.000000e+000;
RESULT[34] := 0.000000e+000;
RESULT[35] := 0.000000e+000;
RESULT[36] := 0.000000e+000;
RESULT[37] := 0.000000e+000;
RESULT[38] := 0.000000e+000;
RESULT[39] := 0.000000e+000;
RESULT[40] := 0.000000e+000;
RESULT[41] := 0.000000e+000;
RESULT[42] := 0.000000e+000;
RESULT[43] := 0.000000e+000;
RESULT[44] := 0.000000e+000;
RESULT[45] := 0.000000e+000;
RESULT[46] := 0.000000e+000;
RESULT[47] := 0.000000e+000;
RESULT[48] := 0.000000e+000;
RESULT[49] := 0.000000e+000;
RESULT[50] := 0.000000e+000;
RESULT[51] := 0.000000e+000;
RESULT[52] := 0.000000e+000;
RESULT[53] := 0.000000e+000;
RESULT[54] := 0.000000e+000;
RESULT[55] := 0.000000e+000;
RESULT[56] := 0.000000e+000;
RESULT[57] := 0.000000e+000;
RESULT[58] := 0.000000e+000;
RESULT[59] := 0.000000e+000;
RESULT[60] := 0.000000e+000;
RESULT[61] := 0.000000e+000;
RESULT[62] := 0.000000e+000;
RESULT[63] := 0.000000e+000;
RESULT[64] := 0.000000e+000;
RESULT[65] := 0.000000e+000;
RESULT[66] := 0.000000e+000;
RESULT[67] := 0.000000e+000;
RESULT[68] := 0.000000e+000;
RESULT[69] := 0.000000e+000;
RESULT[70] := 0.000000e+000;
RESULT[71] := 0.000000e+000;
RESULT[72] := 0.000000e+000;
RESULT[73] := 0.000000e+000;
RESULT[74] := 0.000000e+000;
RESULT[75] := 0.000000e+000;
RESULT[76] := 0.000000e+000;
RESULT[77] := 0.000000e+000;
RESULT[78] := 0.000000e+000;
RESULT[79] := 0.000000e+000;
RESULT[80] := 0.000000e+000;
RESULT[81] := 0.000000e+000;
RESULT[82] := 0.000000e+000;
RESULT[83] := 0.000000e+000;
RESULT[84] := 0.000000e+000;
RESULT[85] := 0.000000e+000;
RESULT[86] := 0.000000e+000;
RESULT[87] := 0.000000e+000;
RESULT[88] := 0.000000e+000;
RESULT[89] := 0.000000e+000;
RESULT[90] := 0.000000e+000;
RESULT[91] := 0.000000e+000;
RESULT[92] := 0.000000e+000;
RESULT[93] := 0.000000e+000;
RESULT[94] := 0.000000e+000;
RESULT[95] := 0.000000e+000;
RESULT[96] := 0.000000e+000;
RESULT[97] := 0.000000e+000;
RESULT[98] := 0.000000e+000;
RESULT[99] := 0.000000e+000;
RESULT[100] := 0.000000e+000;
END_DATA_BLOCK

FUNCTION FC 2 : VOID
TITLE =
AUTHOR : zc
VERSION : 0.1


VAR_INPUT
PIW_IN : WORD ;
HI_LIMIT : REAL ;
LOW_LIMIT : REAL ;
DEAD_BAND : REAL ;
END_VAR
VAR_OUTPUT
EN_VALUE : REAL ;
END_VAR
VAR_TEMP
analog_in_INT : INT ;
analog_in_DINT : DINT ;
analog_in_REAL : REAL ;
analog_percent : REAL ;
engineering_scale : REAL ;
analog_offset : REAL ;
analog_temp : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =





A( ;
A( ;
L #PIW_IN;
T #analog_in_INT;
SET ;
SAVE ;
CLR ;
A BR;
) ;
JNB _001;
L #analog_in_INT;
ITD ;
T #analog_in_DINT;
SET ;
SAVE ;
CLR ;
_001: A BR;
) ;
JNB _002;
L #analog_in_DINT;
DTR ;
T #analog_in_REAL;
_002: NOP 0;
NETWORK
TITLE =

L #analog_in_REAL;
L 2.764800e+004;
/R ;
T #analog_percent;
NOP 0;
NETWORK
TITLE =

L #HI_LIMIT;
L #LOW_LIMIT;
-R ;
T #engineering_scale;
NOP 0;
NETWORK
TITLE =

L #analog_percent;
L #engineering_scale;
*R ;
T #analog_offset;
NOP 0;
NETWORK
TITLE =

L #LOW_LIMIT;
L #analog_offset;
+R ;
T #analog_temp;
NOP 0;
NETWORK
TITLE =

A( ;
L #analog_temp;
L #DEAD_BAND;
<=R ;
) ;
JNB _003;
L #analog_temp;
T #EN_VALUE;
_003: NOP 0;
NETWORK
TITLE =

A( ;
L #analog_temp;
L #DEAD_BAND;
>R ;
) ;
JNB _004;
L #analog_temp;
T #EN_VALUE;
_004: NOP 0;
END_FUNCTION

FUNCTION FC 1 : VOID
TITLE =
AUTHOR : zc
VERSION : 0.1


VAR_INPUT
PIW_START : INT ; //Start address of analog input module
PIW_NUM : INT ; //Number of analog channels
DB_SCALE : BLOCK_DB ; //DB for analog scale
DB_RESULT : BLOCK_DB ; //DB for analog results
END_VAR
VAR_TEMP
PIW_START_Pointer_base : DWORD ;
PIW_START_Pointer_offset : DWORD ;
PIW_START_Pointer : DWORD ;
DB_SCALE_Pointer_offset : DWORD ;
DB_RESULT_Pointer_offset : DWORD ;
Loop_count : INT ;
PIW_IN_TEMP : WORD ;
HI_LIMIT_TEMP : REAL ;
LOW_LIMIT_TEMP : REAL ;
DEAD_BAND_TEMP : REAL ;
EN_VALUE_TEMP : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =

L #PIW_START; //initialize analog input start address pointer
L 8;
*D ;
T #PIW_START_Pointer_base;


L 0;
T #PIW_START_Pointer_offset; //initialize analog input offset address pointer
T #DB_SCALE_Pointer_offset;
T #DB_RESULT_Pointer_offset; //initialize DB address pointer


NETWORK
TITLE =

L 0;
T #Loop_count;

LAIC: NOP 0; //Loop for analog input convert

L #Loop_count;
L 16;
*D ;
T #PIW_START_Pointer_offset; //increase one analog channel,the pointer offset increase 1 WORD


L #Loop_count;
L 96;
*D ;
T #DB_SCALE_Pointer_offset; //increase one analog channel,the DB_SCALE_Pointer_offset increase 3 REAL


L #Loop_count;
L 32;
*D ;
T #DB_RESULT_Pointer_offset; //increase one analog channel,the DB_RESULT_Pointer_offset increase 1 REAL


L #PIW_START_Pointer_offset;
L #PIW_START_Pointer_base;
+D ;
T #PIW_START_Pointer; //Get the dynamic pointer of analog input


L PIW [#PIW_START_Pointer];
T #PIW_IN_TEMP; //read analog input to temporary variable


OPN #DB_SCALE;

L #DB_SCALE_Pointer_offset;
LAR1 ;

L DBD [AR1,P#0.0]; //read HI_LIMI to temporary variable
T #HI_LIMIT_TEMP;


L DBD [AR1,P#4.0];
T #LOW_LIMIT_TEMP; //read LOW_LIMI to temporary variable


L DBD [AR1,P#8.0];
T #DEAD_BAND_TEMP; //read DEAD_BAND to temporary variable


CALL FC 2 (
PIW_IN := #PIW_IN_TEMP,
HI_LIMIT := #HI_LIMIT_TEMP,
LOW_LIMIT := #LOW_LIMIT_TEMP,
DEAD_BAND := #DEAD_BAND_TEMP,
EN_VALUE := #EN_VALUE_TEMP);


OPN #DB_RESULT;

L #EN_VALUE_TEMP;
T DBD [#DB_RESULT_Pointer_offset]; //Write the analog result to DB_result


L #Loop_count; //increase the counter for next loop
L 1;
+I ;
T #Loop_count;

L #PIW_NUM; //if the end of analog input reached, convert finished
>=I ;
JCN LAIC;

END_FUNCTION

ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1


VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =

CALL FC 1 (
PIW_START := 256,
PIW_NUM := 80,
DB_SCALE := DB 1,
DB_RESULT := DB 2);


END_ORGANIZATION_BLOCK



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=241001&b_id=4

新手

经验值: 24
发帖数: 22
精华帖: 0
回复:批量模拟量输入或批量数据处理程序共享


只看楼主 2006-05-23 13:21:23
这段程序很好!设计思路很清晰.
\\//
在实际工程中,对于模拟量的处理问题由来以久,但根据经验,90%左右的模拟量用于监视设备状态,不足10%的用于PID等的工艺调整控制;所以在这种情况下,如果用PLC处理如此多的模拟量,势必影响其循环时间,所以在正常情况下我们都采用上位机的监控软件和触摸屏的模拟量转换功能来处理模拟量的显示,而参与控制的模拟量我们采用对设定值的转换功能来实现;也就是说,PLC程序基本不处理模拟量,直接依靠监控软件来处理,这样有利于发辉PLC的长处,减轻了PLC的工作负担,扫描时间缩短.
 
以下网友喜欢您的帖子:

  
游士

经验值: 259
发帖数: 82
精华帖: 1
回复:批量模拟量输入或批量数据处理程序共享


只看楼主 2006-05-26 13:13:48
说得很好,谢谢
入门级的
以下网友喜欢您的帖子:

  
游侠

经验值: 532
发帖数: 313
精华帖: 0
回复:批量模拟量输入或批量数据处理程序共享


只看楼主 2006-05-26 15:55:07

 
以下网友喜欢您的帖子:

  
游侠

经验值: 532
发帖数: 313
精华帖: 0
回复:批量模拟量输入或批量数据处理程序共享


只看楼主 2006-05-26 15:56:53

 
以下网友喜欢您的帖子:

  
侠客

经验值: 768
发帖数: 538
精华帖: 0
回复:批量模拟量输入或批量数据处理程序共享


只看楼主 2006-05-27 07:20:28


俺老乡曾经说过:三人行,必有我师 http://lujun7419.blog.163.com/
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
批量模拟量输入或批量数据处理程序共享
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。