批量处理程序调试遇到问题,无心睡眠,向大家寻求帮助!

已锁定

doma

  • 帖子

    11
  • 精华

    0
  • 被关注

    2

论坛等级:新手

注册时间:2007-07-24

普通 普通 如何晋级?

批量处理程序调试遇到问题,无心睡眠,向大家寻求帮助!

1241

8

2008-12-13 00:34:39

我想用一个FC块来实现批量处理模拟量转换的功能:事先把所有的相似模拟量输入值采集到一个DB块中,通过引用该FC块将该DB块中的数据批量转换成工程量值,输出到另外一个DB块中。编好后可以运行,但是结果没输出,编程如下:
L #db_num1 //数据块号1,如DB3则该值为3
T #tdb_num1 //传输到临时变量
OPN DB [#tdb_num1] //打开数据块1
L #db_num2 //数据块号2,如DB3则该值为3
T #tdb_num2 //传输到临时变量
OPN DI [#tdb_num2] //打开数据块2
L #data_number //装载需要处理的数据数量


nex: T #buffer //传输到临时变量

L #pointer1 //数据块号1中待处理数据的起始地址
SLD 3 //左移三位,供双字指针寻址用
T #pointer1_act //左移后传给临时变量
L #pointer2 //数据块号2中待处理数据的起始地址
SLD 3 //左移三位,供双字指针寻址用
T #pointer2_act //左移后传给临时变量


L #pointer1 //自此往下3行:数据块1中起始地址加偏移量供下次取用
L #len //加载地址偏移量
+I //起始地址+偏移量
T #pointer1 //#pointer1=#pointer1+#len


L #pointer2 //同上
L #len
+I
T #pointer2

SET //此处往下为模拟量处理部分,下面引用FC105中程序注释
A #BIPOLAR // 如果极性 #BIPOLAR=0
JC EL01 // {
L 0.000000e+000 // K1=0
T #K1 // .
JU EI01 // } else {
EL01: L -2.764800e+004 // K1=-27648.0
T #K1 // .
EI01: NOP 0 // }
L 2.764800e+004 // K2=+27648.0
T #K2 // .


// convert input to real ( 转换输入值成real值)

L DBW [#pointer1_act] // ACC1= DBW [#pointer1_act](将DB中数据装载进累加器1)
ITD // convert to double integer (转换成双整型)
DTR // convert to real (转换成实型)
T #IN_REAL // IN_REAL-IN as a real (传递到临时变量)

// determine SPAN = HI_LIM - LO_LIM (计算模拟量量程范围=上限减下限)

L #HI_LIM // SPAN=HI_LIM-LO_LIM
L #LO_LIM // .
-R // .
T #SPAN // .

// If the input value is outside the K1 and K2 range, the output(以下段程序判断模拟量值是否超限,如果输入模拟量超出K1,K2的范围则进行修正
// is clamped to the nearer of either the LO_LIM or the HI_LIM 修正方法是采取K1.K2中最接近输入值的一个值来取代模拟量值)
// and an error is logged. If the input value is exactly at a limit the
// output will be set to the computed limit with no error returned.
// changed 2/14/00 by ERI per RQ210693
L #IN_REAL // if(IN_REAL L #K1 // .
>=R // .
JC EL02 // {
L 8 // error
T #RET_VAL // .
L #LO_LIM // ACC1=LO_LIM
T DIW [#pointer2_act] // OUT=ACC1
JU FAIL // error
EL02: POP // } else {
L #K2 // if(IN_REAL>K2)
<=R // .
JC EI04 // {
L 8 // error
T #RET_VAL // .
L #HI_LIM // ACC1=HI_LIM
T DIW [#pointer2_act] // OUT=ACC1
JU FAIL // error
EI04: NOP 0 // }
NOP 0 // }

// scale the input

L #K2 // TEMP1=K2-K1
L #K1 // .
-R // .
T #TEMP1 // .
L #IN_REAL // IN_REAL-K1
L #K1 // .
-R // .
L #TEMP1 // divide by TEMP1
/R // .
L #SPAN // multiply by SPAN
*R // .
L #LO_LIM // add LO_LIM
+R // .
T DIW [#pointer2_act] // OUT=scale(IN_REAL)

// set BR bit : no error-set BR bit to 1; with error-set BR bit to 0. (设置错误位值)

L 0 // return error code 0
T #RET_VAL
SET // RLO = 1 (NO ERROR)
JU SVBR //



L #buffer
FAIL: CLR // RLO = 0 (ERROR)
SVBR: SAVE // BR = RLO

BE



另外,本人不知道怎么贴图和上传附件,为了方便大家理解,我把我的程序打包传到了如下地址,可以下载调试。里面有程序的注释,地址如下:www.doma6039.com/test_dbc.rar
批量处理程序调试遇到问题,无心睡眠,向大家寻求帮助! 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54619条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。