Abstrak -- Secara umum alat uji tarik memiliki fungsi untuk mengetahui ketahanan suatu bahan terhadap pengenaan gaya tarik tertentu, kekuatan material yang diuji salah satunya dapat direpresentasikan melalui parameter deformasi lebar material setelah diberikan gaya tertentu. Adapun setiap instrumen yang digunakan sebagai perangkat pengukuran haruslah dilakukan kalibrasi sebelum digunakan hal ini juga diperlukan untuk meningkatkan akurasi suatu sistem pengukuran. Atas dasar hal tersebut dibuatlah sebuah program berbasis C# yang terintegrasi dengan PC untuk melkukan tugas sebagai autokalibrator sekaligus menjalankan fungsi antarmuka dengan pengguna dalam proses pengukuran. Sistem perangkat lunak yang digunakan memiliki konstruksi 2 mode kerja (mode pengukuran dan mode kalibrasi). Pada mode kalibrasi sistem dapat dengan otomatis menyimpan hasil kalibrasi memetakan karakteristik dalam fungsi matematis dan memetakan residual error yang umum terjadi pada nilai defleksi tertentu. Berdasarkan data yang tersimpan secara eksternal tersebut sistem dapat memperbaiki hasil pengukuran hingga sedekat mungkin dengan nilai aktual. Setelah diujikan dengan data dummy diperoleh sistem dapat bekerja optimum. Keyword: Sistem Instrumentasi dan pengukuran, SGDVRT Microstrain, Sigma Delta Data Concerter ADU100.
PENDAHULUAN Secara umum alat uji tarik memiliki fungsi untuk mengetahui ketahanan suatu bahan terhadap pengenaan gaya tarik tertentu, kekuatan material yang diuji salah satunya dapat direpresentasikan melalui parameter deformasi lebar material setelah diberikan gaya tertentu. Parameter deformasi lebar material memiliki besaran yang relatif sangat kecil hingga menembus ketelitian mikron, Oleh karena itu digunakan instrument pengukuran panjang dengan ketelitian yang dapat mengakomodasi akurasi pada tingkat mikron. Salah satu instrumen yang mengakomodasi hal tersebut ialah sensor defleksi berbasis LVDT (Linear Variable Distance Transformer). Sebagaiman instrumen ukur lainnya instrument ini memiliki keterbatasan dari segi keakuratan maupun kepresisiannya. Untuk itu dibutuhkan suatu sistem (Integrasi perangkat keras dengan perangkat lunak) yang dapat mengakomodasi tugas autokalibrasi sekaligus mengetahui kecendrungan residual error dengan harapan nilai pengukuran dapat sedekat mungkin dengan nilai aktual. sebagai
dilakukan kalibrasi sebelum digunakan hal ini juga diperlukan untuk meningkatkan akurasi suatu sistem pengukuran. Namun pada kasus pengukuran defleksi dengan menggunakan perangkat sensor SG DVRT strokes 38mm kalibrasi dilakukan secara manual sedangkan untuk menghasilkan hasil yang baik kalibrasi membutuhkan sampel pengukuran yang besar. Atas dasar hal tersebut dibuatlah sebuah program berbasis C# yang terintegrasi dengan PC untuk melkukan tugas sebagai autokalibrator sekaligus menjalankan fungsi antarmuka dengan pengguna dalam proses pengukuran. Pada laporan ini akan dibahas mengenai proses perancangan, sistem kerja program, dan hasil pengukuran dengan data dummy hasil kalibrasi sensor.
Adapun setiap instrumen yang digunakan perangkat pengukuran haruslah 1
TINJAUAN PUSTAKA Sistem autokalibrasi yang dirancang dengan perangkat lunak visual c# ini dirancang berdasarkan studi literatur terhadap karakteristik instrumen yang digunakan, yaitu. a. Karakteristik Sensor SGDVRT stroke 38mm. Spesifikasi Elektrik:
Karakteristik demod DC2, dapat didekati dengan karakteristik linear dan karakteristik Polynomial Karakteristik uji approksimasi linear hasil kalibrasi sensor SGDVRT 38mm strokes (grafik dapat dilihat pada lampiran) Dengan persamaan linearisasi ialah D = M*V + OS Dengan D: Displacement (mm) M: Slope V: Read Voltage (V) OS: Offset quantities Diperoleh M = 1.03357; OS = -2.59242 Karakteristik sensor dengan approksimasi polynomial (grafik dapat dilihat pada lampiran) Polynomial fit Model D = A0 + A1* x + A2* x2 +A3* x3 D : Stroke Displacenment (mm) Ai : ith order Polynomial Coeficient X : Sensor output (V)
Spesifikasi Mekanik sensor SG DVRT strokes 38mm
b. Karakteristik Demod DC2 micro DB-9 (Signal Conditioning)
c. Karakteristik ADU 100 Data converter Fitur umum ADU 100 Delta Sigma Data Converter, yaitu: 1. 3, ISOLATED (3000V) 16-Bit Analog Inputs. 2. Programmable PGA gives full scale input ranges from 0-19mV to +/-10V 3. Low noise Sigma Delta A/D 4. Internal self-calibration function for true 16-bit resolution 5. 2.5000V and 5.00V reference outputs to allow direct connection of strain gauges.
2
6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
High quality Aromat PA-series relay offers superior performance. 4 Digital I/O Lines 1, N. O. relay contact output rated 5.0A @ 120VAC, 5.0A @ 30VDC Programmable watchdog functions. Bi-colour LED status indicator. Self-resetting, fused 5V output Auxiliary RS232 port for connecting legacy RS232 devices. ( ADR series ) High quality cage-clamp type terminal blocks. Uses standard HID drivers included with Windows 98SE,2000,XP Mini-driver ( DLL ) provided for use with VB,VC, LabVIEW and TestPoint Programming examples and sample code included for VB, Visual C++ Four, 16-bit event counters ( one high speed capable ) Programmable de-bounce setting for event counters. Bus Powered, No external power supply required. Meets IEC61000-4-2 ESD protection for USB port. Available in enclosure or as PCB only.
Sedangkan agenda kegiatan yang penyusun buat berdasarkan kerangka tersebut secara lebih detail dapat digambarkan sebagai berikut. Kegiatan 1
2
KEGIATAN DAN METODE Timeline kegiatan kerja praktik ini secara umum dibagi menjadi 4 minggu kerja yang terdiri dari a. 1 minggu pertama mempelajari hardware penyusun sistem dari datasheet b. 2 minggu implementasi dan realisasi sistem c. 1 minggu terakhir pengerjaan laporan
3
1
Minggu ke2 3 4
Mempelajari spesifikasi Hardware A Mempelajari spesifikasi Sigma Delta data Konverter 16bit ADU100 ONTRAK B Mempelajari spesifikasi sensor Microstrain SGDVRT 38mm strokes C Mempelajari spesifikasi sistem sensor yang terdiri dari sensor SGDVRT dengan Demod DC2 micro DB9 D Melakuakan analisis terhadap linearitas sensor berdasarkan Data hasil kalibrasi manual Implementasi dan realisasi sistem A Melakukan perancangan konfigurasi perangkat keras pengaturan aliran data dari perangkat sensor dalam data akuisisi B Melakukan perancangan perangkat lunak dalam bahasa C#, sebagai software utama data Akuisisi dan sebagai autokalibrator. C Implemntasi kalibras i sensor secara auto dilakukan via software yang telah dibuat dan percobaan pengukuran dengan faktor koreksi dari software yang telah diperoleh dari data autokalibrasi Penyusunan Laporan
3
ANALISIS Analisis dari kegiatan ini meliputi 2 bentuk yaitu 1. Analisis pra-perancangan Sebelum melakukan perancangan dilakukan analisis terhadap perangkat keras yang akan digunakan, terutama pada fitur fitur elektrik yang di akomodasi oleh sistem. Analisis terhadap fasilitas power supply ke sensor, berdasarkkan datasheet sensor SGDVRT ynag telah terintegrasi dengan DEMOD DC2 microDB9 membutuhkan power supply DC dengan tegangan range [6,16]V. dengan keluaran sensor berada pada range tegangan single ended [0,5]V. Berdasarkan hal tersebut fitur yang akan digunakan pada DAQ Hardware (ADU 100 ONTRAK) antara lain 1. External Power Supply AC TO DC Adaptor yang mengakomodasi tegangan 12V. Untuk kebutuhan sensor dan perangkat ADU100. 2. Input ADC dengan range tegangan input [0,5]V yaitu pada pin AN2 Analog Input [0,10]V dengan Kode akses USB comm “RUC22”: RUCxy : standard command untuk mengakses data Hexadecimal (Digital) input analog {x: pin; y :gain}, 3. Digunakan pula konfigurasi pengukuran secata single ended dengan menghubungkan PORT LCOM dengan AGND sebagai referensi ADC (lihat lampiran A) Dari sisi software yang akan dibuat dilakuka n analisis fasilitas apa saja yang harus dimiliki software yang akan direalisasikan. Sebagaimana spesifikasi yang telah penyusun paparkan. Beberapa hal penting yang harus direalisasikan dalam fitur software tersebut antara lain 1. USB Communication via USB cable 2. Dual Operation Mode meliputi mode pengukuran dan mode kalibrasi. Pada mode kalibrasi dibagi menjadi 2 tugas namun dalam sampling data yang
dilakukan secara simultan yaitu tugas kalibrasi error residual dan tugas kalibrasi karakteristik instrument (dengan 2 pilihan approximasi yaitu linear dan polynomial orde 3). 3. Plotting fungsi karakteristik sensor. 4. Autosave pada file eksternal untuk menyimpan koefisien persamaan hasil approksimasi karakteristik instrumen (Sensor SGDVRT) 5. Adapun tugas kalibrasi error residual berfungsi untuk melakukan tracing error residual pada tiap tiap kala defelksi yang teramati. Nilai Error residual ini akan diproses secara statistik sebagai faktor perbaikan pembacaan sensor.
HASIL PENGUJIAN ALAT Kerja Praktik ini pada akhirnya menghasilkan suatu produk software autokalibrasi dan pengukuran oleh instrumen Sensor SGDVRT Microstrain. Adapun hasilnya dapat dijabarkan sebagai berikut: A. Deskripsi Sistem Konfigurasi dan prinsip kerja sistem: {block Diagram konfigurasi sistem perangkat keras dan perangkat lunak pada Lampiran} Tampilan Software {lihat lampiran B} B. Uji Kinerja Sistem dengan Dummy Calibration Data. Pengujian ini dilakukan dengan menggunakan data hasil kalibrasi manual sebelumnya dengan persamaan approksimasi yang telah diperoleh dari tinjauan pustaka. {lampiran C} Berdasarkan pengujian tersebut software berhasil melakukan auto kalibrasi dengan pendekatan 6 data. C. Uji Kinerja Sistem Pasca – Kalibrasi Pada proses kalibrasi ulang dilakukan pendekatan polynomials dan linear untuk memperoleh fungsi karakteristik sensor setelah dilakukan kalibrasi 4
dengan perangkat (MITUTOYO 521Series) seperti dilampirkan pada {lampiran C. Point Calibration mode}. diperoleh data tracing error residual pada interval [0-1]mm sebagai berikut Table 1. Tracing Error Residual berdasarkan Fungsi Approximasi Karakteristik Sensor Deflection(mm)
Residual error(mm)
0
0.01125626
0.002
0.01091371
0.004
0.01073405
0.006
0.01058378
0.008
0.01048733
0.01
0.01041265
0.012
0.01032514
0.014
0.01020423
0.016
0.01012253
0.018
-0.000710328
0.02
0.000991776
0.022
0.00098536
0.024
0.000979009
0.026
0.000972059
0.028
0.000973194
0.03
0.000975835
0.032
0.000976678
0.034
0.000983096
0.036
0.000980247
0.038
0.000974572
0.04
0.000973256
0.042
0.000971744
0.044
0.000963324
0.046
0.000959252
0.048
0.000948694
0.1
0.000837599
0.102
0.000813822
0.102
0.000813719
0.104
0.000818752
0.106
0.000819606
0.108
0.00081666
0.11
0.000812567
0.112
0.000807704
0.124
0.000783902
0.13
0.000761468
0.136
0.000750873
0.142
0.000740842
0.148
0.000728487
0.2
0.000622058
0.206
0.000598351
0.212
0.000589938
0.218
0.000570815
0.224
0.000553764
0.23
0.000539387
0.236
0.000522375
0.242
0.000502989
0.248
0.000483013
0.3
0.00357084
0.306
0.00338578
0.312
0.0031835
0.318
0.00302135
0.324
0.0028498
0.33
0.0027523
0.336
0.00262316
0.342
0.00246617
0.348
0.00180222
0.4
9.00E-04
0.406
7.43E-04
0.412
5.46E-04
0.418
3.54E-04
0.424
1.95E-04
0.43
2.34E-03
0.436
-1.27E-03
0.442
-3.11E-03
0.448
-4.17E-05
0.5
-0.00184957
0.506
-0.00203998
0.512
-0.00222331
0.512
-0.00222331
0.518
-0.00237855
0.524
-0.00254694
0.53
-0.00270162
0.536
-0.0029089
0.542
-0.000312185
0.548
-0.000334032
5
0.6
-0.000484617
0.606
-0.000501199
0.612
-0.000520277
0.618
-0.000541373
0.624
-0.000562934
0.63
-0.000582959
0.636
-0.000596823
0.642
-0.000614787
0.648
-0.000632663
0.7
-0.000793889
0.706
-0.000816927
0.712
-0.000838378
0.718
-0.000857179
0.724
-0.000876448
0.73
-0.00089579
0.736
-0.000918715
0.742
-0.000943926
0.748
-0.000961329
0.8
-0.001125617
0.806
-0.001146261
0.812
-0.001167591
0.818
-0.001188229
0.824
-0.001206826
0.83
-0.001226154
0.836
-0.001250715
0.842
-0.00127319
0.848
-0.001295424
0.9
-0.001442365
0.906
-0.001448861
0.912
-0.00145659
0.918
-0.001472551
0.924
-0.001484632
0.93
-0.001496716
0.936
-0.001512903
0.942
-0.001525786
0.948
-0.001536914
1
-0.00171554
0.012] mm. Hal ini memenuhi ekspektasi dimana akurasi sensor haruslah berada pada level micron (10-3 cm).
D. Future Work Pada alat Uji tarik.tidak hanya dibutuhkan satu sensor sebagai indikator kerjanya, Tantangan kedepan ialah bagaimana mengintegrasikan semua sistem sensor dan autokalibrasi untuk tiap sensor sekaligus kendali motor sebagai aktuato Utama pemberi gaya pada alat Uji tarik ini
KESIMPULAN Berdasarkan Data hasil pengujian fungsionalitas perangkat lunak antarmuka pengukuran dan autokalibrasi diketahui bahwa sistem dapat bekerja secara optimum dengan perangkat pengukuran defleksi (Microstrain SGDVRT) dengan level keakuratan micron.
REFERENSI
[Simon McBeath (2002). Competition Car Data Logging: A Practical Handbook . J. H. Haynes & Co. ISBN 1-85960-653-9. Simon S. Young (2001). Computerized Data Acquisition and Analysis for the Life Sciences. Cambridge University Press. ISBN 0-521-56570-7. Multhauf, Robert P. (1961), The Introduction of Self-Registering Meteorological Instruments, Washington, D.C.: Smithsonian Institution, pp. 95–116 United States National Museum, Bulletin 228. Contributions from The Museum of History and Technology: Paper 23. Available from Project Gutenberg. Anderson, Norman A. (1998). Instrumentation for Process Measurement and Control (3 ed.). CRC Press. pp. 8–10. ISBN 0-84939871-1.
Berdasarkan hasil tracing tersebut dapat dilihat bahwa nilai residual error memiliki ange [-0.012;
6
LAMPIRAN Lampiran A. Approksimasi karakteristik linear sensor SGDVRT
Karakteristik residual Error sensor SGDVRT untuk approximasi linear
Approksimasi karakteristik Polynomials sensor SGDVRT
7
Karakteristik residual Error sensor SGDVRT untuk approximasi polynomials
8
Lampiran B System Design and Configuration
Digital Signal Via USB communication
Output Signal (V)
Set Up Set Point Calibartion
Micron level accuracy
USB Communication to ADU100, Synchronized Internal Sampling and Clocking,
Measuring Mode
Calibration Mode
Approximation Characteristic Eqs
To Database File.txt
Linear Approx
Measurement Result
Polynomial Approx
Residual error Handler To error Handle
Update Formula Formula
Open Device
Err =Act Val – Approx Data To Excell DataBase
Sampling
Read Signal
ADU100
Closed Device
9
Konfigurasi Hardware
Pengujian pembacaan Data
10
Konfigurasi Hardware saat dilakukan kalibrasi
Lampiran C. Tampilan Program dan Demo Program Tampilan Awal Program
11
Calibration Process
Penyimpanan data calibrasi pada File .xls Elsternal pada direktori program
12
Dari beberapa data kalibrasi dilakukan regresi dan proses polyfit internal program untuk menghasilkan karakteristik sensor (linear dan polynomial) a. Fungsi approximasi karakteristik linear sensor
b. Fungsi approximasi karakteristik 3rd order polynomials
13
Residual Error Tracing
Mode Pengukuran untuk sampling dan trial pengukuran awal
14
Integrasi pengukuran berdasarkan data dummy gaya yang diberikan pada alat uji tarik
Lampiran D : Source Code using System; using System.Collections.Generic; using System.Timers;
15
using System.Deployment; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Text; using System.Linq; using MySql.Data.MySqlClient; using System.Configuration; // ADU needs to interoperate with the legacy DLL using System.Runtime.InteropServices; using System.IO; namespace Test_SGDVRT { using Statistics; public partial class Form1 : System.Windows.Forms.Form { private IntPtr hAdu; public ulong ulWritten; int counter; int counterm; int counterg; double[] C = null; double[] C1 = null; double[] C2 = null; double[] C3 = null; double VoltRataan; double Voltdum; double erravg; double converttomm; double errdeff; Bitmap graphlinear; Bitmap graphpoly; Bitmap grapherr; Bitmap graphforce; Graphics gpb; Graphics gpb1; Graphics gpb2; Graphics gpb3; int Ax = 0; int Ay = 0; int Xo = 0; int Yo = 0; int pixel = 42; float load_div = 1; float defleksi_div = 0.5f; Boolean Sm = false; Boolean Sc = false; Boolean Sg = false; double Force; public Form1() { InitializeComponent(); usenform.Checked = false; pictureBox1.Width = 562; pictureBox2.Width = 562;
16
pictureBox3.Width = 562; pictureBox7.Width = 562; pictureBox1.Height = 294; pictureBox2.Height = 294; pictureBox3.Height = 294; pictureBox7.Height = 562; Sampling.Enabled = false; Sstop.Enabled = false; radioButton1.Checked = true; counter = 0; counterm = 0; dataGridView1.Rows.Add(); dataGridView1.Rows[counter].Cells[0].Value = SetPointCal.Text; dataGridView1.Rows[counter].Cells[1].Value = counter.ToString(); dataGridView1.Rows[counter].Cells[2].Value = String.Format("{0:0.000}", Volt.ToString()); dataGridView1.Rows[counter].Cells[3].Value = String.Format("{0:0.000}", converttomm.ToString()); dataGridView2.Rows.Add(); dataGridView2.Rows[counterm].Cells[0].Value = counterm.ToString(); dataGridView2.Rows[counterm].Cells[1].Value = String.Format("{0:0.000}", converttomm.ToString()); dataGridView8.Rows.Add(); dataGridView8.Rows[counterg].Cells[0].Value = String.Format("{0:0.000}", Force.ToString()); dataGridView8.Rows[counterg].Cells[1].Value = String.Format("{0:0.000}", converttomm.ToString()); toolStripStatusLabel2.Visible = true; toolStripStatusLabel1.Visible = true; graphlinear = new Bitmap(pictureBox1.Width, pictureBox1.Height); pictureBox1.Image = graphlinear; gpb = Graphics.FromImage(graphlinear); gpb.Clear(Color.Black); graphpoly = new Bitmap(pictureBox2.Width, pictureBox2.Height); pictureBox2.Image = graphpoly; gpb1 = Graphics.FromImage(graphpoly); gpb1.Clear(Color.Black); grapherr = new Bitmap(pictureBox3.Width, pictureBox3.Height); pictureBox3.Image = grapherr; gpb2 = Graphics.FromImage(grapherr); gpb2.Clear(Color.Black); graphforce = new Bitmap(pictureBox7.Width, pictureBox7.Height); pictureBox7.Image = graphforce; gpb3 = Graphics.FromImage(graphforce); gpb3.Clear(Color.Black); comboBox1.Enabled = false; DrawPICTURE1(); DrawPICTURE2(); DrawPICTURE3(); DrawPICTURE4(); } /// <summary> /// Clean up any resources being used. /// protected override void Dispose(bool disposing) { if (disposing) {
17
if (components != null) { components.Dispose(); } } base.Dispose(disposing); } [DllImport("aduhid.dll")] public static extern IntPtr OpenAduDevice(UInt32 iTimeout); [DllImport("aduhid.dll")] public static extern bool WriteAduDevice(IntPtr hFile, [MarshalAs(UnmanagedType.LPStr)]string lpBuffer, UInt32 nNumberOfBytesToWrite, out UInt32 lpNumberOfBytesWritten, UInt32 iTimeout); [DllImport("aduhid.dll")] public static extern bool ReadAduDevice(IntPtr hFile, StringBuilder lpBuffer, UInt32 nNumberOfBytesToRead, out UInt32 lpNumberOfBytesRead, UInt32 iTimeout); [DllImport("aduhid.dll")] public static extern void CloseAduDevice(IntPtr hFile); //Boolean ScanRun = false; Boolean ScanStop = false; string voltbuf; double Volt; /// <summary> /// The main entry point for the application. /// /// private void buttonstart_Click(object sender, EventArgs e) { toolStripStatusLabel1.Text = "Scan"; Sstop.Enabled = true; Sampling.Enabled = true; Update(); //ScanRun = true; bool bRC = false; buttonstart.Enabled = true; buttonStop.Enabled = true; const String comm1 = "RUC22"; //const String comm2 = "RUN21"; uint length = (uint)comm1.Length; uint RLength = 7; while (true) { if (ScanStop) break; hAdu = OpenAduDevice(500); Sampling.Enabled = true; Sstop.Enabled = true; buttonstart.Enabled = false; bRC = false;
18
uint uiWritten = 0xdead; bRC = WriteAduDevice(hAdu, comm1, length, out uiWritten, 500); bRC = false; uint uiRead = 0; StringBuilder sBuffer = new StringBuilder(8); bRC = ReadAduDevice(hAdu, sBuffer, RLength, out uiRead, 500); voltbuf = sBuffer.ToString(); double result = 0; if (double.TryParse(voltbuf, out result)) { Volt = result * 5 / 65536; } if (radioButton1.Checked == true) { if (usenform.Checked == true) { converttomm = (Volt - Convert.ToDouble(C[0])) / (Convert.ToDouble(C[1])); } else { converttomm = (Volt * 1.03350) - 2.59242; } } if (radioButton2.Checked == true) { if (usenform.Checked == true) { if (C3 == null) { string filePath = string.Format("Coba2.txt"); string[] textData = System.IO.File.ReadAllLines(filePath); string[] headers = textData[0].Split('\t'); DataTable dataTable1 = new DataTable(); //dataGridView4.Rows.Add(); foreach (string header in headers) { dataTable1.Columns.Add(header, typeof(string), null); } for (int i = 1; i < textData.Length; i++) dataTable1.Rows.Add(textData[i].Split('\t')); //Set the DataSource of DataGridView to the DataTable dataGridView7.DataSource = dataTable1; double[] y = new double[dataGridView7.Rows.Count 1]; double[] xi = new double[dataGridView7.Rows.Count - 1]; double[,] x = new double[4, dataGridView7.Rows.Count - 1]; double[] w = new double[dataGridView7.Rows.Count 1]; for (int i = 0; i < dataGridView7.Rows.Count - 1; i++) {
19
if (dataGridView7.Rows[i].Cells[0].Value != null) { x[0, i] = 1; double xx; //double xx = double.Parse(dataGridView5.Rows[i].Cells[0].Value.ToString()); if (double.TryParse(dataGridView7.Rows[i].Cells[1].Value.ToString(), out xx)) { xx = xx * 1; } double term = xx; for (int j = 1; j <= 3; j++) { x[j, i] = term; term *= xx; } double ydum; //y[i] = double.Parse(dataGridView5.Rows[i].Cells[1].Value.ToString()); if (double.TryParse(dataGridView7.Rows[i].Cells[0].Value.ToString(), out ydum)) { y[i] = ydum * 1; } w[i] = 1; } } LinearRegression linReg3 = new LinearRegression(); linReg3.Regress(y, x, w); C3 = linReg3.C; converttomm = ((Math.Pow(Volt, 3)) * C3[3]) + (C3[2] * (Math.Pow(Volt, 2))) + (C3[1] * (Volt)) + C3[0]; } else { converttomm = ((Math.Pow(Volt, 3)) * C3[3]) + (C3[2] * (Math.Pow(Volt, 2))) + (C3[1] * (Volt)) + C3[0]; } } else { converttomm = -((Math.Pow(Volt, 3)) * 0.0236268) + (0.302252 * (Math.Pow(Volt, 2))) + (0.606116 * (Volt)) - 2.3328; } } textBoxTampil.Text = String.Format("{0:0.f6}", Volt.ToString()); textBox1.Text = String.Format("{0:0.f6}", converttomm.ToString()); Application.DoEvents(); } Application.DoEvents(); Update(); return; } private void buttonStop_Click(object sender, EventArgs e) { ScanStop = true;
20
buttonstart.Enabled = true; Sampling.Enabled = false; Sstop.Enabled = false; toolStripStatusLabel1.Text = "Scan Ended..."; CloseAduDevice(hAdu); Application.DoEvents(); return; } private void timer1_Tick(object sender, EventArgs e) { if (Sm == true) { dataGridView2.Rows.Add(); dataGridView2.Rows[counterm].Cells[0].Value = counterm.ToString(); dataGridView2.Rows[counterm].Cells[1].Value = String.Format("{0:0.000}", converttomm.ToString()); counterm++; } else if(Sc == true) { dataGridView1.Rows.Add(); dataGridView1.Rows[counter].Cells[0].Value = SetPointCal.Text; dataGridView1.Rows[counter].Cells[1].Value = counter.ToString(); dataGridView1.Rows[counter].Cells[2].Value = String.Format("{0:0.000}", Volt.ToString()); dataGridView1.Rows[counter].Cells[3].Value = String.Format("{0:0.000}", converttomm.ToString()); counter++; } else if (Force < 250.00 && Sg == true) { Force = counterg * 12.5; if (comboBox1.SelectedItem.ToString() == "ADU100") { dataGridView8.Rows.Add(); dataGridView8.Rows[counterg].Cells[0].Value = String.Format("{0:0.000}", Force.ToString()); dataGridView8.Rows[counterg].Cells[1].Value = String.Format("{0:0.000}", converttomm.ToString()); } else if (comboBox1.SelectedItem.ToString() == "Dummy Data") { dataGridView8.Rows.Add(); dataGridView8.Rows[counterg].Cells[0].Value = String.Format("{0:0.000}", Force.ToString()); dataGridView8.Rows[counterg].Cells[1].Value = String.Format("{0:0.000}", converttomm.ToString()); } counterg++; } if (Force == 250) { timer1.Stop(); } dataGridView2.Visible = true;
21
dataGridView1.Visible = true; toolStripStatusLabel2.Text = "Sampling"; double res = 0; if (double.TryParse(SetPointCal.Text, out res)) { errdeff = errdeff + (converttomm-res); Voltdum = Voltdum + Volt; } return; } private void Sampling_Click(object sender, EventArgs e) { errdeff = 0; erravg = 0; Voltdum = 0; VoltRataan = 0; int buffinv = 0; if (int.TryParse(textBox8.Text, out buffinv)) { timer1.Interval = buffinv; } toolStripStatusLabel2.Visible = true; toolStripStatusLabel2.Text = "Sampling Begin..."; timer1.Start(); return; } private void Sstop_Click(object sender, EventArgs e) { toolStripStatusLabel2.Text = "Sampling Ended"; timer1.Stop(); erravg = errdeff /((double)counter) ; VoltRataan = Voltdum / ((double)counter); dataGridView1.Rows.Add(); dataGridView1.Rows[counter].Cells[0].Value = "Error average"; dataGridView1.Rows[counter].Cells[1].Value = erravg.ToString(); return; } private void ToCsV(DataGridView dGV, string filename) { string stOutput = ""; // Export titles: string sHeaders = ""; for (int j = 0; j < dGV.Columns.Count; j++) sHeaders = sHeaders.ToString() + Convert.ToString(dGV.Columns[j].HeaderText) + "\t"; stOutput += sHeaders + "\r\n"; // Export data. for (int i = 0; i < dGV.RowCount - 1; i++) { string stLine = ""; for (int j = 0; j < dGV.Rows[i].Cells.Count; j++) stLine = stLine.ToString() + Convert.ToString(dGV.Rows[i].Cells[j].Value) + "\t"; stOutput += stLine + "\r\n"; } Encoding utf16 = Encoding.GetEncoding(1254);
22
byte[] output = utf16.GetBytes(stOutput); FileStream fs = new FileStream(filename, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); bw.Write(output, 0, output.Length); //write the encoded file bw.Flush(); bw.Close(); fs.Close(); } private void Export_Click(object sender, EventArgs e) { //TextWriter tw = new StreamWriter("Coba.txt", true); if (C != null || C1 != null || C2 != null || C3 != null) { if (radioButton1.Checked == true) { File.AppendAllText("Coba.txt", SetPointCal.Text + '\t' + erravg.ToString() + Environment.NewLine); } else if (radioButton2.Checked == true) { File.AppendAllText("Coba3.txt", SetPointCal.Text + '\t' + erravg.ToString() + Environment.NewLine); } } else { File.AppendAllText("Coba1.txt", SetPointCal.Text + '\t' + erravg.ToString() + Environment.NewLine); File.AppendAllText("Coba2.txt", Environment.NewLine + SetPointCal.Text + '\t' + VoltRataan.ToString()); SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Excel Documents (*.xls)|*.xls"; sfd.FileName = "Calibrate.xls"; if (sfd.ShowDialog() == DialogResult.OK) { //ToCsV(dataGridView1, @"c:\export.xls"); ToCsV(dataGridView1, sfd.FileName); // Here dataGridview1 is your grid view name } } //TextWriter tw2 = new StreamWriter("Coba2.txt", true); Sc = false; } private void SNC_Click(object sender, EventArgs e) { dataGridView1.DataSource = null; dataGridView1.Rows.Clear(); counter = 0; Sc = true; return; } private void UpCal_Click(object sender, EventArgs e) { gpb2.Clear(Color.Black); Ax = pictureBox3.Width; Ay = pictureBox3.Height; Xo = 10;
23
Yo = pictureBox3.Height; var p = new Pen(Color.Yellow, 3); string filePath; if (C != null || C1 != null || C2 != null || C3 != null) { filePath = string.Format("Coba.txt"); } else { filePath = string.Format("Coba1.txt"); } string[] textData = System.IO.File.ReadAllLines(filePath); string[] headers = textData[0].Split('\t'); DataTable dataTable1 = new DataTable(); //dataGridView3.Rows.Add(); foreach (string header in headers) dataTable1.Columns.Add(header, typeof(string), null); for (int i = 0; i < textData.Length; i++) dataTable1.Rows.Add(textData[i].Split('\t')); //Set the DataSource of DataGridView to the DataTable dataGridView3.DataSource = dataTable1; DrawPICTURE3(); double BUFFX; double BUFFY; //Point[] curves = new Point[dataGridView3.RowCount-1]; //int h = 0; for (int m = 1; m < dataGridView3.RowCount; m++) { BUFFX = 2.00*(double)pixel * Convert.ToDouble(dataGridView3.Rows[m].Cells[0].Value); BUFFY = (double)pixel * Convert.ToDouble(dataGridView3.Rows[m].Cells[1].Value) * 100.0; int titikx = Xo + 40+ 5*pixel + ((int)BUFFX); int titiky = Ay - 35 -3*pixel -((int)BUFFY); Rectangle rect = new Rectangle(titikx, titiky, 1, 1); gpb2.DrawRectangle(p, rect); //curves[h] = new Point(titikx, titiky); h++; } //gpb2.DrawCurve(p, curves); pictureBox3.Refresh(); } private void SMeasure_Click(object sender, EventArgs e) { counterm = 0; dataGridView2.DataSource = null; dataGridView2.Rows.Clear(); Sm = true; return; } private void StMeas_Click(object sender, EventArgs e) { Sm = false; SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Excel Documents (*.xls)|*.xls"; sfd.FileName = "Measurement Result.xls"; if (sfd.ShowDialog() == DialogResult.OK) {
24
//ToCsV(dataGridView1, @"c:\export.xls"); ToCsV(dataGridView2, sfd.FileName); // Here dataGridview1 is your grid view name } return; } private void DrawPICTURE4() { gpb3.Clear(Color.Black); Ax Ay Xo Yo
= = = =
pictureBox7.Width; pictureBox7.Height; 10; pictureBox7.Height;
//Draw Text var p = new Pen(Color.Blue, 1); SolidBrush br = new SolidBrush(Color.WhiteSmoke); StringFormat sf = new StringFormat(); sf.FormatFlags = StringFormatFlags.DirectionVertical; //Mengatur ukuran label dan font tulisan Font font = new Font("Arial", 10.0f); gpb3.DrawString("Deformation(mm)", font, br, Xo + 52, 6); // Label - Force gpb3.DrawString("Force[kiloNewton]", font, br, Xo + Ax - 12 * Xo, Ay - 52); // Label - Time Pen mypen = new System.Drawing.Pen(System.Drawing.Color.Green); mypen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; mypen.Color = Color.DarkBlue; mypen.Width = 1.8f; // Label Vertical Ax font = new Font("Arial", 10.0f); for (int i = 0; i < 21; i++) { float buff; buff = (i * defleksi_div) - 3.00f; gpb3.DrawLine(mypen, Xo + 15, Ay - 35 - i * pixel, Ax - 2 * Xo, Ay - 35 - i * pixel); // Horizontal Dot Lines gpb3.DrawString(buff.ToString(), font, br, Xo + 2, Ay - 37 - i * pixel); // Label Minor Horizontal - Force } // Label Horizontal Axis for (float i = 0; i < 11; i += 1) { float buff; buff = (i * 25); gpb3.DrawLine(mypen, Xo + 40 + i * pixel, 7, Xo + 40 + i * pixel, Ay); // Vertical Dot Lines gpb3.DrawString(buff.ToString(), font, br, Xo + 46 + i * pixel, Ay - 20); // Label Minor Horizontal - Time } // Axis Vertical dan Horizontal p = new Pen(Color.Blue, 3);
25
gpb3.DrawLine(p, Xo + 40, 7, Xo + 40, Ay - 7); //Vertical Solid Axis gpb3.DrawLine(p, Xo + 0, Ay - 35 - 6 * pixel, Ax - 2 * Xo, Ay - 35 - 6 * pixel); // Horizontal Solid Axis // Mark Axis p = new Pen(Color.Teal, 3); gpb3.DrawLine(p, Xo + 40, Ay - 47 - 6 * pixel, Xo + 40 , Ay - 17 6 * pixel); //Vertikal gpb3.DrawLine(p, Xo + 30, Ay - 35 - 6 * pixel, Xo + 55 , Ay - 35 6 * pixel); //Horizontal pictureBox7.Refresh(); } private void DrawPICTURE3() { gpb2.Clear(Color.Black); Ax Ay Xo Yo
= = = =
pictureBox3.Width; pictureBox3.Height; 10; pictureBox3.Height;
//Draw Text var p = new Pen(Color.Blue, 1); SolidBrush br = new SolidBrush(Color.WhiteSmoke); StringFormat sf = new StringFormat(); sf.FormatFlags = StringFormatFlags.DirectionVertical; //Mengatur ukuran label dan font tulisan Font font = new Font("Arial", 10.0f); gpb2.DrawString("Residual Error(mm)", font, br, Xo + 52 + 5 * pixel, 6); // Label - Force gpb2.DrawString("Defleksi[mm]", font, br, Xo + Ax - 9 * Xo, Ay 52); // Label - Time Pen mypen = new System.Drawing.Pen(System.Drawing.Color.Green); mypen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; mypen.Color = Color.DarkBlue; mypen.Width = 1.8f; // Label Vertical Axis font = new Font("Arial", 10.0f); for (float i = 0; i < 21; i++) { float buff2; buff2 = (i * 0.01f) - 0.03f; gpb2.DrawLine(mypen, Xo + 15, Ay - 35 - i * pixel, Ax - 2 * Xo, Ay - 35 - i * pixel); // Horizontal Dot Lines gpb2.DrawString(buff2.ToString(), font, br, Xo + 2, Ay - 37 i * pixel); // Label Minor Horizontal - Force } // Label Horizontal Axis for (float i = 0; i < 11; i += 1) { float buff; buff = (i * defleksi_div) - 2.5f;
26
gpb2.DrawLine(mypen, Xo + 40 + i * pixel, 7, Xo + 40 + i * // Vertical Dot Lines gpb2.DrawString(buff.ToString(), font, br, Xo + 46 + i * pixel, Ay - 20); // Label Minor Horizontal - Time } pixel, Ay);
7); 3*pixel);
// Axis Vertical dan Horizontal p = new Pen(Color.Blue, 3); gpb2.DrawLine(p, Xo + 40 + pixel * 5, 7, Xo + 40 + pixel * 5, Ay //Vertical Solid Axis gpb2.DrawLine(p, Xo + 0, Ay - 35-3*pixel, Ax - 2 * Xo, Ay - 35// Horizontal Solid Axis
// Mark Axis p = new Pen(Color.Teal, 3); gpb2.DrawLine(p, Xo + 40 + pixel * 5, Ay - 47 - 3 * pixel, Xo + 40 + pixel * 5, Ay - 17 - 3 * pixel); //Vertikal gpb2.DrawLine(p, Xo + 30 + pixel * 5, Ay - 35 - 3 * pixel, Xo + 55 + pixel * 5, Ay - 35 - 3 * pixel); //Horizontal pictureBox3.Refresh(); } private void DrawPICTURE1() { gpb.Clear(Color.Black); Ax Ay Xo Yo
= = = =
pictureBox1.Width; pictureBox1.Height; 10; pictureBox1.Height;
//Draw Text var p = new Pen(Color.Blue, 1); SolidBrush br = new SolidBrush(Color.WhiteSmoke); StringFormat sf = new StringFormat(); sf.FormatFlags = StringFormatFlags.DirectionVertical; //Mengatur ukuran label dan font tulisan Font font = new Font("Arial", 10.0f); gpb.DrawString("Volt(V)", font, br, Xo + 52+5*pixel, 6); // Label - Force gpb.DrawString("Defleksi[mm]", font, br, Xo + Ax -9* Xo, Ay - 52); // Label - Time Pen mypen = new System.Drawing.Pen(System.Drawing.Color.Green); mypen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; mypen.Color = Color.DarkBlue; mypen.Width = 1.8f; // Label Vertical Axis font = new Font("Arial", 10.0f); for (int i = 0; i < 21; i++) { gpb.DrawLine(mypen, Xo + 15, Ay - 35 - i * pixel, Ax - 2 * Xo, Ay - 35 - i * pixel); // Horizontal Dot Lines
27
gpb.DrawString(String.Format("{0,0:0.000}", i * load_div), font, br, Xo + 2, Ay - 37 - i * pixel); // Label Minor Horizontal - Force } // Label Horizontal Axis for (float i = 0; i < 11; i+=1) { float buff; buff = (i * defleksi_div)-2.5f; gpb.DrawLine(mypen, Xo + 40 + i * pixel, 7, Xo + 40 + i * pixel, Ay); // Vertical Dot Lines gpb.DrawString(buff.ToString(), font, br, Xo + 46 + i * pixel, Ay - 20); // Label Minor Horizontal - Time } // Axis Vertical dan Horizontal p = new Pen(Color.Blue, 3); gpb.DrawLine(p, Xo + 40 + pixel * 5, 7, Xo + 40 + pixel * 5, Ay 7); //Vertical Solid Axis gpb.DrawLine(p, Xo + 0, Ay - 35, Ax - 2 * Xo, Ay - 35); // Horizontal Solid Axis
Ay - 17); Ay - 35);
// Mark Axis p = new Pen(Color.Teal, 3); gpb.DrawLine(p, Xo + 40 + pixel * 5, Ay - 47, Xo + 40 + pixel * 5, //Vertikal gpb.DrawLine(p, Xo + 30 + pixel * 5, Ay - 35, Xo + 55 + pixel * 5, //Horizontal
pictureBox1.Refresh(); } private void DrawPICTURE2() { gpb1.Clear(Color.Black); Ax Ay Xo Yo
= = = =
pictureBox2.Width; pictureBox2.Height; 10; pictureBox2.Height;
//Draw Text var p = new Pen(Color.Blue, 1); SolidBrush br = new SolidBrush(Color.WhiteSmoke); StringFormat sf = new StringFormat(); sf.FormatFlags = StringFormatFlags.DirectionVertical; //Mengatur ukuran label dan font tulisan Font font = new Font("Arial", 10.0f); gpb1.DrawString("Volt(V)", font, br, Xo + 52 + 5 * pixel, 6); // Label - Force gpb1.DrawString("Defleksi[mm]", font, br, Xo + Ax - 9* Xo, Ay 52); // Label - Time Pen mypen = new System.Drawing.Pen(System.Drawing.Color.Green); mypen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; mypen.Color = Color.DarkBlue; mypen.Width = 1.8f;
28
// Label Vertical Axis font = new Font("Arial", 10.0f); for (int i = 0; i < 21; i++) { gpb1.DrawLine(mypen, Xo + 15, Ay - 35 - i * pixel, Ax - 2 * Xo, Ay - 35 - i * pixel); // Horizontal Dot Lines gpb1.DrawString(String.Format("{0,0:0.000}", i * load_div), font, br, Xo + 2, Ay - 37 - i * pixel); // Label Minor Horizontal - Force } // Label Horizontal Axis for (float i = 0; i < 11; i += 1) { float buff; buff = (i * defleksi_div) - 2.5f; gpb1.DrawLine(mypen, Xo + 40 + i * pixel, 7, Xo + 40 + i * pixel, Ay); // Vertical Dot Lines gpb1.DrawString(buff.ToString(), font, br, Xo + 46 + i * pixel, Ay - 20); // Label Minor Horizontal - Time } // Axis Vertical dan Horizontal p = new Pen(Color.Blue, 3); gpb1.DrawLine(p, Xo + 40 + pixel * 5, 7, Xo + 40 + pixel * 5, Ay 7); //Vertical Solid Axis gpb1.DrawLine(p, Xo + 0, Ay - 35, Ax - 2 * Xo, Ay - 35); // Horizontal Solid Axis // Mark Axis p = new Pen(Color.Teal, 3); gpb1.DrawLine(p, Xo + 40 + pixel * 5, Ay - 47, Xo + 40 + pixel * 5, Ay - 17); //Vertikal gpb1.DrawLine(p, Xo + 30 + pixel * 5, Ay - 35, Xo + 55 + pixel * 5, Ay - 35); //Horizontal pictureBox2.Refresh(); } private void UpForm_Click(object sender, EventArgs e) { gpb.Clear(Color.Black); Ax = pictureBox1.Width; Ay = pictureBox1.Height; Xo = 10; Yo = pictureBox1.Height; var p = new Pen(Color.Yellow, 3); string filePath = string.Format("Coba2.txt"); string[] textData = System.IO.File.ReadAllLines(filePath); string[] headers = textData[0].Split('\t'); DataTable dataTable1 = new DataTable(); //dataGridView4.Rows.Add(); foreach (string header in headers) { dataTable1.Columns.Add(header, typeof(string), null); } for (int i = 1; i < textData.Length; i++)
29
dataTable1.Rows.Add(textData[i].Split('\t')); //Set the DataSource of DataGridView to the DataTable dataGridView4.DataSource = dataTable1; double[] y = new double[dataGridView4.Rows.Count - 1]; double[] xi = new double[dataGridView4.Rows.Count - 1]; double[,] x = new double[2, dataGridView4.Rows.Count - 1]; double[] w = new double[dataGridView4.Rows.Count - 1]; for (int i = 0; i < dataGridView4.Rows.Count - 1; i++) { if (dataGridView4.Rows[i].Cells[0].Value != null) { x[0, i] = 1; double xx; if (double.TryParse(dataGridView4.Rows[i].Cells[0].Value.ToString(), out xx)) { xx = xx * 1; } double term = xx; for (int j = 1; j <= 1; j++) { x[j, i] = term; term *= xx; } double ydum; if (double.TryParse(dataGridView4.Rows[i].Cells[1].Value.ToString(), out ydum)) { y[i] = ydum * 1; } double xdum; if (double.TryParse(dataGridView4.Rows[i].Cells[0].Value.ToString(), out xdum)) { xi[i] = xdum * 1; } w[i] = 1; } } LinearRegression linReg = new LinearRegression(); linReg.Regress(y, x, w); C = linReg.C; if (C != null) { textBox3.Text = C[0].ToString(); textBox2.Text = C[1].ToString(); } DrawPICTURE1(); double hasilmin = -(C[1] * 2.5) + C[0]; double hasilmax = (C[1] * 2.5) + C[0]; gpb.DrawLine(p, Xo + 40, Ay - 35 - (int)((double)(pixel) * hasilmin), Xo + 40 + 11 * pixel, Ay - 35 - (int)((double)pixel * hasilmax)); p = new Pen(Color.Red, 3); for (int j = 0; j < y.Length;j++) { //double xi; //double koorx; double koorx = 2.00*(double)pixel * xi[j]; double koory = (double)pixel * y[j];
30
Rectangle rect = new Rectangle(Xo+40+5*pixel+(int)koorx ,Ay35-(int)koory, 1, 1); gpb.DrawRectangle(p, rect); } pictureBox1.Refresh(); }
private void button1_Click(object sender, EventArgs e) { gpb.Clear(Color.Black); Ax = pictureBox2.Width; Ay = pictureBox2.Height; Xo = 10; Yo = pictureBox2.Height; var p = new Pen(Color.Red, 3); string filePath = string.Format("Coba2.txt"); string[] textData = System.IO.File.ReadAllLines(filePath); string[] headers = textData[0].Split('\t'); DataTable dataTable1 = new DataTable(); //dataGridView4.Rows.Add(); foreach (string header in headers) { dataTable1.Columns.Add(header, typeof(string), null); } for (int i = 1; i < textData.Length; i++) dataTable1.Rows.Add(textData[i].Split('\t')); //Set the DataSource of DataGridView to the DataTable dataGridView5.DataSource = dataTable1; double[] y = new double[dataGridView5.Rows.Count - 1]; double[] xi = new double[dataGridView5.Rows.Count - 1]; double[,] x = new double[4, dataGridView5.Rows.Count - 1]; double[] w = new double[dataGridView5.Rows.Count - 1]; for (int i = 0; i < dataGridView5.Rows.Count - 1; i++) { if (dataGridView5.Rows[i].Cells[0].Value != null) { x[0, i] = 1; double xx; //double xx = double.Parse(dataGridView5.Rows[i].Cells[0].Value.ToString()); if (double.TryParse(dataGridView5.Rows[i].Cells[0].Value.ToString(), out xx)) { xx = xx * 1; } double term = xx; for (int j = 1; j <= 3; j++) { x[j, i] = term; term *= xx; } double ydum; //y[i] = double.Parse(dataGridView5.Rows[i].Cells[1].Value.ToString()); if (double.TryParse(dataGridView5.Rows[i].Cells[1].Value.ToString(), out ydum))
31
{ y[i] = ydum * 1; } double xdum; if (double.TryParse(dataGridView5.Rows[i].Cells[0].Value.ToString(), out xdum)) { xi[i] = xdum * 1; } w[i] = 1; } } LinearRegression linReg1 = new LinearRegression(); linReg1.Regress(y, x, w); C1 = linReg1.C; if (C1 != null) { textBox4.Text = C1[3].ToString(); textBox5.Text = C1[2].ToString(); textBox6.Text = C1[1].ToString(); textBox7.Text = C1[0].ToString(); } DrawPICTURE1(); double dumval; double dumms; double duumval; Point[] curves = new Point[100]; int h = 0; for (double m = 0.0; m < 100.00; m+=1.00) { dumval = (0.05 * m) - 2.5; duumval = 2.00*((double)pixel) * dumval; dumms = ((double)pixel) * ((C1[3] * (double)Math.Pow(dumval, 3.0)) + (C1[2] * (double)Math.Pow(dumval, 2.0)) + (C1[1] * dumval) + C1[0]); int titikx = Xo + 40 +5*pixel+((int)duumval); int titiky = Ay - 35 - ((int)dumms); curves[h] = new Point(titikx, titiky); h++; } gpb1.DrawCurve(p, curves); p = new Pen(Color.Yellow, 3); for (int j = 0; j < y.Length; j++) { double koorx = 2.00*(double)pixel * xi[j]; double koory = (double)pixel * y[j]; Rectangle rect = new Rectangle(Xo + 40 +5*pixel +(int)koorx, Ay - 35 - (int)koory, 1, 1); gpb1.DrawRectangle(p, rect); } pictureBox2.Refresh(); } private void button2_Click(object sender, EventArgs e) { Force = 0; counterg = 0; dataGridView8.DataSource = null; dataGridView8.Rows.Clear(); gpb3.Clear(Color.Black);
32
DrawPICTURE4(); Sg = true; return; } private void button3_Click(object sender, EventArgs e) { comboBox1.Enabled = true; } private void button4_Click(object sender, EventArgs e) { Sg = false; gpb3.Clear(Color.Black); Ax Ay Xo Yo
= = = =
pictureBox7.Width; pictureBox7.Height; 10; pictureBox7.Height;
DrawPICTURE4(); var p = new Pen(Color.Yellow, 2); Point[] curves = new Point[dataGridView8.Rows.Count]; double dumval; double dumms; int h = 0; for (int m = 0; m <= dataGridView8.Rows.Count -1; m++) { dumval = ((double)pixel) * (Convert.ToDouble(dataGridView8.Rows[m].Cells[0].Value))/12.5; dumms = ((double)pixel) * (Convert.ToDouble(dataGridView8.Rows[m].Cells[1].Value)); int titikx = Xo + 40 + ((int)dumval); int titiky = Ay - 35 - (6 * pixel) - ((int)dumms); curves[h] = new Point(titikx, titiky); h++; } gpb3.DrawCurve(p, curves); pictureBox7.Refresh(); } } }
33
Lampiran E. MITUTOYO Deflection Calibration Tool
34
32 35
36
37