Const OPCSVR = "" Const OPCSVRNAME = "ArchestrA.DASSIDirect.2" Const OPCTagPrefix = "Channel1.Device1." Const NumProcs = 15 Private Sub SetupOPCLink() Dim OPCModuleTag As String Dim Param(74) As Integer Dim Offset As Integer Dim wrtOffset As Integer Try OPCDAClient = New EasyDAClient OPCDAClient.ClientMode.AllowAsynchronousMethod = True 'When True, Async reads and write are allowed OPCDAClient.ClientMode.AllowSynchronousMethod = True 'When True, Sync reads and writes are allowed OPCDAClient.ClientMode.DesiredMethod = 1 'Determines if reads and writes are done async (1) or sync (2). Offset = 0 Param(0) = 0 Param(1) = 2 Param(2) = 2 Param(3) = 2 Param(4) = 2 Param(5) = 2 Param(6) = 2 Param(7) = 2 Param(8) = 2 Param(9) = 3 Param(10) = 3 Param(11) = 3 Param(12) = 3 Param(13) = 3 Param(14) = 3 Param(15) = 3 Param(16) = 3 Param(17) = 4 Param(18) = 6 Param(19) = 8 Param(20) = 10 Param(21) = 12 Param(22) = 14 Param(23) = 16 Param(24) = 18 Param(25) = 20 Param(26) = 22 Param(27) = 24 Param(28) = 26 Param(29) = 28 Param(30) = 30 Param(31) = 32 Param(32) = 34 Param(33) = 36 Param(34) = 38 Param(35) = 40 Param(36) = 42 Param(37) = 44 Param(38) = 46 Param(39) = 48 Param(40) = 50 Param(41) = 52 Param(42) = 54 Param(43) = 56 Param(44) = 58 Param(45) = 60 Param(46) = 64 Param(47) = 68 Param(48) = 72 Param(49) = 76 Param(50) = 80 Param(51) = 84 Param(52) = 88 Param(53) = 92 Param(54) = 96 Param(55) = 100 Param(56) = 104 Param(57) = 108 Param(58) = 112 Param(59) = 116 Param(60) = 120 Param(61) = 124 Param(62) = 128 Param(63) = 132 Param(64) = 136 Param(65) = 140 Param(66) = 144 Param(67) = 148 Param(68) = 152 Param(69) = 156 Param(70) = 160 Param(71) = 164 Param(72) = 168 Param(73) = 172 Param(74) = 176 OPCModuleTag = OPCTagPrefix & "DB101," Select Case Module_Num Case 1 OPCModuleTag = OPCTagPrefix & "DB101," Case 2 OPCModuleTag = OPCTagPrefix & "DB102," Case 3 OPCModuleTag = OPCTagPrefix & "DB103," Case 4 OPCModuleTag = OPCTagPrefix & "DB104," Case 5 OPCModuleTag = OPCTagPrefix & "DB105," Case 6 OPCModuleTag = OPCTagPrefix & "DB106," End Select wrtOffset = 0 Offset = 0 For i = 0 To (NumProcs - 1) Step 1 writeItems(wrtOffset + 0) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(0) + Offset), ProcData(i, 0)) 'INT0 writeItems(wrtOffset + 1) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(1) + Offset) & ".0", ProcData(i, 1)) 'INTX2.0 writeItems(wrtOffset + 2) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(2) + Offset) & ".1", ProcData(i, 2)) 'X2.1 writeItems(wrtOffset + 3) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(3) + Offset) & ".2", ProcData(i, 3)) 'X2.2 writeItems(wrtOffset + 4) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(4) + Offset) & ".3", ProcData(i, 4)) 'X2.3 writeItems(wrtOffset + 5) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(5) + Offset) & ".4", ProcData(i, 5)) 'X2.4 writeItems(wrtOffset + 6) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(6) + Offset) & ".5", ProcData(i, 6)) 'X2.5 writeItems(wrtOffset + 7) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(7) + Offset) & ".6", ProcData(i, 7)) 'X2.6 writeItems(wrtOffset + 8) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(8) + Offset) & ".7", ProcData(i, 8)) 'X2.7 writeItems(wrtOffset + 9) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(9) + Offset) & ".0", ProcData(i, 9)) 'X3.0 writeItems(wrtOffset + 10) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(10) + Offset) & ".1", ProcData(i, 10)) 'X3.1 writeItems(wrtOffset + 11) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(11) + Offset) & ".2", ProcData(i, 11)) 'X3.2 writeItems(wrtOffset + 12) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(12) + Offset) & ".3", ProcData(i, 12)) 'X3.3 writeItems(wrtOffset + 13) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(13) + Offset) & ".4", ProcData(i, 13)) 'X3.4 writeItems(wrtOffset + 14) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(14) + Offset) & ".5", ProcData(i, 14)) 'X3.5 writeItems(wrtOffset + 15) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(15) + Offset) & ".6", ProcData(i, 15)) 'X3.6 writeItems(wrtOffset + 16) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "X" & CStr(Param(16) + Offset) & ".7", ProcData(i, 16)) 'X3.7 writeItems(wrtOffset + 17) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(17) + Offset), ProcData(i, 17)) 'INT4 writeItems(wrtOffset + 18) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(18) + Offset), ProcData(i, 18)) 'INT6 writeItems(wrtOffset + 19) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(19) + Offset), ProcData(i, 19)) 'INT8 writeItems(wrtOffset + 20) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(20) + Offset), ProcData(i, 20)) 'INT10 writeItems(wrtOffset + 21) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(21) + Offset), ProcData(i, 21)) 'INT12 writeItems(wrtOffset + 22) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(22) + Offset), ProcData(i, 22)) 'INT14 writeItems(wrtOffset + 23) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(23) + Offset), ProcData(i, 23)) 'INT16 writeItems(wrtOffset + 24) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(24) + Offset), ProcData(i, 24)) 'INT18 writeItems(wrtOffset + 25) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(25) + Offset), ProcData(i, 25)) 'INT20 writeItems(wrtOffset + 26) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(26) + Offset), ProcData(i, 26)) 'INT22 writeItems(wrtOffset + 27) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(27) + Offset), ProcData(i, 27)) 'INT24 writeItems(wrtOffset + 28) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(28) + Offset), ProcData(i, 28)) 'INT26 writeItems(wrtOffset + 29) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(29) + Offset), ProcData(i, 29)) 'INT28 writeItems(wrtOffset + 30) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(30) + Offset), ProcData(i, 30)) 'INT30 writeItems(wrtOffset + 31) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(31) + Offset), ProcData(i, 31)) 'INT32 writeItems(wrtOffset + 32) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(32) + Offset), ProcData(i, 32)) 'INT34 writeItems(wrtOffset + 33) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(33) + Offset), ProcData(i, 33)) 'INT36 writeItems(wrtOffset + 34) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(34) + Offset), ProcData(i, 34)) 'INT38 writeItems(wrtOffset + 35) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(35) + Offset), ProcData(i, 35)) 'INT40 writeItems(wrtOffset + 36) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(36) + Offset), ProcData(i, 36)) 'INT42 writeItems(wrtOffset + 37) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(37) + Offset), ProcData(i, 37)) 'INT44 writeItems(wrtOffset + 38) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(38) + Offset), ProcData(i, 38)) 'INT46 writeItems(wrtOffset + 39) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(39) + Offset), ProcData(i, 39)) 'INT48 writeItems(wrtOffset + 40) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(40) + Offset), ProcData(i, 40)) 'INT50 writeItems(wrtOffset + 41) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(41) + Offset), ProcData(i, 41)) 'INT52 writeItems(wrtOffset + 42) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(42) + Offset), ProcData(i, 42)) 'INT54 writeItems(wrtOffset + 43) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(43) + Offset), ProcData(i, 43)) 'INT56 writeItems(wrtOffset + 44) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "INT" & CStr(Param(44) + Offset), ProcData(i, 44)) 'INT58 writeItems(wrtOffset + 45) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(45) + Offset), ProcData(i, 45)) 'REAL60 writeItems(wrtOffset + 46) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(46) + Offset), ProcData(i, 46)) 'REAL64 writeItems(wrtOffset + 47) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(47) + Offset), ProcData(i, 47)) 'REAL68 writeItems(wrtOffset + 48) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(48) + Offset), ProcData(i, 48)) 'REAL72 writeItems(wrtOffset + 49) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(49) + Offset), ProcData(i, 49)) 'REAL76 writeItems(wrtOffset + 50) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(50) + Offset), ProcData(i, 50)) 'REAL80 writeItems(wrtOffset + 51) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(51) + Offset), ProcData(i, 51)) 'REAL84 writeItems(wrtOffset + 52) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(52) + Offset), ProcData(i, 52)) 'REAL88 writeItems(wrtOffset + 53) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(53) + Offset), ProcData(i, 53)) 'REAL92 writeItems(wrtOffset + 54) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(54) + Offset), ProcData(i, 54)) 'REAL96 writeItems(wrtOffset + 55) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(55) + Offset), ProcData(i, 55)) 'REAL100 writeItems(wrtOffset + 56) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(56) + Offset), ProcData(i, 56)) 'REAL104 writeItems(wrtOffset + 57) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(57) + Offset), ProcData(i, 57)) 'REAL108 writeItems(wrtOffset + 58) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(58) + Offset), ProcData(i, 58)) 'REAL112 writeItems(wrtOffset + 59) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(59) + Offset), ProcData(i, 59)) 'REAL116 writeItems(wrtOffset + 60) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(60) + Offset), ProcData(i, 60)) 'REAL120 writeItems(wrtOffset + 61) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(61) + Offset), ProcData(i, 61)) 'REAL124 writeItems(wrtOffset + 62) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(62) + Offset), ProcData(i, 62)) 'REAL128 writeItems(wrtOffset + 63) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(63) + Offset), ProcData(i, 63)) 'REAL132 writeItems(wrtOffset + 64) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(64) + Offset), ProcData(i, 64)) 'REAL136 writeItems(wrtOffset + 65) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(65) + Offset), ProcData(i, 65)) 'REAL140 writeItems(wrtOffset + 66) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(66) + Offset), ProcData(i, 66)) 'REAL144 writeItems(wrtOffset + 67) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(67) + Offset), ProcData(i, 67)) 'REAL148 writeItems(wrtOffset + 68) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(68) + Offset), ProcData(i, 68)) 'REAL152 writeItems(wrtOffset + 69) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(69) + Offset), ProcData(i, 69)) 'REAL156 writeItems(wrtOffset + 70) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(70) + Offset), ProcData(i, 70)) 'REAL160 writeItems(wrtOffset + 71) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(71) + Offset), ProcData(i, 71)) 'REAL164 writeItems(wrtOffset + 72) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(72) + Offset), ProcData(i, 72)) 'REAL168 writeItems(wrtOffset + 73) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(73) + Offset), ProcData(i, 73)) 'REAL172 writeItems(wrtOffset + 74) = New OpcLabs.EasyOpc.DataAccess.DAItemValueArguments(OPCSVR, OPCSVRNAME, OPCModuleTag & "REAL" & CStr(Param(74) + Offset), ProcData(i, 74)) 'REAL176 wrtOffset = wrtOffset + 75 Offset = Offset + 180 Next Catch ex As System.Exception MessageBox.Show(ex.Message, "System Exception", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub WriteBatchToPLC() 'Recipe is downloaded to the PLC Dim Cnn As OdbcConnection Dim Cmd As OdbcCommand Dim Ra As OdbcDataReader Dim CmdString As String Dim HasRows As Boolean Dim STime, FTime As String STime = Now.ToString Try Cnn = New OdbcConnection(ODBCConnstring) Cnn.Open() CmdString = "Select [Proc_Param_0], " _ & "[Proc_Param_1_0], " _ & "[Proc_Param_1_1], " _ & "[Proc_Param_1_2], " _ & "[Proc_Param_1_3], " _ & "[Proc_Param_1_4], " _ & "[Proc_Param_1_5], " _ & "[Proc_Param_1_6], " _ & "[Proc_Param_1_7], " _ & "[Proc_Param_1_8], " _ & "[Proc_Param_1_9], " _ & "[Proc_Param_1_10], " _ & "[Proc_Param_1_11], " _ & "[Proc_Param_1_12], " _ & "[Proc_Param_1_13], " _ & "[Proc_Param_1_14], " _ & "[Proc_Param_1_15], " _ & "[Proc_Param_2], " _ & "[Proc_Param_3], " _ & "[Proc_Param_4], " _ & "[Proc_Param_5], " _ & "[Proc_Param_6], " _ & "[Proc_Param_7], " _ & "[Proc_Param_8], " _ & "[Proc_Param_9], " _ & "[Proc_Param_10], " _ & "[Proc_Param_11], " _ & "[Proc_Param_12], " _ & "[Proc_Param_13], " _ & "[Proc_Param_14], " _ & "[Proc_Param_15], " _ & "[Proc_Param_16], " _ & "[Proc_Param_17], " _ & "[Proc_Param_18], " _ & "[Proc_Param_19], " _ & "[Proc_Param_20], " _ & "[Proc_Param_21], " _ & "[Proc_Param_22], " _ & "[Proc_Param_23], " _ & "[Proc_Param_24], " _ & "[Proc_Param_25], " _ & "[Proc_Param_26], " _ & "[Proc_Param_27], " _ & "[Proc_Param_28], " _ & "[Proc_Param_29], " _ & "[Proc_Param_30], " _ & "[Proc_Param_31], " _ & "[Proc_Param_32], " _ & "[Proc_Param_33], " _ & "[Proc_Param_34], " _ & "[Proc_Param_35], " _ & "[Proc_Param_36], " _ & "[Proc_Param_37], " _ & "[Proc_Param_38], " _ & "[Proc_Param_39], " _ & "[Proc_Param_40], " _ & "[Proc_Param_41], " _ & "[Proc_Param_42], " _ & "[Proc_Param_43], " _ & "[Proc_Param_44], " _ & "[Proc_Param_45], " _ & "[Proc_Param_46], " _ & "[Proc_Param_47], " _ & "[Proc_Param_48], " _ & "[Proc_Param_49], " _ & "[Proc_Param_50], " _ & "[Proc_Param_51], " _ & "[Proc_Param_52], " _ & "[Proc_Param_53], " _ & "[Proc_Param_54], " _ & "[Proc_Param_55], " _ & "[Proc_Param_56], " _ & "[Proc_Param_57], " _ & "[Proc_Param_58], " _ & "[Proc_Param_59], " _ & "[Proc_Position], " _ & "[Recipe_ID] " _ & "From Procedure_Table Where [Recipe_ID] = " & TextBox5.Text & " Order By [Proc_Position]" Cmd = New OdbcCommand(CmdString, Cnn) Ra = Cmd.ExecuteReader() HasRows = Ra.HasRows If HasRows = False Then MessageBox.Show("There is nos datas", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Dim i As Integer = 1 Dim RowNum As Integer = 0 Dim strWriteValue As New System.Text.StringBuilder Dim writeError As Boolean = False Do While Ra.Read() For i = 0 To 74 Step 1 ProcData(RowNum, i) = Ra.Item(i) writeItems((RowNum * 75) + i).Value = ProcData(RowNum, i) Next RowNum = RowNum + 1 Loop Button9.Enabled = False writeResults = OPCDAClient.WriteMultipleItemValues(writeItems) If Not writeResults Is Nothing Then 'iterate through the array For i = LBound(writeResults) To UBound(writeResults) If writeResults(i).Succeeded Then 'append our message with a "success" strWriteValue.Append("Element " & i & ": success") Else strWriteValue.Append(writeResults(i).ErrorCode & ": " & writeResults(i).ErrorMessage) writeError = True End If 'add a carriage-return + linefeed to the message strWriteValue.Append(vbCrLf) Next End If If writeError Then MessageBox.Show("Errors occurred while downloading the Recipe to the PLC. Please consult your supervisor", "Recipe Download Failed", MessageBoxButtons.OK, MessageBoxIcon.Error) End If FTime = Now.ToString MessageBox.Show(STime & vbCrLf & FTime) Button9.Enabled = True Catch ex As System.Data.Odbc.OdbcException MessageBox.Show(ex.Message, "ODBC Exception", MessageBoxButtons.OK, MessageBoxIcon.Error) Catch ex As System.Exception MessageBox.Show(ex.Message, "System Exception", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub