BAB IX Kontrol Berbasis Komputer
9.4. Implementasi Pemrograman Untuk Aplikasi Kontrol Melalui Port Serial
9.4.2. Input Output Analog Fungsi :
Membaca masukan tegangan analog mulai dari 0 Volt sampai 5.10 Volt DC dari sumber tegangan DC variable dan menampilkan hasil pembacaan dengan visualisasi Voltmeter analog dan teks serta grafik. Tegangan analog masuk memalui input analog Channel1.
Mengeluarkan tegangan analog mulai dari – 10 Volt sampai dengan + 10 Volt ke output analog Channel 1 yang terhubung ke Voltmeter Digital. Pengaturan tegangan output dilakukan dengan menggeser-geser Horzontal Scrollbar pada Form.
Peralatan :
Kabel USB to RS232 Converter, Kabel RS232, Kabel input output analog dengan BNC – Stecker banana 8 mm, Sumber tegangan DC variable 0 s.d. 5.10 Volt dan Multimeter digital
Gambar 9.44 Visualisasi Program Input Output Analog
Listing program :
Dim i, gain, Xa, Xb, dx, X2, UX1, UX2, UY1, UY2, YX1, YX2, YY1, YY2 As Integer
Dim x, d1, d2 As String
Dim Unow, Ynow, din, garisnull As Double Dim sd, sr, A, B, R As Double
Dim adc1i, dac1i, dac2i As Integer
Dim adc1s, dac1s, dac2s, dacout As String
Private Sub Command1_Click()
MSComm1.PortOpen = True Timer1.Enabled = True HScroll1.Enabled = True Command1.Enabled = False Command2.Enabled = True Option1.Enabled = False Option2.Enabled = False Option3.Enabled = False Option4.Enabled = False dout = HScroll1.Value
MSComm1.Output = dacout 'mengirimkan data DAC
MSComm1.Output = "A0" 'membaca data ADC
End Sub
Private Sub Command2_Click()
MSComm1.PortOpen = False
HScroll1.Enabled = False Command1.Enabled = True Command2.Enabled = False Option1.Enabled = True Option2.Enabled = True Option3.Enabled = True Option4.Enabled = True End Sub
Private Sub Form_Load()
'Settings MSComm
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1" Option1.Value = True
'Tampilan jarum meter1
dac1i = 0 dac2i = 0
If dac1i >= 0 Then dac1s = "+" & Format(dac1i, "000")
If dac1i < 0 Then dac1s = "-" & Format(dac1i, "000")
If dac2i >= 0 Then dac2s = "+" & Format(dac2i, "000")
If dac2i < 0 Then dac2s = "-" & Format(dac2i, "000") dacout = "D" & dac1s & dac2s
Label34.Caption = dacout Line17.BorderWidth = 2 Line18.BorderColor = vbRed sd = (dac1i * ((150 - 30) / 510)) + 90 If sd > 180 Then sd = 180 If sd < 0 Then sd = 0 sr = Sin(sd / 57.3) R = 1100 A = sr * R B = Sqr((R * R) - (A * A)) If sd <= 90 Then Line17.X1 = (1000 - B) + 400
If ((sd > 90) And (sd <= 180)) Then Line17.X1 = 1400 + B
Line17.Y1 = (1000 - A) + 400 Line17.X2 = 1400
Line17.Y2 = 1400
'Tampilan jarum meter2
adc1i = 0
Line18.BorderWidth = 2 Line18.BorderColor = vbBlue
sd = (adc1 * ((150 - 30) / 300)) + 30
If sd < 0 Then sd = 0 sr = Sin(sd / 57.3) R = 1100 A = sr * R B = Sqr((R * R) - (A * A)) If sd <= 90 Then Line18.X1 = (1000 - B) + 400
If ((sd > 90) And (sd <= 180)) Then Line18.X1 = 1400 + B Line18.Y1 = (1000 - A) + 400 Line18.X2 = 1400 Line18.Y2 = 1400 'Inisial value HScroll1.Max = 255 HScroll1.Min = -255 HScroll1.Value = 0 Timer1.Interval = 100 Timer1.Enabled = False HScroll1.Enabled = False
Label1.Caption = "Data output DAC = " + Format(dac1i, "000")
Label23.Caption = "Data input ADC = " + Format(din, "000")
Command2.Enabled = False
'Pengaturan tampilan grafik
Label2.Caption = "Volt/Div = 5 V" Label3.Caption = "Time/Div = 10 s" Form1.Cls gain = 1000 Xa = Shape1.Left Xb = Shape1.Left + Shape1.Width
garisnull = Shape1.Top + (Shape1.Height / 2) UX1 = Xa UY1 = garisnull YX1 = UX1 YY1 = UY1 dx = (Xb - Xa) / 1000 i = 0 Shape1.Left = UX1 Shape1.Width = Xb - Xa Shape1.Height = 2.5 * gain
Shape1.Top = UY1 - (Shape1.Height / 2) sold = 0
snow = 0 f = 0
Line1.Y1 = Shape1.Top + (Shape1.Height / 2) Line1.X2 = Shape1.Left + Shape1.Width
Line1.Y2 = Shape1.Top + (Shape1.Height / 2) Line2.X1 = Shape1.Left
Line2.Y1 = Shape1.Top + 0.25 * gain Line2.X2 = Shape1.Left + Shape1.Width Line2.Y2 = Shape1.Top + 0.25 * gain Line3.X1 = Shape1.Left
Line3.Y1 = Shape1.Top + 0.75 * gain Line3.X2 = Shape1.Left + Shape1.Width Line3.Y2 = Shape1.Top + 0.75 * gain Line4.X1 = Shape1.Left
Line4.Y1 = Shape1.Top + 1.75 * gain Line4.X2 = Shape1.Left + Shape1.Width Line4.Y2 = Shape1.Top + 1.75 * gain Line5.X1 = Shape1.Left
Line5.Y1 = Shape1.Top + 2.25 * gain Line5.X2 = Shape1.Left + Shape1.Width Line5.Y2 = Shape1.Top + 2.25 * gain
Line6.X1 = Shape1.Left + (1 * (Shape1.Width / 10)) Line6.Y1 = Shape1.Top
Line6.X2 = Shape1.Left + (1 * (Shape1.Width / 10)) Line6.Y2 = Shape1.Top + Shape1.Height
Line7.X1 = Shape1.Left + (2 * (Shape1.Width / 10)) Line7.Y1 = Shape1.Top
Line7.X2 = Shape1.Left + (2 * (Shape1.Width / 10)) Line7.Y2 = Shape1.Top + Shape1.Height
Line8.X1 = Shape1.Left + (3 * (Shape1.Width / 10)) Line8.Y1 = Shape1.Top
Line8.X2 = Shape1.Left + (3 * (Shape1.Width / 10)) Line8.Y2 = Shape1.Top + Shape1.Height
Line9.X1 = Shape1.Left + (4 * (Shape1.Width / 10)) Line9.Y1 = Shape1.Top
Line9.X2 = Shape1.Left + (4 * (Shape1.Width / 10)) Line9.Y2 = Shape1.Top + Shape1.Height
Line10.X1 = Shape1.Left + (5 * (Shape1.Width / 10)) Line10.Y1 = Shape1.Top
Line10.X2 = Shape1.Left + (5 * (Shape1.Width / 10)) Line10.Y2 = Shape1.Top + Shape1.Height
Line11.X1 = Shape1.Left + (6 * (Shape1.Width / 10)) Line11.Y1 = Shape1.Top
Line11.X2 = Shape1.Left + (6 * (Shape1.Width / 10)) Line11.Y2 = Shape1.Top + Shape1.Height
Line12.X1 = Shape1.Left + (7 * (Shape1.Width / 10)) Line12.Y1 = Shape1.Top
Line12.X2 = Shape1.Left + (7 * (Shape1.Width / 10)) Line12.Y2 = Shape1.Top + Shape1.Height
Line13.X1 = Shape1.Left + (8 * (Shape1.Width / 10)) Line13.Y1 = Shape1.Top
Line13.X2 = Shape1.Left + (8 * (Shape1.Width / 10)) Line13.Y2 = Shape1.Top + Shape1.Height
Line14.X1 = Shape1.Left + (9 * (Shape1.Width / 10)) Line14.Y1 = Shape1.Top
Line14.X2 = Shape1.Left + (9 * (Shape1.Width / 10)) Line14.Y2 = Shape1.Top + Shape1.Height
End Sub
Private Sub Option1_Click()
MSComm1.CommPort = 1
End Sub
Private Sub Option2_Click()
MSComm1.CommPort = 2
End Sub
Private Sub Option3_Click()
MSComm1.CommPort = 3
End Sub
Private Sub Option4_Click()
MSComm1.CommPort = 4
End Sub
Private Sub Timer1_Timer()
'Mengeluarkan data ke DAC
dac1i = HScroll1.Value dac2i = HScroll1.Value
If dac1i >= 0 Then dac1s = "+" & Format(dac1i, "000")
If dac1i < 0 Then dac1s = Format(dac1i, "000")
If dac2i >= 0 Then dac2s = "+" & Format(dac2i, "000")
If dac2i < 0 Then dac2s = Format(dac2i, "000") dacout = "D" & dac1s & dac2s
Label34.Caption = dacout
MSComm1.Output = dacout 'mengirimkan data DAC
MSComm1.Output = "A0" 'membaca data ADC
Label1.Caption = "Analog output Ch1 = " + dac1s
'Membaca data masukan ADC
If MSComm1.InBufferCount > 0 Then
d1 = MSComm1.Input d2 = Mid(d1, 2, 3) adc1i = Val(d2)
End If
'Tampilan jarum meter1
Line17.BorderWidth = 2 Line17.BorderColor = vbRed sd = (dac1i * ((150 - 30) / 510)) + 90 If sd > 180 Then sd = 180 If sd < 0 Then sd = 0 sr = Sin(sd / 57.3) R = 1100 A = sr * R B = Sqr((R * R) - (A * A)) If sd <= 90 Then Line17.X1 = (1000 - B) + 400
If ((sd > 90) And (sd <= 180)) Then Line17.X1 = 1400 + B
Line17.Y1 = (1000 - A) + 400 Line17.X2 = 1400
Line17.Y2 = 1400
'Tampilan jarum meter2
Line18.BorderWidth = 2 Line18.BorderColor = vbBlue sd = (adc1i * ((150 - 30) / 300)) + 30 If sd > 180 Then sd = 180 If sd < 0 Then sd = 0 sr = Sin(sd / 57.3) R = 1100 A = sr * R B = Sqr((R * R) - (A * A)) If sd <= 90 Then Line18.X1 = (1000 - B) + 400
If ((sd > 90) And (sd <= 180)) Then Line18.X1 = 1400 + B
Line18.Y1 = (1000 - A) + 400 Line18.X2 = 1400
Line18.Y2 = 1400
'Menggambar 2 grafik dalam satu layar dengan data masukan Unow dan Ynow
Unow = dac1i / 255 Ynow = adc1i / 510 UX2 = Xa + (i * dx)
UY2 = garisnull - (Unow * gain)
If UY2 < Shape1.Top Then UY2 = Shape1.Top Line (UX1, UY1)-(UX2, UY2), vbRed
YX2 = Xa + (i * dx)
YY2 = garisnull - (Ynow * gain)
If YY2 > Shape1.Top + Shape1.Height Then YY2 = Shape1.Top + Shape1.Height
Line (YX1, YY1)-(YX2, YY2), vbBlue UX1 = UX2 UY1 = UY2 YX1 = YX2 YY1 = YY2 Uold = Unow Yold = Ynow sold = snow i = i + 1 If i > 1000 Then i = 0 Form1.Cls UX1 = Xa UY1 = garisnull YX1 = UX1 YY1 = UY1 End If End Sub
9.4.3. Water Level Control