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;
             }
         }
     }
 }
Пример #3
0
        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;
                    }));
                }
            }
        }
Пример #5
0
 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;
             }
         }
     }
 }
Пример #6
0
        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;
                }
            }
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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;
                }
            }
        }