You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
366 lines
15 KiB
366 lines
15 KiB
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Threading;
|
|
using System.Windows.Forms;
|
|
using SSControls;
|
|
|
|
namespace UniSolder
|
|
{
|
|
|
|
partial class Form1
|
|
{
|
|
int CPoint = 0;
|
|
|
|
private UniSolderComm lUniSolder = null;
|
|
private UniSolderComm.PID PID = null;
|
|
|
|
private System.Windows.Forms.Timer ConnectionTimer;
|
|
|
|
public Form1()
|
|
{
|
|
Disposed += Form1_Disposed;
|
|
InitializeComponent();
|
|
|
|
lUniSolder = new UniSolderComm();
|
|
lUniSolder.InstrumentChange += InstrumentChange;
|
|
lUniSolder.LiveDataReceived += LiveDataReceived;
|
|
lUniSolder.Transport = new SSComm.USBHID { DevVID = 0x4d8, DevPID = 0x3c };
|
|
|
|
ConnectionTimer = new System.Windows.Forms.Timer() { Interval = 1000, Enabled = true };
|
|
ConnectionTimer.Tick += ConnectionTimer_Tick;
|
|
}
|
|
|
|
private void ConnectionTimer_Tick(object sender, EventArgs e)
|
|
{
|
|
if (!lUniSolder.Transport.Connected)
|
|
{
|
|
if (lUniSolder.Transport.Connect())
|
|
{
|
|
InstrumentChange(null, null);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Form1_Disposed(object sender, EventArgs e)
|
|
{
|
|
lUniSolder?.Transport?.Dispose();
|
|
}
|
|
|
|
private void Form1_Load(object sender, EventArgs e)
|
|
{
|
|
SsChart2.DrawingsNum = 13;
|
|
var _with1 = SsChart2.Scales(0);
|
|
_with1.ValFrom = 0;
|
|
_with1.ValTo = 5.11F;
|
|
_with1.ValMinStep = 1F / 50F;
|
|
_with1.ValMajStep = 1F;
|
|
_with1.ValFormat = "0";
|
|
|
|
var _with2 = SsChart2.Scales(1);
|
|
_with2.ValFrom = 0;
|
|
_with2.ValTo = 500;
|
|
_with2.ValMinStep = 10;
|
|
_with2.ValMajStep = 50;
|
|
_with2.ValFormat = "0";
|
|
|
|
var _with3 = SsChart2.Drawings(0);
|
|
_with3.XScale = SsChart2.Scales(0);
|
|
_with3.Yscale = SsChart2.Scales(1);
|
|
_with3.Pen.Color = Color.Yellow;
|
|
_with3.Pen.Width = 1;
|
|
_with3.PointsNum = 2;
|
|
_with3.Points[0].X = _with3.XScale.ValFrom;
|
|
_with3.Points[0].Y = _with3.Yscale.ValFrom;
|
|
_with3.Points[1].X = _with3.XScale.ValFrom;
|
|
_with3.Points[1].Y = _with3.Yscale.ValTo;
|
|
|
|
foreach (var d in SsChart2.Drawings1)
|
|
{
|
|
if (d != SsChart2.Drawings1[0])
|
|
{
|
|
d.XScale = SsChart2.Scales(0);
|
|
d.Yscale = SsChart2.Scales(1);
|
|
d.Pen.Width = 2;
|
|
d.PointsNum = 256;
|
|
for (var i = 0; i <= 255; i++)
|
|
{
|
|
d.Points[i].X = i / 50F;
|
|
d.Points[i].Y = 10;
|
|
}
|
|
}
|
|
}
|
|
|
|
SsChart2.Drawings(1).Pen.Color = Color.DarkRed;
|
|
SsChart2.Drawings(2).Pen.Color = Color.Red;
|
|
SsChart2.Drawings(3).Pen.Color = Color.LightGreen;
|
|
SsChart2.Drawings(4).Pen.Color = Color.SkyBlue;
|
|
SsChart2.Drawings(5).Pen.Color = Color.Magenta;
|
|
SsChart2.Drawings(6).Pen.Color = Color.Yellow;
|
|
SsChart2.Drawings(7).Pen.Color = Color.Blue;
|
|
SsChart2.Drawings(8).Pen.Color = Color.LightGray;
|
|
SsChart2.Drawings(9).Pen.Color = Color.Orange;
|
|
SsChart2.Drawings(10).Pen.Color = Color.White;
|
|
SsChart2.Drawings(11).Pen.Color = Color.Green;
|
|
SsChart2.Drawings(12).Pen.Color = Color.DarkSlateBlue;
|
|
|
|
|
|
//Debug.Print("Connecting.....");
|
|
//Debug.Print(lUniSolder.Transport.Connect().ToString());
|
|
//Dim aa(64) As Byte
|
|
//aa(0) = 0
|
|
//lUniSolder.TransLayer.Write(aa, 0, 64)
|
|
//lUniSolder.TransLayer.Write(aa, 0, 64)
|
|
|
|
System.Threading.Thread.Sleep(500);
|
|
InstrumentChange(null, null);
|
|
//PID = lUniSolder.AppGetPIDParameters()
|
|
//KpTrackBar.Value = PID.KP
|
|
//KiTrackBar.Value = PID.KI
|
|
//DGTrackBar.Value = PID.DGain
|
|
//OVFGTrackBar.Value = PID.OVSGain
|
|
//GTrackBar.Value = PID.Gain
|
|
//Dim b(64) As Byte
|
|
//b(0) = 4
|
|
//ud.Write(b, 0, 64)
|
|
//Timer1.Enabled = True
|
|
}
|
|
|
|
public delegate void InstrumentChangeDelegate(object sender, EventArgs e);
|
|
private void InstrumentChange(object sender, EventArgs e)
|
|
{
|
|
if ((KpTrackBar.InvokeRequired))
|
|
{
|
|
KpTrackBar.BeginInvoke(new InstrumentChangeDelegate(InstrumentChange), sender, e);
|
|
}
|
|
else
|
|
{
|
|
PID = lUniSolder.AppGetPIDParameters();
|
|
KpTrackBar.Value = PID.KP;
|
|
KiTrackBar.Value = PID.KI;
|
|
DGTrackBar.Value = PID.DGain;
|
|
OVFGTrackBar.Value = PID.OVSGain;
|
|
GTrackBar.Value = PID.Gain;
|
|
}
|
|
}
|
|
|
|
public delegate void LiveDataReceivedDelegate(object sender, UniSolderComm.LiveDataReceivedEventData e);
|
|
private void LiveDataReceived(object sender, UniSolderComm.LiveDataReceivedEventData e)
|
|
{
|
|
if (SsChart2.InvokeRequired)
|
|
{
|
|
SsChart2.BeginInvoke(new LiveDataReceivedDelegate(LiveDataReceived), sender, e);
|
|
}
|
|
else
|
|
{
|
|
var b = e.Data;
|
|
switch (b[0])
|
|
{
|
|
case 3:
|
|
if (Button8.Text != "START")
|
|
{
|
|
SsChart2.Drawings(0).Points[0].X = SsChart2.Drawings(1).Points[CPoint].X;
|
|
SsChart2.Drawings(0).Points[1].X = SsChart2.Drawings(1).Points[CPoint].X;
|
|
|
|
//CTTemp
|
|
SsChart2.Drawings(2).Points[CPoint].Y = b[3] * 2.0F;
|
|
|
|
//CTemp
|
|
SsChart2.Drawings(3).Points[CPoint].Y = b[4] * 0.5F + b[5] * 128.0F;
|
|
|
|
//ADCTemp
|
|
SsChart2.Drawings(4).Points[CPoint].Y = b[6] * 0.5F + b[7] * 128.0F;
|
|
|
|
//TAvgF
|
|
SsChart2.Drawings(5).Points[CPoint].Y = b[8] * 0.5F + b[9] * 128.0F;
|
|
|
|
//CHRes - Heater resistance x10
|
|
SsChart2.Drawings(8).Points[CPoint].Y = b[10] * 1.0F + b[11] * 256.0F;
|
|
|
|
//TAvgP
|
|
SsChart2.Drawings(9).Points[CPoint].Y = b[12] * 0.5F + b[13] * 128.0F;
|
|
|
|
//Power On/Off
|
|
SsChart2.Drawings(7).Points[CPoint].Y = b[14] != 0 ? 100.0F : 0.0F;
|
|
|
|
//WSDelta
|
|
SsChart2.Drawings(10).Points[0].Y = (b[15] * 1.0F + b[16] * 256.0F - 2048.0F) / 4.0F + 200.0F;
|
|
SsChart2.Drawings(10).Points[1].Y = (b[17] * 1.0F + b[18] * 256.0F - 2048.0F) / 4.0F + 200.0F;
|
|
SsChart2.Drawings(10).Points[2].Y = (b[19] * 1.0F + b[20] * 256.0F - 2048.0F) / 4.0F + 200.0F;
|
|
SsChart2.Drawings(10).Points[3].Y = (b[21] * 1.0F + b[22] * 256.0F - 2048.0F) / 4.0F + 200.0F;
|
|
SsChart2.Drawings(10).Points[4].Y = (b[23] * 1.0F + b[24] * 256.0F - 2048.0F) / 4.0F + 200.0F;
|
|
SsChart2.Drawings(10).Points[5].Y = (b[25] * 1.0F + b[26] * 256.0F - 2048.0F) / 4.0F + 200.0F;
|
|
SsChart2.Drawings(10).Points[6].Y = (b[27] * 1.0F + b[28] * 256.0F - 2048.0F) / 4.0F + 200.0F;
|
|
|
|
//DestinationReached
|
|
SsChart2.Drawings(11).Points[CPoint].Y = b[31] * 100.0F;
|
|
|
|
//Duty
|
|
SsChart2.Drawings(1).Points[CPoint].Y = (b[32] * 1.0F + b[33] * 256.0F) / 128.0F;
|
|
|
|
////SsChart2.Drawings(12).Points(CPoint).Y = (b(34) * 1.0 + b(35) * 256.0);
|
|
//TAvgF
|
|
//SsChart2.Drawings(6).Points(CPoint).Y = (b(10) * 1.0 + b(11) * 256.0 - 2048.0) / 4.0 + 200.0
|
|
|
|
CPoint = (CPoint + 1) % 256;
|
|
}
|
|
break;
|
|
}
|
|
if (!SsChart2.redrawactive)
|
|
{
|
|
SsChart2.Drawings(2).Visible = checkBox1.Checked; //CTTemp
|
|
SsChart2.Drawings(3).Visible = checkBox2.Checked; //CTemp
|
|
SsChart2.Drawings(4).Visible = checkBox3.Checked; //ADCTemp
|
|
SsChart2.Drawings(5).Visible = checkBox4.Checked; //TAvgF
|
|
SsChart2.Drawings(9).Visible = checkBox6.Checked; //TavgP
|
|
SsChart2.Drawings(11).Visible = checkBox7.Checked; //DestinationReached
|
|
SsChart2.Drawings(1).Visible = checkBox8.Checked; //Duty
|
|
SsChart2.Drawings(8).Visible = checkBox9.Checked; //CHRes
|
|
SsChart2.Drawings(7).Visible = checkBox10.Checked; //Power On/Off
|
|
SsChart2.Drawings(10).Visible = checkBox11.Checked; //WsDelta
|
|
|
|
SsChart2._Redraw();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Button3_Click(object sender, EventArgs e)
|
|
{
|
|
var fd = new OpenFileDialog()
|
|
{
|
|
CheckFileExists = true,
|
|
CheckPathExists = true,
|
|
Multiselect = false,
|
|
Filter = "HEX Files|*.hex",
|
|
Title = "Select HEX file to upload.",
|
|
FilterIndex = 0
|
|
};
|
|
if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
|
{
|
|
Stopwatch sst = new Stopwatch();
|
|
HexFileManager ss = new HexFileManager();
|
|
if (ss.LoadHexFile(fd.FileName))// "C:\\Users\\Sparky\\Desktop\\MyProjects\\Electronics\\UniSolder\\software\\front\\US_Firmware.X\\dist\\PIC32_with_bootloader\\production\\US_Firmware.X.production.hex"))
|
|
{
|
|
if (lUniSolder.Transport.Connected)
|
|
{
|
|
Debug.Print("Hex File loaded successfully");
|
|
sst.Restart();
|
|
byte b = 0;
|
|
lUniSolder.DevGetOpMode(ref b);
|
|
if (b != 16)
|
|
{
|
|
lUniSolder.AppJumpToBootloader();
|
|
Thread.Sleep(500);
|
|
lUniSolder.Transport.Disconnect();
|
|
for (int i = 0; i < 20; i++)
|
|
{
|
|
if (lUniSolder.Transport.Connect()) break;
|
|
Thread.Sleep(500);
|
|
}
|
|
if (!lUniSolder.Transport.Connected) throw new Exception("Could not connect to UniSolder device.");
|
|
}
|
|
Debug.Print("Erasing Flash...");
|
|
lUniSolder.BlEraseFlash();
|
|
sst.Stop();
|
|
Debug.Print("Erasing completed in " + sst.Elapsed.ToString());
|
|
Debug.Print("Programming started...");
|
|
sst.Restart();
|
|
foreach (var r in ss.Records)
|
|
{
|
|
var cResult = lUniSolder.BlProgramFlash(r.Address, ref r.Data, 0, (int)r.RecDataLen);
|
|
switch (cResult)
|
|
{
|
|
case 0:
|
|
//Debug.Print(i & "(" & Format(.Address, "X8") & "," & .RecDataLen & ")")
|
|
break;
|
|
case -1:
|
|
Debug.Print("Time Out");
|
|
break;
|
|
default:
|
|
Debug.Print("Error(" + cResult + ")");
|
|
break;
|
|
}
|
|
if (cResult != 0) break;
|
|
}
|
|
lUniSolder.BlProgramComplete();
|
|
sst.Stop();
|
|
Debug.Print("Programming completed in " + sst.Elapsed.ToString());
|
|
lUniSolder.BlJumpToApplication();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private void Button6_Click(object sender, EventArgs e)
|
|
{
|
|
lUniSolder.DevQuery();
|
|
}
|
|
|
|
private void KpTrackBar_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
KpLabel.Text = "Kp = " + (KpTrackBar.Value / 32767.0).ToString("0.00");
|
|
if ((PID.KP != KpTrackBar.Value))
|
|
{
|
|
PID.KP = (UInt16)KpTrackBar.Value;
|
|
lUniSolder.AppSetPIDParameters(ref PID);
|
|
}
|
|
}
|
|
|
|
private void KiTrackBar_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
KiLabel.Text = "Ki = " + (KiTrackBar.Value / 32767.0).ToString("0.000");
|
|
if ((PID.KI != KiTrackBar.Value))
|
|
{
|
|
PID.KI = (UInt16)KiTrackBar.Value;
|
|
lUniSolder.AppSetPIDParameters(ref PID);
|
|
}
|
|
}
|
|
|
|
private void DGTrackBar_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
DGLabel.Text = "DGain = " + DGTrackBar.Value.ToString();
|
|
if ((PID.DGain != DGTrackBar.Value))
|
|
{
|
|
PID.DGain = (byte)DGTrackBar.Value;
|
|
lUniSolder.AppSetPIDParameters(ref PID);
|
|
}
|
|
}
|
|
|
|
private void OVFGTrackBar_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
OVFGLabel.Text = "OVFGain = " + OVFGTrackBar.Value.ToString();
|
|
if ((PID.OVSGain != OVFGTrackBar.Value))
|
|
{
|
|
PID.OVSGain = (byte)OVFGTrackBar.Value;
|
|
lUniSolder.AppSetPIDParameters(ref PID);
|
|
}
|
|
}
|
|
|
|
private void GTrackBar_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
GLabel.Text = "Gain = " + GTrackBar.Value.ToString();
|
|
if ((PID.Gain != GTrackBar.Value))
|
|
{
|
|
PID.Gain = (UInt16)GTrackBar.Value;
|
|
lUniSolder.AppSetPIDParameters(ref PID);
|
|
}
|
|
}
|
|
|
|
private void Button8_Click(object sender, EventArgs e)
|
|
{
|
|
if (Button8.Text == "STOP")
|
|
{
|
|
Button8.Text = "START";
|
|
}
|
|
else
|
|
{
|
|
Button8.Text = "STOP";
|
|
}
|
|
}
|
|
}
|
|
}
|