private void waitTimer_Tick(object sender, EventArgs e) { form1.ReadDeweRev(); this.Invoke((EventHandler)(delegate { double d = form1.deweRev; chart1.Series[0].Points.AddY(d); lRev.Text = d.ToString("f1"); })); TcpModbusPacket tp = form1.ReadPLC(); if (tp != null) { ushort D100 = BytesOP.MakeByte(tp.Data[1], tp.Data[2]); if (!BytesOP.GetBit(D100, 0))//系统外部停机 { MessageBox.Show("测试停止"); this.Invoke((EventHandler)(delegate { waitTimer.Enabled = false; toolStripButton1.Enabled = true; })); } } }
void WaitingStart(object LockWatingThread) { while (true) { TcpModbusPacket tp = form1.ReadPLC(); if (tp != null) { ushort D100 = BytesOP.MakeByte(tp.Data[1], tp.Data[2]); if (BytesOP.GetBit(D100, 0))//系统已经启动 { form1.SetMotor(motorRev, motorTorque); this.Invoke((EventHandler)(delegate { chart1.Series[0].Points.Clear(); waitTimer.Enabled = true; })); return; } } Thread.Sleep(1000); lock (LockWatingThread) { wpStart.SetProcessBarPerformStep(); if (wpStart.HasBeenCancelled()) { return; } } } }
void checkPLC() { TcpModbusPacket tp = ReadPLC(); if (tp != null) { ushort D100 = BytesOP.MakeByte(tp.Data[1], tp.Data[2]); if (!BytesOP.GetBit(D100, 0))//系统外部停机 { this.Invoke((EventHandler)(delegate { openTimer.Enabled = false; waitTimer.Enabled = false; splitContainer1.Enabled = false; toolStripButton4.Enabled = true; listView1.BackColor = SystemColors.Window; listView2.BackColor = SystemColors.Window; tbTime1.Visible = false; tbTime.Visible = false; timer1.Enabled = false; })); MessageBox.Show("测试停止"); } } }
private void waitTimer_Tick(object sender, EventArgs e) { form1.ReadDeweData(); this.Invoke((EventHandler)(delegate { chart1.Series[0].Points.AddY(form1.deweNiuZhen); chart2.Series[0].Points.AddY(form1.deweNiuJu); chart2.Series[1].Points.AddY(Torque); chart2.Series[2].Points.AddY(motorTorque); })); t = t + waitTimer.Interval / 1000; motorTorque = Torque + Amplitude * Math.Sin(omega * t); form1.SetMotor(motorRev, motorTorque); TcpModbusPacket tp = form1.ReadPLC(); if (tp != null) { ushort D100 = BytesOP.MakeByte(tp.Data[1], tp.Data[2]); if (!BytesOP.GetBit(D100, 0))//系统外部停机 { MessageBox.Show("测试停止"); this.Invoke((EventHandler)(delegate { waitTimer.Enabled = false; toolStripButton1.Enabled = true; })); } } }
void WaitingStart(object LockWatingThread) { while (true) { TcpModbusPacket tp = ReadPLC(); if (tp != null) { ushort D100 = BytesOP.MakeByte(tp.Data[1], tp.Data[2]); if (BytesOP.GetBit(D100, 0)) //系统已经启动 { if (BytesOP.GetBit(D100, 1)) //判断正反转 { bForeward = true; this.Invoke((EventHandler)(delegate { listView1.Items[6].SubItems[1].Text = "正转"; })); } else { bForeward = false; this.Invoke((EventHandler)(delegate { listView1.Items[6].SubItems[1].Text = "反转"; })); } SetMotor(openRev, NiuJuPID.sp); motorRev = openRev; motorTorque = NiuJuPID.sp; this.Invoke((EventHandler)(delegate { listView1.Items[6].SubItems[1].Text = openRev.ToString("F3"); listView2.Items[6].SubItems[1].Text = NiuJuPID.sp.ToString(); listView1.Items[1].SubItems[1].Text = ""; listView2.Items[1].SubItems[1].Text = ""; chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); openTimes = 0; openTimer.Enabled = true; })); return; } } Thread.Sleep(1000); lock (LockWatingThread) { wpStart.SetProcessBarPerformStep(); if (wpStart.HasBeenCancelled()) { return; } } } }
public void SetMotor(double rev, double torque) { Debug.Assert(rev > 0); Debug.Assert(torque >= 0); if (torque > 28.6) { torque = 28.6; } int retry = 3; while (true) { byte[] tx = new byte[8 + 5]; tx[0] = 0x00; //起始地址 tx[1] = 0x00; tx[2] = 0; //长度 tx[3] = 4; tx[4] = 8; //写入字节数 rev = rev * 360 * 1000; if (!bForeward) { rev = rev * -1; torque = torque * -1; } byte[] x = BitConverter.GetBytes((int)rev); tx[5] = x[1]; tx[6] = x[0]; tx[7] = x[3]; tx[8] = x[2]; torque = torque / 7 / 28.6 * 1000; this.Invoke((EventHandler)(delegate { listView2.Items[7].SubItems[1].Text = ((int)torque).ToString(); })); x = BitConverter.GetBytes((int)torque); tx[9] = x[1]; tx[10] = x[0]; tx[11] = x[3]; tx[12] = x[2]; TcpModbusPacket tp = ModbusWork(tx, TcpModbusPacket.FunctionCode.Write); if (tp != null) { return; } retry--; if (retry == 0) { if (MessageBox.Show("无法连接连接到PLC,是否重试!", "PLC连接失败", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) == DialogResult.Cancel) { this.Close(); return; } retry = 3; } } }
public TcpModbusPacket ReadPLC() { byte[] tx = new byte[4]; tx[0] = 0x00; //起始地址 tx[1] = 100; tx[2] = 0; //长度 tx[3] = 1; TcpModbusPacket tp = ModbusWork(tx, TcpModbusPacket.FunctionCode.Read); return(tp); }
TcpModbusPacket ModbusWork(byte[] tx, TcpModbusPacket.FunctionCode type) { byte[] txBytes = TcpModbusPacket.MakePacket(0, 0, type, tx); ShowText("发送数据:" + WFNetLib.StringFunc.StringsFunction.byteToHexStr(txBytes, " ")); if (!tcpPLC.SendPacket(txBytes)) { tcpPLC.Close(); PLCConnect(); return(null); } object o = tcpPLC.ReceivePacket(); if (o == null) { ShowText("未收到需要读取的数据"); return(null); } TcpModbusPacket tp = (TcpModbusPacket)o; ShowText("收到数据:" + WFNetLib.StringFunc.StringsFunction.byteToHexStr(tp.Data, " ")); return(tp); }
void SetAllTime(int ms1, int ms2) { int retry = 3; while (true) { byte[] tx = new byte[8 + 5]; tx[0] = 0x00; //起始地址 tx[1] = 20; tx[2] = 0; //长度 tx[3] = 4; tx[4] = 8; //写入字节数 byte[] x = BitConverter.GetBytes(ms1); tx[5] = x[1]; tx[6] = x[0]; tx[7] = x[3]; tx[8] = x[2]; x = BitConverter.GetBytes(ms2); tx[9] = x[1]; tx[10] = x[0]; tx[11] = x[3]; tx[12] = x[2]; TcpModbusPacket tp = ModbusWork(tx, TcpModbusPacket.FunctionCode.Write); if (tp != null) { return; } retry--; if (retry == 0) { if (MessageBox.Show("无法连接连接到PLC,是否重试!", "PLC连接失败", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) == DialogResult.Cancel) { this.Close(); return; } retry = 3; } } }