以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]计时器代码效率问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184715)

--  作者:kb9702
--  发布时间:2022/12/25 19:00:00
--  [求助]计时器代码效率问题
以下为计时器代码,计时器间隔是1MS
以下内容为程序代码:

1 Dim CheckBox As WinForm.CheckBox = e.Form.Controls("WatchBox")
2 If CheckBox.Checked = True Then
3 ARTCount = ARTCount + 1
4 If VarD0 = 2 Then
5 Count = Count + 1
6 End If
7 End If

以下为checkbox代码
以下内容为程序代码:

1 If e.Sender.Checked = True Then
2 VarD0 = 2
3 e.Form.TimerEnabled = True
4 D0Date = Date.Now
5 Else
6 VarD0 = 3
7 e.Form.TimerEnabled = False
8 Dim st As Date = D0Date
9 e.Form.Controls("ShowStr").Text = "耗时:" & (Date.Now - st).TotalMilliseconds & "毫秒 采集:" & ARTCount & "次 计" & Count & "次"
10 Count = 0
11 ARTCount =0
12 End If


耗时:5194.8091毫秒 采集:334次 计334次
ARTCount,Count,VarD0多为Public 变量
为啥执行效率这么低啊


--  作者:有点蓝
--  发布时间:2022/12/25 19:46:00
--  
也才半秒多一点,不算慢吧。
--  作者:kb9702
--  发布时间:2022/12/25 19:51:00
--  
主要是有个数据采集的要读取串口数据,1秒钟100次的采集要求,现在使用全局代码里自定义函数才能达到要求。
问题是多线程的,因为采集的同时要跟PLC通讯写入数据到PLC...还要根据PLC返回的值来控制数据写入到集合。。相当于三个线程操作。。PLC是50MS通讯间隔,所以500MS的速度就有点慢了。。是什么原因导致的呀

--  作者:有点蓝
--  发布时间:2022/12/25 20:03:00
--  
这种还是使用全局代码里自定义函数吧。

这玩意涉及很多原因,我也说不清楚。

--  作者:nsdata
--  发布时间:2022/12/25 22:51:00
--  
狐表的性能 做不了50ms,肯定卡死 
--  作者:kb9702
--  发布时间:2022/12/26 15:22:00
--  
卡死到没有,跟串口通讯的时候自动降速了。。
以下内容为程序代码:

1 Dim Val() As Byte = New Byte() {1, 4, 1, 0, 0, 8, 240, 48}
2 For i As Integer = 0 To 99
3 Threading.Thread.Sleep(5)
4 Ports("COM3").Write(Val, 0, Val.Length)
5 Next
就这样的代码需要运行1500MS。。
看来得放弃了。。