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); }
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); }
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; } } }