PLC是松下XH-c60
我之前用的旧版本EBPro写的程序,触摸屏运行一直正常
后来升级成EBproV6.01.02.146_20180911,写入后就不正常了,是一个宏指令不正常
我这个宏指令是这样运行的:
1、读出触摸屏的时钟数据
2、在时钟等于0分0秒的时候,把PLC的自动运行时间清零,这样每个小时都会清空数据
宏设定成500ms执行一次
软件的下载日期
这是未升级软件之前的,每个小时都能正常清零
这是升级成最新版的,出现不能清零的情况
这是软件的BUG还是什么?
更新软件后,有时能清零,有时不能清零,运行时间大于60的就是不能清零的数据
现在附上整个宏的源代码
macro_command main()
int ibasic=50000//宅基地
short rd_sdate[5]//[0]秒,[1]分,[2]时,[3]日,[4]月读出
bool rd_bclear[2]//两个清零按钮读出,0:进料清零;1:出料清零
int rd_ifeedNew,ifeedOld//进料
int rd_iexportNew,iexportOld//出料
short rd_sAutoTime//自动运行时间,由PLC计算
short rd_sAlmTime//故障时间,由PLC计算
int iTimeOffset,iDateOffset,iOffset//时间偏移,日期偏移,每小时偏移
short wr_sbuf[4]//写入报表的缓冲区
short soff=0
int ioff=0,a
bool boff=0
short sfeedNow//当前时间进料数
short sexportNow//当前时间出料数
bool bfirst,bfirst2//第1次
GetData(rd_sdate[0], "Local HMI", LW, 9017, 5)//[0]秒,[1]分,[2]时,[3]日,[4]月读出
//GetData(rd_sdate[0], "Local HMI", LW, 10002, 2)
GetData(rd_ifeedNew, "Panasonic FP/KW", DT, 650, 1)//进料
GetData(rd_iexportNew, "Panasonic FP/KW", DT, 652, 1)//出料
GetData(rd_sAutoTime, "Panasonic FP/KW", DT, 654, 1)//自动运行时间
GetData(rd_sAlmTime, "Panasonic FP/KW", DT, 656, 1)//故障时间
GetData(rd_bclear[0], "Local HMI", LB, 350, 2)//两个清零按钮读出
//计算偏移
iTimeOffset=rd_sdate[2]*20//时
iDateOffset=(rd_sdate[3]-1)*500//日
iOffset=iTimeOffset+iDateOffset+ibasic
//0时,0分,1秒,清空当天数据,避免上月残留
//[0]秒,[1]分,[2]时,[3]日,[4]月
if rd_sdate[2]==0 and rd_sdate[1]==0 and rd_sdate[0]==1 and bfirst2==0 then
for a=0 to 499
SetData(ioff, "Local HMI", RW_A, iOffset+a, 1)
next
ifeedOld=0
iexportOld=0
SetData(ioff, "Panasonic FP/KW", DT, 650, 1)//进料总数
SetData(ioff, "Panasonic FP/KW", DT, 652, 1)//出料总数
bfirst2=1
end if
if rd_sdate[2]==0 and rd_sdate[1]==0 and rd_sdate[0]==5 then
bfirst2=0
end if
//数据排序写入缓冲区
wr_sbuf[0]=sfeedNow
wr_sbuf[1]=sexportNow
wr_sbuf[2]=rd_sAutoTime
wr_sbuf[3]=rd_sAlmTime
SetData(wr_sbuf[0], "Local HMI", RW_A, iOffset, 4)
SetData(rd_sdate[4], "Local HMI", RW_A, iDateOffset+ibasic+480, 1)//月写入
SetData(rd_sdate[3], "Local HMI", RW_A, iDateOffset+ibasic+481, 1)//日写入
//TRACE("iTimeOffset=%d,iDateOffset=%d,iOffset=%d",iTimeOffset,iDateOffset,iOffset)
//旧数据只在00分00秒读出,新数据一直在读出,新数据-旧数据=当前时间的数量
//[0]秒,[1]分,[2]时,[3]日,[4]月
if rd_sdate[1]==0 and rd_sdate[0]==0 and bfirst==0 then
ifeedOld=rd_ifeedNew
iexportOld=rd_iexportNew
SetData(soff, "Panasonic FP/KW", DT, 654, 1)//自动运行时间清零
SetData(soff, "Panasonic FP/KW", DT, 656, 1)//故障时间清零
bfirst=1
end if
//[0]秒,[1]分,[2]时,[3]日,[4]月
if rd_sdate[0]>0 then
sfeedNow=rd_ifeedNew - ifeedOld//进料数量计算
if rd_bclear[0]==1 then//清零按钮
ifeedOld=(sfeedNow*(-1))
SetData(ioff, "Panasonic FP/KW", DT, 650, 1)//清零
SetData(boff, "Local HMI", LB, 350, 1)//关按钮
end if
sexportNow=rd_iexportNew-iexportOld//出料数量计算
if rd_bclear[1]==1 then
iexportOld=(sexportNow*(-1))
SetData(ioff, "Panasonic FP/KW", DT, 652, 1)//清零
SetData(boff, "Local HMI", LB, 351, 1)//关按钮
end if
bfirst=0
end if
end macro_command
最后修改:2018/11/24 13:59:04