• Tidak ada hasil yang ditemukan

Input Output Analog Fungsi :

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

Dokumen terkait