📄 rtdxfrm.frm
字号:
For RC_channel_counter = 0 To (Val(NUM_CHANNELS.Text) - 1)
' Initialize row start point
MethodValues(RC_channel_counter).message_counter = 1
' Initialize column start point
MethodValues(RC_channel_counter).member_counter = _
Column_Point(RC_channel_counter).Start_Point
Next RC_channel_counter
End Sub
Public Sub Do_Read()
Dim read_value_I2 As Integer
Dim read_value_I4 As Long
' Read until we have reached the end of a log file
If (MethodValues(channel_number).read_status = EEndOfLogFile) Then
' Close channel
MethodValues(channel_number).stat = _
rtdx(channel_number).Close()
' Mark channel as closed
MethodValues(channel_number).CHANNEL_OPEN = False
Exit Sub
End If
' Test for 32bit or 16bit Read
If RTDX_channel(channel_number).integer_size = "32-Bit" Then
'########## RTDX(TM) ##########'
MethodValues(channel_number).read_status = _
rtdx(channel_number).ReadI4(read_value_I4)
'########## RTDX(TM) ##########'
Else
'########## RTDX(TM) ##########'
MethodValues(channel_number).read_status = _
rtdx(channel_number).ReadI2(read_value_I2)
'########## RTDX(TM) ##########'
read_value_I4 = read_value_I2
End If
If (MethodValues(channel_number).read_status = SUCCESS) Then
' Call the procedure that distributes the
' member values to grid cells
Process_Data read_value_I4
End If
End Sub
Public Sub Do_Write()
Dim Write_Value_I2 As Integer
' Write until Write_Value_I4 is greater than or equal
' to (total messages(rows) * total members(columns))
If MethodValues(channel_number).Write_Value_I4 >= _
RTDX_channel(channel_number).messages * _
RTDX_channel(channel_number).members Then
' Close channel
MethodValues(channel_number).stat = _
rtdx(channel_number).Close()
' Mark channel as closed
MethodValues(channel_number).CHANNEL_OPEN = False
Exit Sub
End If
' check buffer status
'########## RTDX(TM) ##########'
' Test for 32bit or 16bit StatusOfWrite
MethodValues(channel_number).write_status = _
rtdx(channel_number).StatusOfWrite _
(MethodValues(channel_number).buffer_status)
'########## RTDX(TM) ##########'
If RTDX_channel(channel_number).integer_size = "32-Bit" Then
MethodValues(channel_number).buffer_status = _
MethodValues(channel_number).buffer_status / 4
Else
'########## RTDX(TM) ##########'
MethodValues(channel_number).buffer_status = _
MethodValues(channel_number).buffer_status / 2
'########## RTDX(TM) ##########'
End If
' Write Data if buffer is empty and last write status is OK
If (MethodValues(channel_number).buffer_status <= 0) And _
(MethodValues(channel_number).write_status <> FAIL) Then
MethodValues(channel_number).Write_Value_I4 = _
MethodValues(channel_number).Write_Value_I4 + 1
' Call Ole WriteI4 Method
If RTDX_channel(channel_number).integer_size = "32-Bit" Then
'########## RTDX(TM) ##########'
MethodValues(channel_number).write_status = _
rtdx(channel_number).WriteI4 _
(MethodValues(channel_number).Write_Value_I4, _
MethodValues(channel_number).buffer_status)
'########## RTDX(TM) ##########'
Else
Write_Value_I2 = MethodValues(channel_number).Write_Value_I4
'########## RTDX(TM) ##########'
MethodValues(channel_number).write_status = _
rtdx(channel_number).WriteI2(Write_Value_I2, _
MethodValues(channel_number).buffer_status)
'########## RTDX(TM) ##########'
End If
' Display Data
Process_Data MethodValues(channel_number).Write_Value_I4
End If
End Sub
Public Sub Process_Data(ByVal member_value As Long)
' distribute data to grid cells
' Determine where to put message on grid sheet
' Test member value of message
If (MethodValues(channel_number).member_counter > _
Column_Point(channel_number).End_Point) Then
' reset column
MethodValues(channel_number).member_counter = _
Column_Point(channel_number).Start_Point
' increment the rows
MethodValues(channel_number).message_counter = _
MethodValues(channel_number).message_counter + 1
End If
' If we are within are row boundaries then display the data
If (MethodValues(channel_number).message_counter <= _
RTDX_channel(channel_number).messages) Then
' Set focus on a cell
RTDX_gridfrm.RTDX_grid.Row = _
MethodValues(channel_number).message_counter
RTDX_gridfrm.RTDX_grid.Col = _
MethodValues(channel_number).member_counter
' Fill cell with a value
RTDX_gridfrm.RTDX_grid = member_value
' Increment member number counter
MethodValues(channel_number).member_counter = _
MethodValues(channel_number).member_counter + 1
End If
End Sub
Public Function Input_Values_Valid() As Boolean
Dim char_incr As Integer
' Test input values
If (CHANNEL_NAME.Text = "") Then
MsgBox ("Error: Channel name has not been included")
Input_Values_Valid = False
Exit Function
End If
If (IsNumeric(Left(CHANNEL_NAME.Text, 1))) Then
MsgBox ("Error: The first character of the channel name must be non-numeric!")
Input_Values_Valid = False
Exit Function
End If
If (((Val(MAX_MESSAGES.Text)) <= 0) Or (MAX_MESSAGES.Text = "")) Then
MsgBox ("Error: Message value must be greater than 0!")
Input_Values_Valid = False
Exit Function
End If
If (((Val(MAX_MEMBERS.Text)) <= 0) Or (MAX_MEMBERS.Text = "")) Then
MsgBox ("Error: Member value must be greater than 0!")
Input_Values_Valid = False
Exit Function
End If
' Visual Basic interprets special characters as numeric. Test the
' channel name's integrity by comparing the ascii representation of
' illegal characters.
For char_incr = 1 To Len(CHANNEL_NAME.Text)
If Not (((AscW(Mid(CHANNEL_NAME.Text, char_incr, 1))) >= AscW("0")) _
And ((AscW(Mid(CHANNEL_NAME.Text, char_incr, 1))) <= AscW("9")) _
Or ((AscW(Mid(CHANNEL_NAME.Text, char_incr, 1))) >= AscW("A")) _
And ((AscW(Mid(CHANNEL_NAME.Text, char_incr, 1))) <= AscW("Z")) _
Or ((AscW(Mid(CHANNEL_NAME.Text, char_incr, 1))) >= AscW("a")) _
And ((AscW(Mid(CHANNEL_NAME.Text, char_incr, 1))) <= AscW("z"))) Then
MsgBox ("Error: No special characters are permitted in channel name!")
Input_Values_Valid = False
Exit Function
End If
Next char_incr
Input_Values_Valid = True
End Function
Private Sub cmd_Add_Channel_Click()
Dim organizer_index As Integer
If Input_Values_Valid Then
' Add record to channel array
NUM_CHANNELS.Text = Str(Val(NUM_CHANNELS.Text) + 1)
chan_incr = Val(NUM_CHANNELS.Text) - 1
'only allocate enough for channels
ReDim Preserve RTDX_channel(Val(NUM_CHANNELS.Text)) _
As RTDX_Channel_Attributes
' Insert new channel at the end
RTDX_channel(chan_incr).name = CHANNEL_NAME.Text
RTDX_channel(chan_incr).type = IO_TYPE.Text
RTDX_channel(chan_incr).messages = MAX_MESSAGES.Text
RTDX_channel(chan_incr).members = MAX_MEMBERS.Text
RTDX_channel(chan_incr).integer_size = INT_TYPE.Text
' Re-Label channel
cmd_View_Channel.Clear
For organizer_index = 0 To (Val(NUM_CHANNELS.Text - 1))
cmd_View_Channel.AddItem "Channel " & cmd_View_Channel.ListCount
Next organizer_index
' Set Focus on current channel
cmd_View_Channel.Text = "Channel " & chan_incr
' Enable controls that require an existing channel
cmd_Delete_Channel.Enabled = True
cmd_Reset.Enabled = True
cmd_Modify_Channel.Enabled = True
cmd_Toggle.Enabled = True
mnu_Start.Enabled = True
End If
End Sub
Private Sub cmd_Delete_Channel_Click()
Dim del_incr As Integer
Dim organizer_index As Integer
' Check to see if we have any channels
If Val(NUM_CHANNELS.Text) <= 0 Then
MsgBox ("There are no channels to delete!")
cmd_Delete_Channel.Enabled = False
cmd_Reset.Enabled = False
cmd_Modify_Channel.Enabled = False
cmd_Toggle.Enabled = False
mnu_Start.Enabled = False
Else
If (Val(NUM_CHANNELS.Text - 1) <> 0) Then
cmd_Delete_Channel.Enabled = True
NUM_CHANNELS.Text = Str(Val(NUM_CHANNELS.Text) - 1)
' Remove record at position chan_incr by shifting array
' elements one step to the left
For del_incr = chan_incr To (Val(NUM_CHANNELS.Text - 1))
RTDX_channel(del_incr).name = _
RTDX_channel(del_incr + 1).name
RTDX_channel(del_incr).type = _
RTDX_channel(del_incr + 1).type
RTDX_channel(del_incr).messages = _
RTDX_channel(del_incr + 1).messages
RTDX_channel(del_incr).members = _
RTDX_channel(del_incr + 1).members
RTDX_channel(del_incr).integer_size = _
RTDX_channel(del_incr + 1).integer_size
Next del_incr
' Delete last element off the array
ReDim Preserve RTDX_channel(Val(NUM_CHANNELS.Text)) _
As RTDX_Channel_Attributes
' Re-Label channel
cmd_View_Channel.Clear
For organizer_index = 0 To (Val(NUM_CHANNELS.Text - 1))
cmd_View_Channel.AddItem "Channel " & cmd_View_Channel.ListCount
Next organizer_index
If chan_incr <> 0 Then
chan_incr = chan_incr - 1
End If
'Show record
CHANNEL_NAME.Text = RTDX_channel(chan_incr).name
IO_TYPE.Text = RTDX_channel(chan_incr).type
MAX_MESSAGES.Text = RTDX_channel(chan_incr).messages
MAX_MEMBERS.Text = RTDX_channel(chan_incr).members
INT_TYPE.Text = RTDX_channel(chan_incr).integer_size
' Set Focus on current next channel
cmd_View_Channel.Text = "Channel " & chan_incr
Else
cmd_Reset_Click
End If
End If
End Sub
Private Sub cmd_Modify_Channel_Click()
' If input values are valid
If Input_Values_Valid Then
' Insert new value into array
RTDX_channel(chan_incr).name = CHANNEL_NAME.Text
RTDX_channel(chan_incr).type = IO_TYPE.Text
RTDX_channel(chan_incr).messages = MAX_MESSAGES.Text
RTDX_channel(chan_incr).members = MAX_MEMBERS.Text
RTDX_channel(chan_incr).integer_size = INT_TYPE.Text
End If
End Sub
Private Sub cmd_Reset_Click()
' Disable controls that require an existing channel
cmd_Delete_Channel.Enabled = False
cmd_Reset.Enabled = False
cmd_Modify_Channel.Enabled = False
cmd_Toggle.Enabled = False
mnu_Start.Enabled = False
' Wipe out all channels
ReDim RTDX_channel(0) As RTDX_Channel_Attributes
cmd_View_Channel.Clear
NUM_CHANNELS.Text = 0
CHANNEL_NAME.Text = ""
IO_TYPE.Text = "R"
MAX_MEMBERS.Text = ""
MAX_MESSAGES.Text = ""
INT_TYPE.Text = "32-Bit"
chan_incr = 0
End Sub
Private Sub cmd_Toggle_Click()
Dim instantiation_incr As Integer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -