示例#1
0
        void SendCAN(uint ID, byte[] Data)
        {
            CANMessage message = new CANMessage(ID, false, Data);

            CANMessage[] messages = { message };
            CANDevice.Send(CANPortIndex, messages);
            lastSendTime = DateTime.Now;
            if (IsShowSendRecive)
            {
                WriteLine("Send:" + message.ToString());
            }
        }
示例#2
0
        //Executor Process Message
        public void Executor(CANMessage CANMessage)
        {
            lock (this)
            {
                if (!IsRunning)
                {
                    return;
                }

                if (CANMessage.ExternFlag)
                {
                    return;
                }

                Job j = JobRunning;

                //ACK
                if (j.Type == Job.JobType.ACK)
                {
                    if (_StepRunning == 1)
                    {
                        if (CheckCANMessage(CANMessage, ID_ACK, DA_ACK))
                        {
                            RunningNext();
                        }
                        else if (CheckCANMessage(CANMessage, ID_ACK, DA_NACK))
                        {
                            RunningNext();
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                }
                //READ
                else if (j.Type == Job.JobType.Read)
                {
                    if (CheckCANMessage(CANMessage, ID_READ, DA_NACK))
                    {
                        RunningNext(JobEventType.NACK, "NACK");
                    }

                    int m = (int)Math.Ceiling(j.DataNum / 8f);
                    if (_StepRunning == 1)//ACK
                    {
                        if (CheckCANMessage(CANMessage, ID_READ, DA_ACK))
                        {
                            _StepRunning++;
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                    else if (_StepRunning >= 2 && _StepRunning <= m + 1)//DATA
                    {
                        if (CheckCANMessage(CANMessage, ID_READ) && CANMessage.DataLen > 0)
                        {
                            if (_StepRunning == 2)
                            {
                                j.DataReceive = new byte[j.DataNum];
                            }
                            Array.Copy(CANMessage.Data, 0, j.DataReceive, (_StepRunning - 2) * CANMessage.DataLenMax, CANMessage.DataLen);
                            _StepRunning++;
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                    else if (_StepRunning == m + 2)//ACK
                    {
                        if (CheckCANMessage(CANMessage, ID_READ, DA_ACK))
                        {
                            RunningNext();
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                    else
                    {
                        TimeoutCheck();
                    }
                }
                //WRITE
                else if (j.Type == Job.JobType.Write)
                {
                    if (CheckCANMessage(CANMessage, ID_WRITE, DA_NACK))
                    {
                        RunningNext(JobEventType.NACK, "NACK");
                    }

                    int m = (int)Math.Ceiling(j.DataSend.Length / 8f);
                    if (_StepRunning == 2 * m + 2)
                    {
                        if (CheckCANMessage(CANMessage, ID_WRITE, DA_ACK))
                        {
                            RunningNext();
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                    else if (_StepRunning % 2 == 1 && _StepRunning <= 2 * m + 1)
                    {
                        if (CheckCANMessage(CANMessage, ID_WRITE, DA_ACK))
                        {
                            _StepRunning++;
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                }
                //ERASE
                else if (j.Type == Job.JobType.Erase)
                {
                    if (CheckCANMessage(CANMessage, ID_ERASE, DA_NACK))
                    {
                        RunningNext(JobEventType.NACK, "NACK");
                    }

                    if (_StepRunning == 1 || _StepRunning == 3)
                    {
                        if (CheckCANMessage(CANMessage, ID_ERASE, DA_ACK))
                        {
                            _StepRunning++;
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                    else if (_StepRunning == 4)
                    {
                        if (CheckCANMessage(CANMessage, ID_ERASE, DA_ACK))
                        {
                            RunningNext();
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                }
                //GV
                else if (j.Type == Job.JobType.GetState)
                {
                    if (CheckCANMessage(CANMessage, ID_GV, DA_NACK))
                    {
                        RunningNext(JobEventType.NACK, "NACK");
                    }

                    if (_StepRunning == 1)
                    {
                        if (CheckCANMessage(CANMessage, ID_GV, DA_ACK))
                        {
                            _StepRunning++;
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                    else if (_StepRunning == 2)
                    {
                        if (CheckCANMessage(CANMessage, ID_GV, 1))
                        {
                            j.DataReceive    = new byte[3];
                            j.DataReceive[0] = CANMessage.Data[0];
                            _StepRunning++;
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                    else if (_StepRunning == 3)
                    {
                        if (CheckCANMessage(CANMessage, ID_GV, 2))
                        {
                            j.DataReceive[1] = CANMessage.Data[0];
                            j.DataReceive[2] = CANMessage.Data[1];
                            _StepRunning++;
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                    else if (_StepRunning == 4)
                    {
                        if (CheckCANMessage(CANMessage, ID_GV, DA_ACK))
                        {
                            RunningNext();
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                }
                //GO
                else if (j.Type == Job.JobType.Go)
                {
                    if (CheckCANMessage(CANMessage, ID_GO, DA_NACK))
                    {
                        RunningNext(JobEventType.NACK, "NACK");
                    }

                    if (_StepRunning == 1)
                    {
                        if (CheckCANMessage(CANMessage, ID_GO, DA_ACK))
                        {
                            RunningNext();
                        }
                        else
                        {
                            ErrorWriteLine("Unknow Message:" + CANMessage.ToString());
                        }
                    }
                }
                else
                {
                    ErrorWriteLine("Unsupport Job:" + j.Type.ToString());
                }
            }
        }