【发布时间】:2016-04-10 12:36:08
【问题描述】:
我有一个 VB.Net 程序,它遍历数组以试图找出瓶子在“传送带”上的位置。该程序的重点是直观地向员工展示输送机如何使用 VB.net 和 Labels 工作。这很难解释,所以我会尽力而为。
Bottle_Number(10) Bottle_Position(128)
我想在传送带上的所有 128 个站点跟踪 10 个瓶子。
我们有一个只能装 10 个瓶子的传送带。我需要跟踪 10 个瓶子中每一个的位置。一旦第 11 瓶开启 - 这意味着第 1 瓶已完成并离开传送带。所以,瓶子 11 变成了瓶子 1,所以我需要将瓶子 1 的位置重置为 0,并继续跟踪瓶子 2-9,同时跟踪瓶子 11(不是瓶子 1)。一旦瓶子 12 出现,它就变成了瓶子 2,我需要将瓶子 2 的位置重置为“0”并继续跟踪所有瓶子。
任何帮助将不胜感激。
这是我的代码:
Public Class frmMain
Dim Product_Position(10) As Integer
Dim Inches_Per_Pulse As Integer
Dim PulseNumber As Integer
Dim Product_Counter As Integer
Dim Product_Location(10) As Integer
Dim Function1 As Integer
Dim Function2 As Integer
Dim Function3 As Integer
Dim Function4 As Integer
Dim Function5 As Integer
Dim Function6 As Integer
Dim Function7 As Integer
Dim Function8 As Integer
Dim Function9 As Integer
Dim Function10 As Integer
Dim Product_in_Tunel As Integer
Dim test As Integer
Dim Roll_OVer As Boolean
Dim Product_Counter_Test As Integer
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
lblStatus.BackColor = Color.Green
lblStatus.Text = "Conveyor Status: Running"
End Sub
Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
lblStatus.BackColor = Color.Red
lblStatus.Text = "Conveyor Status: Off"
End Sub
Private replace_next As Integer
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
If Product_Counter = 10 Then
replace_next += 1
If replace_next > 10 Then
replace_next = 1 ' replace them in turn 1..10, then loop back to 1
Product_Position(replace_next) = 0 ' put initial position here
End If
End If
Product_Counter = Product_Counter + 1
If Product_Counter > 10 Then
Product_Counter = 1
Roll_over = True
End If
'MsgBox(Product_Counter)
'MsgBox(replace_next)
End Sub
Private Sub btnPulse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPulse.Click
Get_Location()
End Sub
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
PulseNumber = "0"
Inches_Per_Pulse = "1"
Roll_OVer = False
'MsgBox("Test")
End Sub
Public Sub Get_Location()
'MsgBox(Product_Counter)
If Roll_OVer = True Then
Product_Counter_Test = 10
'MsgBox("i'm stuck here")
End If
If Roll_OVer = False Then
Product_Counter_Test = Product_Counter
End If
'MsgBox(Product_Counter_Test)
'MsgBox("am I here - Yes")
For test = 1 To Product_Counter_Test
'MsgBox("This works")
Product_Position(test) = Product_Position(test) + Inches_Per_Pulse
Next
PulseNumber = PulseNumber + 1
ClearLabels()
lblProduct1Position.Text = Product_Position(1)
lblProduct2Position.Text = Product_Position(2)
lblProduct3Position.Text = Product_Position(3)
lblProduct4Position.Text = Product_Position(4)
lblProduct5Position.Text = Product_Position(5)
lblProduct6Position.Text = Product_Position(6)
lblProduct7Position.Text = Product_Position(7)
lblProduct8Position.Text = Product_Position(8)
lblProduct9Position.Text = Product_Position(9)
lblProduct10Position.Text = Product_Position(10)
End Sub
Public Sub ClearLabels()
lblProduct1Position.Text = ""
lblProduct2Position.Text = ""
lblProduct3Position.Text = ""
lblProduct4Position.Text = ""
lblProduct5Position.Text = ""
lblProduct6Position.Text = ""
lblProduct7Position.Text = ""
lblProduct8Position.Text = ""
lblProduct9Position.Text = ""
lblProduct10Position.Text = ""
End Sub
脉冲按钮实际上是在驱动传送带,每个脉冲(点击按钮)意味着传送带正在向前移动。
现在,一旦程序到达第 11 瓶,它就会重置并仅向前移动“新”瓶 (bottle1)。它应该继续增加剩余的瓶子,直到它们到达末端并对它们执行相同的操作 - 将位置重置为 0 并重新开始计数。
【问题讨论】:
-
Queue(of T)、LinkedList(of T)甚至List(Of T)都可以充当 FIFO 容器。一个小的类包装器可以实现严格限制大小的逻辑。您应该打开 Option Strict。