/// <summary> /// 动作命令 /// </summary> /// <param name="struReceiveTelegram"></param> /// <param name="objTelegram"></param> private void UnpackTelegramMove(out struTelegram struReceiveTelegram, Int16[] objTelegram) { struReceiveTelegram = new struTelegram(); struReceiveTelegram.nEMSSendFlag = objTelegram[0]; struReceiveTelegram.nPLCSendFlag = objTelegram[1]; struReceiveTelegram.nTelegramType = objTelegram[2]; struReceiveTelegram.nSubTypeEMS = objTelegram[3]; struReceiveTelegram.nSubTypePLC = objTelegram[4]; //CBaseMethods.MyBase.StringToUInt32(Int16sToString(objTelegram, 6, 10, 4), out struReceiveTelegram.nEquipID); //struReceiveTelegram.strICCardID = Int16sToStringByASCII(objTelegram, 11, 22, 4); struReceiveTelegram.nEquipID = objTelegram[6]; struReceiveTelegram.strICCardID = (Convert.ToString(objTelegram[11])).PadLeft(4, '0'); struReceiveTelegram.strCarSize = Convert.ToString(objTelegram[23]); struReceiveTelegram.offCenter = objTelegram[24]; struReceiveTelegram.nWheelbase = objTelegram[25]; struReceiveTelegram.carWeight = objTelegram[26]; struReceiveTelegram.rearWheelDis = objTelegram[28]; struReceiveTelegram.nDirection = objTelegram[29]; struReceiveTelegram.strSrcLocAddr = Int16sToString(objTelegram, 30, 34, 2); struReceiveTelegram.strDestLocAddr = Int16sToString(objTelegram, 35, 39, 2); struReceiveTelegram.overallLg = objTelegram[45]; struReceiveTelegram.overHang = objTelegram[46]; struReceiveTelegram.nTelegramID = objTelegram[48]; struReceiveTelegram.nEndFlag = objTelegram[49]; }
/// <summary> /// 状态命令 /// </summary> /// <param name="objTelegram"></param> /// <param name="struSendTelegram"></param> private void PackTelegramStatus(out Int16[] objTelegram, struTelegram struSendTelegram) { objTelegram = new Int16[m_nTelegramLen]; objTelegram[0] = (Int16)struSendTelegram.nEMSSendFlag; objTelegram[1] = (Int16)struSendTelegram.nPLCSendFlag; objTelegram[2] = (Int16)struSendTelegram.nTelegramType; objTelegram[3] = (Int16)struSendTelegram.nSubTypeEMS; objTelegram[4] = (Int16)struSendTelegram.nSubTypePLC; StringToInt16s(ref objTelegram, 6, 10, 4, struSendTelegram.nEquipID.ToString()); StringToInt16s(ref objTelegram, 17, 18, 4, struSendTelegram.nSMGValidity.ToString()); objTelegram[48] = (Int16)struSendTelegram.nTelegramID; objTelegram[49] = (Int16)struSendTelegram.nEndFlag; }
/// <summary> /// 状态命令 /// </summary> /// <param name="struReceiveTelegram"></param> /// <param name="objTelegram"></param> private void UnpackTelegramStatus(out struTelegram struReceiveTelegram, Int16[] objTelegram) { struReceiveTelegram = new struTelegram(); struReceiveTelegram.nEMSSendFlag = objTelegram[0]; struReceiveTelegram.nPLCSendFlag = objTelegram[1]; struReceiveTelegram.nTelegramType = objTelegram[2]; struReceiveTelegram.nSubTypeEMS = objTelegram[3]; struReceiveTelegram.nSubTypePLC = objTelegram[4]; CBaseMethods.MyBase.StringToUInt32(Int16sToString(objTelegram, 6, 10, 4), out struReceiveTelegram.nEquipID); CBaseMethods.MyBase.StringToUInt32(Int16sToString(objTelegram, 17, 18, 4), out struReceiveTelegram.nSMGValidity); struReceiveTelegram.nTelegramID = objTelegram[48]; struReceiveTelegram.nEndFlag = objTelegram[49]; }
/// <summary> /// 打包报文 /// </summary> /// <param name="objTelegram"></param> /// <param name="struSendTelegram"></param> public void PackTelegram(out Int16[] objTelegram, struTelegram struSendTelegram) { StruSendTelegram = struSendTelegram; //m_nStatusCommandType---1074 if (struSendTelegram.nTelegramType != m_nStatusCommandType - 1000) { // 动作命令 PackTelegramMove(out objTelegram, struSendTelegram); } else { // 状态命令 PackTelegramStatus(out objTelegram, struSendTelegram); } TelegramSend.Initialize(); objTelegram.CopyTo(TelegramSend, 0); }
/// <summary> /// 动作命令 /// </summary> /// <param name="objTelegram"></param> /// <param name="struSendTelegram"></param> private void PackTelegramMove(out Int16[] objTelegram, struTelegram struSendTelegram) { objTelegram = new Int16[m_nTelegramLen]; objTelegram[0] = (Int16)struSendTelegram.nEMSSendFlag; objTelegram[1] = (Int16)struSendTelegram.nPLCSendFlag; objTelegram[2] = (Int16)struSendTelegram.nTelegramType; objTelegram[3] = (Int16)struSendTelegram.nSubTypeEMS; objTelegram[4] = (Int16)struSendTelegram.nSubTypePLC; objTelegram[6] = (Int16)struSendTelegram.nEquipID; if (!string.IsNullOrEmpty(struSendTelegram.strICCardID)) { objTelegram[11] = Convert.ToInt16(struSendTelegram.strICCardID); } if (!string.IsNullOrEmpty(struSendTelegram.strCarSize)) { objTelegram[23] = Convert.ToInt16(struSendTelegram.strCarSize); } objTelegram[24] = (Int16)struSendTelegram.offCenter; objTelegram[25] = (Int16)struSendTelegram.nWheelbase; objTelegram[26] = (Int16)struSendTelegram.carWeight; objTelegram[28] = (Int16)struSendTelegram.rearWheelDis; if (!string.IsNullOrEmpty(struSendTelegram.strSrcLocAddr)) { objTelegram[30] = Convert.ToInt16(struSendTelegram.strSrcLocAddr.Substring(0, 1)); objTelegram[31] = Convert.ToInt16(struSendTelegram.strSrcLocAddr.Substring(1, 2)); objTelegram[32] = Convert.ToInt16(struSendTelegram.strSrcLocAddr.Substring(3)); } if (!string.IsNullOrEmpty(struSendTelegram.strDestLocAddr)) { objTelegram[35] = Convert.ToInt16(struSendTelegram.strDestLocAddr.Substring(0, 1)); objTelegram[36] = Convert.ToInt16(struSendTelegram.strDestLocAddr.Substring(1, 2)); objTelegram[37] = Convert.ToInt16(struSendTelegram.strDestLocAddr.Substring(3)); } objTelegram[45] = (Int16)struSendTelegram.overallLg; objTelegram[46] = (Int16)struSendTelegram.overHang; objTelegram[48] = (Int16)struSendTelegram.nTelegramID; objTelegram[49] = (Int16)struSendTelegram.nEndFlag; }
/// <summary> /// 解析报文 /// </summary> /// <param name="struReceiveTelegram"></param> /// <param name="objTelegram"></param> public void UnpackTelegram(out struTelegram struReceiveTelegram, Int16[] objTelegram) { if (objTelegram.Count() < m_nTelegramLen) { struReceiveTelegram = new struTelegram(); return; } if (objTelegram[2] != m_nStatusCommandType) { // 动作命令 UnpackTelegramMove(out struReceiveTelegram, objTelegram); } else { // 状态命令 UnpackTelegramStatus(out struReceiveTelegram, objTelegram); } StruRecvTelegram = struReceiveTelegram; }
public struTelegram StruSendTelegram; //解析后收到的报文 public CTelegramParse() { TelegramSend = new Int16[m_nTelegramLen]; StruRecvTelegram = new struTelegram(); }