Esempio n. 1
0
        protected bool SendGetCrntTemp(int _iAdd)
        {
            if (_iAdd < 0 || _iAdd >= m_iaCrntTemp.Length)
            {
                return(false);
            }

            byte [] baSendMsg = new byte[8];
            byte    bTemp;
            ushort  usTemp;
            int     iTemp;

            baSendMsg[0] = (byte)(_iAdd + 1);         //온도제어기 어드레스. 485라 여러개 연결 할 수 있다. 이모델은 4개까지.
            baSendMsg[1] = (byte)0x04;                //Read Input Registers Function 4
            baSendMsg[2] = (byte)0x03;                //SV설정의 Address가 0x03E8의 상위바이트.
            baSendMsg[3] = (byte)0xE8;                //SV설정의 Address가 0x03E8의 하위바이트.
            baSendMsg[4] = (byte)((1 & 0xFF00) >> 8); //데이터갯수의 상위바이트.
            baSendMsg[5] = (byte)(1 & 0x00FF);        //데이터갯수의 하위바이트.
            usTemp       = CRC16(baSendMsg, baSendMsg.Length - 2);
            iTemp        = (int)usTemp;
            bTemp        = (byte)(usTemp & 0x00FF);
            baSendMsg[6] = bTemp; //체크에러의 상위바이트  //SizeOf(TWriteSigleRegster) -2);
            bTemp        = (byte)((usTemp & 0xFF00) >> 8);
            baSendMsg[7] = bTemp; //체크에러의 하위바이트

            m_eSendCmd = TK4S_CMD.RqstCrntTemp;
            m_iSendAdd = _iAdd;

            string sTemp = baSendMsg.ToString();

            SendMsg(baSendMsg);
            return(true);
        }
Esempio n. 2
0
        public bool SendSetTemp(int _iAdd, int _iData)
        //    protected bool SendSetTemp(int _iAdd, int _iData )
        {
            //4개까지 연결가능
            if (_iAdd < 0 || _iAdd >= m_iaCrntTemp.Length)
            {
                return(false);
            }
            if (_iData < 0)
            {
                _iData = 0;
            }
            if (_iData > 300)
            {
                _iData = 300;
            }

            Encoding enc = Encoding.GetEncoding("iso-8859-1");

            byte [] baSendMsg = new byte[8];
            baSendMsg[0] = (byte)(_iAdd + 1);
            baSendMsg[1] = (byte)0x06;                                                     //WriteSigleRegster Function 6
            baSendMsg[2] = (byte)0x00;                                                     //SV설정의 Address가 0x0000의 상위바이트.
            baSendMsg[3] = (byte)0x00;                                                     //SV설정의 Address가 0x0000의 하위바이트.
            baSendMsg[4] = (byte)((_iData & 0xFF00) >> 8);                                 //설정값의 상위바이트.
            baSendMsg[5] = (byte)(_iData & 0x00FF);                                        //설정값의 하위바이트
            baSendMsg[6] = (byte)(CRC16(baSendMsg, baSendMsg.Length - 2) & 0x00FF);        //체크에러의 하위바이트
            baSendMsg[7] = (byte)((CRC16(baSendMsg, baSendMsg.Length - 2) & 0xFF00) >> 8); //체크에러의 상위바이트  //SizeOf(TWriteSigleRegster) -2);


            m_eSendCmd = TK4S_CMD.SetTemp;
            m_iSendAdd = _iAdd;

            SendMsg(baSendMsg);
            return(true);
        }
Esempio n. 3
0
        protected override void DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            base.DataReceived(sender, e);


            if (sRecvMsg.Length < 5)
            {
                return;
            }
            if (sSendedMsg.Length < 1)
            {
                return;
            }
            int  iConAdd  = sRecvMsg  [0] - 1;
            char cRcvFunc = sRecvMsg  [1]; //받은명령어
            char cSndFunc = sSendedMsg[1]; //보낸명령어


            if (cRcvFunc == cSndFunc + 0x80)//예외상황은 Function에 0x80이 더해져서 리턴된다.
            {
                if (!bErrMsgShow)
                {
                    Log.ShowMessage("TK4S Heater", "Exception Response with ErrCode:" + ((int)sRecvMsg[2]).ToString());
                    bErrMsgShow = true;
                }
                else
                {
                    Log.Trace("TK4S Heater", "Exception Response with ErrCode:" + sRecvMsg[2].ToString());
                }

                m_eSendCmd = TK4S_CMD.None;
                return;
            }



            if (m_eSendCmd == TK4S_CMD.RqstCrntTemp)
            {
                if (sRecvMsg.Length == 7)
                {
                    if (cRcvFunc != cSndFunc)
                    {
                        if (!bErrMsgShow)
                        {
                            Log.ShowMessage("TK4S Heater", "Send Func and Recv Func is Diffrent");
                            bErrMsgShow = true;
                        }
                        else
                        {
                            Log.Trace("TK4S Heater", "Send Func and Recv Func is Diffrent");
                        }
                    }
                    Encoding enc       = Encoding.GetEncoding("iso-8859-1");
                    byte[]   baRecvMsg = enc.GetBytes(sRecvMsg);
                    ushort   usCRC16   = CRC16(baRecvMsg, baRecvMsg.Length - 2);
                    byte     bCRC16Lo  = (byte)(usCRC16 & 0x00FF);
                    byte     bCRC16Hi  = (byte)((usCRC16 & 0xFF00) >> 8);

                    //CRC16이상.
                    if (bCRC16Lo != baRecvMsg[5] || bCRC16Hi != baRecvMsg[6])
                    {
                        if (!bErrMsgShow)
                        {
                            Log.ShowMessage("TK4S Heater", "CRC16 :(" + usCRC16.ToString() + ") is Wrong");
                            bErrMsgShow = true;
                        }
                        else
                        {
                            Log.Trace("TK4S Heater", "CRC16 :(" + usCRC16.ToString() + ") is Wrong");
                        }
                    }

                    //어드레스 이상.
                    if (iConAdd < 0 || iConAdd >= m_iaCrntTemp.Length)
                    {
                        if (!bErrMsgShow)
                        {
                            Log.ShowMessage("TK4S Heater", "iConAdd:" + iConAdd.ToString() + " is RangeOver");
                            bErrMsgShow = true;
                        }
                        else
                        {
                            Log.Trace("TK4S Heater", "iConAdd:" + iConAdd.ToString() + " is RangeOver");
                        }
                    }
                    m_iaCrntTemp[iConAdd] = baRecvMsg[3] * 256 + baRecvMsg[4];
                    m_eSendCmd            = TK4S_CMD.None;
                    //byte   bHiErr    = (CRC16(caRecvMsg, sRecvMsg.Length-2)&0xFF00>>8);
                }
            }
            else if (m_eSendCmd == TK4S_CMD.SetTemp)
            {
                if (sRecvMsg.Length == 8)
                {
                    if (sRecvMsg != sSendedMsg) //보낸메세지와 동일한 피드백
                    {
                        if (!bErrMsgShow)
                        {
                            Log.ShowMessage("TK4S Heater", "Send Func and Recv Func is Diffrent");
                            bErrMsgShow = true;
                        }
                        else
                        {
                            Log.Trace("TK4S Heater", "Send Func and Recv Func is Diffrent");
                        }
                    }

                    m_eSendCmd = TK4S_CMD.None;
                }
            }
        }