Esempio n. 1
0
 public cFlowTEX()
 {
     TheSerialPort = new SerialPort();
     RequestMState = eRequestMState.eFLOW;
     bActive       = false;
     RequestStatus = eRequestStatus.eSTANDBY;
     SerialMode    = eSerialMode.eCLOSED;
     flow          = 0;
     temperature   = 0;
 }
Esempio n. 2
0
        void poll()
        {
            int data = -1;

            try
            {
                if (TheSerialPort.IsOpen)
                {
                    do
                    {
                        try
                        {
                            if (TheSerialPort.BytesToRead > 0)
                            {
                                data = TheSerialPort.ReadByte();
                            }
                            else
                            {
                                data = -1;
                            }
                        }
                        catch
                        {
                            data = -1;
                        }
                        finally
                        {
                            TexNET.messagePoll(data);
                            TexNET.process();
                            byte[] bufferTX = TexNET.getDataToSend();
                            if ((bufferTX != null) && (bufferTX.Length > 0))
                            {
                                TheSerialPort.Write(bufferTX, 0, bufferTX.Length);
                                TexNET.dataSent();
                            }
                        }
                    }while((data >= 0) && (TheSerialPort.IsOpen));
                }
            }
            catch
            {
            }

            if ((bError) && (RequestStatus == eRequestStatus.eNEW_REQUEST))
            {
                RequestStatus = eRequestStatus.eFAIL;
            }

            if (TheSerialPort.IsOpen)
            {
                switch (RequestMState)
                {
                default:
                case eRequestMState.eFLOW:
                {
                    TexNET.sendRequest(cMTDOpcodes.OPC_READ_FLOW, null);
                    RequestMState = eRequestMState.eFLOW_ANSWER;
                    break;
                }

                case eRequestMState.eFLOW_ANSWER:
                {
                    if (!TexNET.isWaitingAnswer())
                    {
                        if (TexNET.getAnswer(out byte opcode, out byte[] msg, out int length))
                        {
                            if ((opcode == cMTDOpcodes.OPC_READ_FLOW) && (length >= 8))
                            {
                                flow        = BitConverter.ToSingle(msg, 0);
                                temperature = BitConverter.ToSingle(msg, 4);
                                bError      = false;
                            }
                        }
                        else
                        {
                            if (SerialMode != eSerialMode.eCLOSED)
                            {
                                portOpenRetry = 3;
                                SerialMode    = eSerialMode.eSETUP;
                                bError        = true;
                            }
                        }

                        if (RequestStatus == eRequestStatus.eNEW_REQUEST)
                        {
                            RequestMState = eRequestMState.eUSER_REQUEST;
                        }
                        else
                        {
                            RequestMState = eRequestMState.eFLOW;
                        }
                    }
                    break;
                }

                case eRequestMState.eUSER_REQUEST:
                {
                    TexNET.sendRequest(NewRequest.Opcode, NewRequest.Msg);
                    RequestStatus = eRequestStatus.eWAITTING;
                    RequestMState = eRequestMState.eUSER_ANSWER;
                    break;
                }

                case eRequestMState.eUSER_ANSWER:
                {
                    if (!TexNET.isWaitingAnswer())
                    {
                        if (TexNET.getAnswer(out byte opcode, out byte[] msg, out int length))
                        {
                            if (opcode == NewRequest.Opcode)
                            {
                                NewRequest.Opcode = opcode;
                                NewRequest.Msg    = msg;
                                NewRequest.Length = (byte)length;
                                RequestStatus     = eRequestStatus.eSUCCESS;
                                bError            = false;
                            }
                            else
                            {
                                RequestStatus = eRequestStatus.eFAIL;
                                if (SerialMode != eSerialMode.eCLOSED)
                                {
                                    portOpenRetry = 3;
                                    SerialMode    = eSerialMode.eSETUP;
                                    bError        = true;
                                }
                            }
                        }
                        else
                        {
                            RequestStatus = eRequestStatus.eFAIL;
                            if (SerialMode != eSerialMode.eCLOSED)
                            {
                                portOpenRetry = 3;
                                SerialMode    = eSerialMode.eSETUP;
                                bError        = true;
                            }
                        }

                        RequestMState = eRequestMState.eFLOW;
                    }
                    break;
                }
                }
            }
        }