📄 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_counterEnd SubPublic Sub Do_Read()Dim read_value_I2 As IntegerDim 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 SubPublic 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 IfEnd SubPublic 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 SubPublic Function Input_Values_Valid() As BooleanDim 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 FunctionPrivate 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 SubPrivate Sub cmd_Delete_Channel_Click()Dim del_incr As IntegerDim 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 IfEnd SubPrivate 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 IfEnd SubPrivate 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 SubPrivate Sub cmd_Toggle_Click()Dim instantiation_incr As Integer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -