using System; using System.Linq; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace z8094_02 { public partial class Form1 : Form { /*initial varible*/ int step = 0; //temp value for draw point. int tmpx; int tmpy; int x, y; //Graphic varible Graphics g; Bitmap img; //line pen Pen tb ; //mesh pen Pen mesh; public Form1() { InitializeComponent(); MessageBox.Show("Please start your ISaGRAF application before press start button.", "Button Clicked",MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); //set timer timer1.Interval = 250; timer1.Enabled = true; //initial point tmpx = 0; tmpy = 0; //create bitmap canvas img = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height); g = Graphics.FromImage(img); pictureBox1.Image = img; g.Clear(Color.White); //start drawing mesh draw_mesh(); } private void timer1_Tick(object sender, EventArgs e) { Scan_XDI(); Scan_YDI(); ScanProperties(); } private void Scan_XDI() { byte status; Quicker.UserShare.UserGetCoil(Convert.ToUInt16(2), out status); if (status == 1) Limit_XP.BackColor = Color.Red; else Limit_XP.BackColor = Color.Black; Quicker.UserShare.UserGetCoil(Convert.ToUInt16(3), out status); if (status == 1) Limit_XN.BackColor = Color.Red; else Limit_XN.BackColor = Color.Black; Quicker.UserShare.UserGetCoil(Convert.ToUInt16(6), out status); if (status == 1) Home_X.BackColor = Color.Red; else Home_X.BackColor = Color.Black; Quicker.UserShare.UserGetCoil(Convert.ToUInt16(7), out status); if (status == 1) NHome_X.BackColor = Color.Red; else NHome_X.BackColor = Color.Black; } private void Scan_YDI() { byte status; Quicker.UserShare.UserGetCoil(Convert.ToUInt16(4), out status); if (status == 1) Limit_YP.BackColor = Color.Red; else Limit_YP.BackColor = Color.Black; Quicker.UserShare.UserGetCoil(Convert.ToUInt16(5), out status); if (status == 1) Limit_YN.BackColor = Color.Red; else Limit_YN.BackColor = Color.Black; Quicker.UserShare.UserGetCoil(Convert.ToUInt16(8), out status); if (status == 1) Home_Y.BackColor = Color.Red; else Home_Y.BackColor = Color.Black; Quicker.UserShare.UserGetCoil(Convert.ToUInt16(9), out status); if (status == 1) NHome_Y.BackColor = Color.Red; else NHome_Y.BackColor = Color.Black; } private void ScanProperties() { //scan current position next position int Value = 0; byte tmp; string position; //scan drive speed Quicker.UserShare.UserGetReg_Long(Convert.ToUInt16(10), out Value); speed.Text = Value.ToString(); Quicker.UserShare.UserGetReg_Long(Convert.ToUInt16(12), out Value); position = "( " + Value.ToString() + " , "; Quicker.UserShare.UserGetReg_Long(Convert.ToUInt16(14), out Value); position += Value.ToString() + " )"; nxt_position.Text = position.ToString(); Quicker.UserShare.UserGetReg_Long(Convert.ToUInt16(16), out x); position = "( " + x.ToString() + " , "; Quicker.UserShare.UserGetReg_Long(Convert.ToUInt16(18), out y); position += y.ToString() + " )"; cur_position.Text = position; //start drawing if (((x - tmpx) * ((x - tmpx)) > 250) || ((y - tmpy) * (y - tmpy) > 250)) { draw(); tmpx = x; tmpy = y; } Quicker.UserShare.UserGetReg_Long(Convert.ToUInt16(20), out step); //check emergency signal Quicker.UserShare.UserGetCoil(Convert.ToUInt16(22), out tmp); if (tmp == 0) { emg.BackColor = Color.Black; showstep(step); } else { emg.BackColor = Color.Red; step = -1; showstep(step); } } private void draw() { tb = new Pen(Color.Blue); g.DrawLine(tb, x / 500, 240 - (y / 500), tmpx / 500, 240 - (tmpy / 500)); pictureBox1.Refresh(); //release pen tb.Dispose(); } private void draw_mesh() { mesh = new Pen(Color.Silver); for (int i = 1; i < 9; i++) { g.DrawLine(mesh, i * 40, 0, i * 40, 240); } for (int j = 1; j < 7; j++) { g.DrawLine(mesh, 0, j * 40, 320, j * 40); } //release pen mesh.Dispose(); } private void button1_Click(object sender, EventArgs e) { //start motion Quicker.UserShare.UserSetCoil(Convert.ToUInt16(1), 1); pictureBox1.Refresh(); } private void showstep(int motion_step) { //show status from ISaGRAF. switch (motion_step) { case 0: status_bar.Text = "Please press start button to start motion"; g.Clear(Color.White); draw_mesh(); break; case 1: status_bar.Text = "Detecting X-AXIS Near-home-switch and Home-Switch."; break; case 2: status_bar.Text = "Detecting Y-AXIS Near-home-switch and Home-Switch."; break; case 3: status_bar.Text = "Reset logic and encoder pulse"; break; case 4: status_bar.Text = "Start line interpolation"; break; case 5: status_bar.Text = "Move to start point of circle move"; break; case 6: status_bar.Text = "start arc interpolation move"; break; case 7: status_bar.Text = "Return home"; break; case 20: status_bar.Text = "Wait 10 seconds"; break; default: status_bar.Text = "error!!! Please check your ISaGRAF I/O connection or Manual."; g.Clear(Color.White); draw_mesh(); break; } } } }