Foxtable(狐表)用户栏目专家坐堂 → [求助]增加随机浮动系数后数据异常(已解决)


  共有2306人关注过本帖树形打印复制链接

主题:[求助]增加随机浮动系数后数据异常(已解决)

帅哥哟,离线,有人找我吗?
yyzlxc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]增加随机浮动系数后数据异常(已解决)  发帖心情 Post By:2016/6/3 16:15:00 [只看该作者]

一段数据模拟演示代码,可以自动生成节拍时间数据。为了提高模拟效果,对生成的数据进行6%以内的随机浮动,正常的插插间隔时间应该在3600秒±6%,但是却出现近90000的异常数据,并且没有规律性(连续按加浮动按钮,异常数据的数量和位置会变动),问题出在哪里?请各位老师指教,谢谢!!


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目21.foxdb


[此贴子已经被作者于2016/6/3 19:06:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/3 17:00:00 [只看该作者]

为什么要考虑日期增量?

 

For Each dr As DataRow In DataTables("表A").DataRows
    dr("插卡时间") = Nothing
    dr("拔卡时间") = Nothing
    dr("插拔间隔") = Nothing
    dr("插插间隔") = Nothing
    dr("拔插间隔") = Nothing
    dr("工效") = Nothing
    dr("午休标记") = Nothing
Next

Dim fdxs As Integer = 6 '工位工时浮动系数
Dim cgsj As Date = #08:00:00# '上午出工时间
Dim swsgsj As Date = #11:00:00# '上午收工时间
Dim wxjg As Integer = 5400 '午休间隔
'Dim rqzl As Integer = 86400 '日期增量

'填充当天工位首次插拔卡时间
For Each dr As DataRow In DataTables("表A").DataRows
    Dim pr As DataRow = DataTables("表A").Find("日期 = '" & dr("日期") & "' and 工位ID = '" & dr("工位ID") & "'","采集序号")
    If pr.IsNull("插卡时间") Then
        pr("插卡时间") = pr("日期") &" "& cgsj
        'pr("拔卡时间") = CDate(pr("插卡时间")).AddSeconds(pr("工位工时"))
        pr("拔卡时间") = CDate(pr("插卡时间")).AddSeconds(pr("工位工时") * Rand.Next(100 - fdxs,100 + fdxs) / 100)
    End If
Next

For Each dr As DataRow In DataTables("表A").DataRows
    Dim pr As DataRow = DataTables("表A").Find("工位ID = '" & dr("工位ID") & "' and 采集序号 <  '" & dr("采集序号") & "'","采集序号 Desc") '同批次工位的上一行
    Dim pr2 As DataRow = DataTables("表A").Find("工位ID = '" & dr("工位ID") & "' And 午休标记 = 1")
    If dr.IsNull("插卡时间") Then
        If pr("拔卡时间").AddSeconds(dr("工位工时")) > pr("日期") &" "& swsgsj And pr2 Is Nothing '判断本节拍结束时间大于中午收工时间以及当天本工位无午休标记
            If dr("日期") = pr("日期") Then
                dr("插卡时间") = pr("拔卡时间")
                dr("插插间隔") = (dr("插卡时间") - pr("插卡时间")).TotalSeconds()
                dr("拔插间隔") = (dr("插卡时间") - pr("拔卡时间")).TotalSeconds()
            Else
                dr("插卡时间") = pr("拔卡时间")'.AddSeconds(rqzl)
                dr("插插间隔") = (dr("插卡时间") - pr("插卡时间")).TotalSeconds()' - rqzl
                dr("拔插间隔") = (dr("插卡时间") - pr("拔卡时间")).TotalSeconds() '- rqzl
            End If
            'dr("拔卡时间") = CDate(dr("插卡时间")).AddSeconds(dr("工位工时") + wxjg)
            dr("拔卡时间") = CDate(dr("插卡时间")).AddSeconds(dr("工位工时") * Rand.Next(100 - fdxs,100 + fdxs) / 100 + wxjg)
            dr("午休标记") = 1 '添加午休标记
        Else
            If dr("日期") = pr("日期") Then
                dr("插卡时间") = pr("拔卡时间")
                dr("插插间隔") = (dr("插卡时间") - pr("插卡时间")).TotalSeconds()
                dr("拔插间隔") = (dr("插卡时间") - pr("拔卡时间")).TotalSeconds()
            Else
                dr("插卡时间") = pr("拔卡时间")'.AddSeconds(rqzl)
                dr("插插间隔") = (dr("插卡时间") - pr("插卡时间")).TotalSeconds() '- rqzl
                dr("拔插间隔") = (dr("插卡时间") - pr("拔卡时间")).TotalSeconds() '- rqzl
            End If
            If pr("午休标记") = 1 Then
                dr("插插间隔") = (dr("插卡时间") - pr("插卡时间")).TotalSeconds() - wxjg
            End If
            'dr("拔卡时间") = CDate(dr("插卡时间")).AddSeconds(dr("工位工时")
            dr("拔卡时间") = CDate(dr("插卡时间")).AddSeconds(dr("工位工时") * Rand.Next(100 - fdxs,100 + fdxs) / 100)
        End If
    End If
Next
For Each dr As DataRow In DataTables("表A").DataRows
    If dr.IsNull("插拔间隔") Then
        If dr("午休标记") = 1 Then
            dr("插拔间隔") = (dr("拔卡时间") - dr("插卡时间")).TotalSeconds() - wxjg
        Else
            dr("插拔间隔") = (dr("拔卡时间") - dr("插卡时间")).TotalSeconds()
        End If
    End If
    If dr.IsNull("插插间隔") Then
        dr("插插间隔") = dr("插拔间隔")
    End If
    dr("工效") = dr("工位工时") / dr("插插间隔")
Next
Tables("表A").AutoSizeCols()
DataTables("表A").Save()


 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2016/6/3 17:15:00 [只看该作者]

谢谢大红袍老师回复,关于日期增量,是因为插卡时间等于上一行的拔卡时间,当两者不为同一天时,本行的插卡时间等于上一行拔卡时间加一天的秒时(86400),否则插卡时间的日期会不符要求,不加浮动的代码就可以正常显示,但是加了浮动后就出错,问题出在哪里,请大红袍老师指教,谢谢!!

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2016/6/3 17:22:00 [只看该作者]

谢谢大红袍老师,没有看清楚,老师已经修改了代码,运行正常,再次感谢!!

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/3 17:22:00 [只看该作者]

 不需要加上这个啊,相减就加上日期了的啊。

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2016/6/3 17:32:00 [只看该作者]

修改后的代码插卡时间的日期回到6月1日,如何解决,请大红袍老师指教,谢谢!!

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/3 17:40:00 [只看该作者]

为什么要赋值?不赋值不行?你逻辑是什么?

 

dr("插卡时间") = pr("拔卡时间")


 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2016/6/3 17:44:00 [只看该作者]

是的,本行的插卡时间是上一行的拔卡时间。

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2016/6/3 17:46:00 [只看该作者]

如果不加日期增量,当前行的日期大于上一行的日期,插卡时间的日期会等于上一行的日期。

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/3 17:47:00 [只看该作者]

 那没问题啊,赋值没问题啊。

 回到顶部
总数 17 1 2 下一页