using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class frmSpeedControl : Form { #region Promenljive int RxString; int i = 0; bool nasao = false; int Port = 0; int[] data = new int[2]; int rezultat; ushort brojac; int provera = 1; ushort P_gain; ushort D_gain; ushort I_gain; ushort Ref; ushort SampleT; ushort Satuaration; ushort Referenca; long greska = 0; #endregion public frmSpeedControl() { InitializeComponent(); } private void frmSpeedControl_Load(object sender, EventArgs e) { txtP.Text = "20"; txtI.Text = "1"; txtD.Text = "0"; txtT.Text = "5"; txtS.Text = "15000"; txtRef.Text = "120"; txtPresent.Text = "0"; txtErr.Text = "0"; progressBar1.Minimum = 0; progressBar1.Maximum = 200; progressBar1.Step = 10; grpPanel.Enabled = false; grpPid.Enabled = false; btnStop.Enabled = false; } #region ZastiteZaPolja private void txtP_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < 48) || (e.KeyChar > 57)) if (e.KeyChar != 8) { { e.Handled = true; } } } private void txtI_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < 48) || (e.KeyChar > 57)) if (e.KeyChar != 8) { { e.Handled = true; } } } private void txtD_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < 48) || (e.KeyChar > 57)) if (e.KeyChar != 8) { { e.Handled = true; } } } private void txtT_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < 48) || (e.KeyChar > 57)) if (e.KeyChar != 8) { { e.Handled = true; } } } private void txtRef_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < 48) || (e.KeyChar > 57)) if (e.KeyChar != 8) { { e.Handled = true; } } } #endregion #region DataReceived private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { switch (brojac) { case 0: { RxString = serialPort1.ReadByte(); data[brojac] = RxString; RxString = 0; brojac++; break; } case 1: { RxString = serialPort1.ReadByte(); data[brojac] = RxString; RxString = 0; brojac = 0; rezultat = (data[0] << 8) + data[1]; switch (rezultat) { case 10000: { Port = i; nasao = true; rezultat = 0; break; } case 11111: { MessageBox.Show("Greska u slanju podataka!Restartujte hardver i softver... ", "Upozorenje!", MessageBoxButtons.OK, MessageBoxIcon.Warning); rezultat = 0; break; } case 22222: { MessageBox.Show("Greska u slanju podataka!Restartujte hardver i softver...", "Upozorenje!", MessageBoxButtons.OK, MessageBoxIcon.Warning); rezultat = 0; break; } default: { if (provera == rezultat) { rezultat = 0; SendByte("20000"); } break; } } this.Invoke(new EventHandler(DisplayText)); break; } } } #endregion #region Tajmer private void timer1_Tick_1(object sender, EventArgs e) { i++; if (i < 11) { progressBar1.Value += 20; try { serialPort1.PortName = "COM" + i.ToString(); serialPort1.BaudRate = 9600; if (serialPort1.IsOpen) { serialPort1.Close(); } serialPort1.Open(); if (serialPort1.IsOpen) { SendByte("10000"); } for (int j = 0; j < 10000000; j++) ; if (nasao == false) { serialPort1.Close(); } } catch { } } else { timer1.Stop(); lblSearch.Text = "Search complete!"; if (nasao == false) { if (MessageBox.Show("Hardware not found! Please check data cable or device power!Procced with restart?", "Warning!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { i = 0; progressBar1.Value = 0; lblSearch.Text = "Search in progress..."; timer1.Start(); } else { Application.Exit(); } } else { grpPanel.Enabled = true; grpPid.Enabled = true; lblDeviceConnected.Visible = true; toolStripStatusLabel1.Text = "Device connected COM" + Port.ToString(); return; } } } #endregion #region Buttons private void btnExit_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Close(); } Application.Exit(); } private void btnDefault_Click(object sender, EventArgs e) { txtP.Text = "30"; txtI.Text = "1"; txtD.Text = "0"; txtT.Text = "5"; txtS.Text = "15000"; } private void btnSearch_Click(object sender, EventArgs e) { i = 0; progressBar1.Value = 0; timer1.Start(); } private void btnStart_Click(object sender, EventArgs e) { if (txtRef.Text == "0") { MessageBox.Show("Unesite referentnu brzinu!", "Upozorenje!", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtRef.Focus(); return; } else { P_gain = ushort.Parse(txtP.Text); I_gain = ushort.Parse(txtI.Text); D_gain = ushort.Parse(txtD.Text); SampleT = ushort.Parse(txtT.Text); Satuaration = ushort.Parse(txtS.Text); Ref = ushort.Parse(txtRef.Text); provera = P_gain + I_gain + D_gain + SampleT + Satuaration + Ref; SendByte(txtP.Text); SendByte(txtI.Text); SendByte(txtD.Text); SendByte(txtT.Text); SendByte(txtS.Text); SendByte(txtRef.Text); } btnStop.Enabled = true; btnStart.Enabled = false; } private void btnStop_Click(object sender, EventArgs e) { SendByte("10000"); txtPresent.Text = "0"; txtErr.Text = "0"; btnStop.Enabled = false; btnStart.Enabled = true; } #endregion #region Funkcije private void SendByte(string data) { ushort broj = ushort.Parse(data); byte MSB = (byte)(broj >> 8); byte LSB = (byte)(broj); WriteToSerial(MSB); WriteToSerial(LSB); } private void WriteToSerial(byte data) { byte[] buffer = new byte[1]; if (serialPort1.IsOpen) { buffer[0] = data; serialPort1.Write(buffer, 0, 1); } } private void DisplayText(object sender, EventArgs e) { long refernca = long.Parse(txtRef.Text); if (rezultat != 0) { greska = rezultat - refernca; txtErr.Text = ""; txtErr.AppendText(greska.ToString()); txtPresent.Text = ""; txtPresent.AppendText(rezultat.ToString()); } } #endregion private void txtRef_Validated(object sender, EventArgs e) { Referenca = ushort.Parse(txtRef.Text); if (Referenca > 360) { txtRef.Text = "360"; } } } }