//根据变量名称写 public void SendAODO(int iAddr, int iValue, int iFun) { //(012)49 A4 00 00 00 06 05 05 00 6E FF 00 //(012)49 E5 00 00 00 06 05 06 00 11 00 00 CMessage nMsg = new CMessage(); SSend_Message temSend = new SSend_Message(); switch (iFun) { case 5: case 6: temSend.Length = 12; temSend.DataBuffer = new byte[temSend.Length]; temSend.DataBuffer[5] = 6; temSend.DataBuffer[6] = Convert.ToByte(Address); temSend.DataBuffer[7] = (Byte)iFun; temSend.DataBuffer[8] = (byte)(iAddr >> 8); temSend.DataBuffer[9] = (byte)iAddr; temSend.DataBuffer[10] = (byte)(iValue >> 8); temSend.DataBuffer[11] = (byte)iValue; nMsg.sSendMsg = temSend; ListImmSendMsg.Add(nMsg); break; default: break; } }
//组装报文 public void PacketLoopMsg(CMessage cMsg) { SSend_Message temSend = new SSend_Message(); temSend.Length = 8; temSend.DataBuffer = new byte[temSend.Length]; temSend.DataBuffer[0] = Convert.ToByte(Address); temSend.DataBuffer[1] = Convert.ToByte(cMsg.Function); int iStart = Convert.ToInt32(cMsg.Starting); temSend.DataBuffer[3] = (byte)(iStart % 256); temSend.DataBuffer[2] = (byte)(iStart >> 16); int iNum = Convert.ToInt32(cMsg.Number); temSend.DataBuffer[5] = (byte)(iNum % 256); temSend.DataBuffer[4] = (byte)(iNum >> 16); byte[] bCRC = new byte[2]; bCRC = CRC.CRC16Chk(temSend.DataBuffer, temSend.Length - 2); temSend.DataBuffer[temSend.Length - 2] = bCRC[1]; temSend.DataBuffer[temSend.Length - 1] = bCRC[0]; switch (temSend.DataBuffer[1]) { case 1: case 2: cMsg.ReLen = (byte)((iNum - 1) / 8) + 6; break; case 3: case 4: cMsg.ReLen = (byte)(iNum * 2) + 5; break; case 5: case 6: cMsg.ReLen = temSend.Length; break; case 7: cMsg.ReLen = 5; break; default: break; } cMsg.sSendMsg = temSend; cMsg.ListMsgVar.Clear(); foreach (CVar nVar in StaDevice.ListDevVar) { if (nVar.ByteAddr >= iStart && nVar.ByteAddr < iStart + iNum) { cMsg.ListMsgVar.Add(nVar.Name, nVar); } } }
public void PacketLoopMsg(CMessage cMsg)//组装循环报文 { SSend_Message temSend = new SSend_Message(); Byte iFun = Convert.ToByte(cMsg.Function); int iStart = Convert.ToInt32(cMsg.Starting); int iNum = Convert.ToInt32(cMsg.Number); switch (iFun) { case 1: case 2: temSend.Length = 12; temSend.DataBuffer = new byte[temSend.Length]; temSend.DataBuffer[5] = 6; temSend.DataBuffer[6] = Convert.ToByte(Address); temSend.DataBuffer[7] = iFun; temSend.DataBuffer[8] = (byte)(iStart >> 8); temSend.DataBuffer[9] = (byte)iStart; temSend.DataBuffer[10] = (byte)(iNum >> 8); temSend.DataBuffer[11] = (byte)iNum; break; case 3: case 4: temSend.Length = 12; temSend.DataBuffer = new byte[temSend.Length]; temSend.DataBuffer[5] = 6; temSend.DataBuffer[6] = Convert.ToByte(Address); temSend.DataBuffer[7] = iFun; temSend.DataBuffer[8] = (byte)(iStart >> 8); temSend.DataBuffer[9] = (byte)iStart; temSend.DataBuffer[10] = (byte)(iNum >> 8); temSend.DataBuffer[11] = (byte)iNum; break; case 5: case 6: break; default: break; } cMsg.sSendMsg = temSend; cMsg.ListMsgVar.Clear(); foreach (CVar nVar in StaDevice.ListDevVar) { if (nVar.ByteAddr >= iStart && nVar.ByteAddr < iStart + iNum) { cMsg.ListMsgVar.Add(nVar.Name, nVar); } } }
//组装报文 public void PacketLoopMsg(CMessage cMsg) { SSend_Message temSend = new SSend_Message(); string str2 = Address + cMsg.Function + "\r"; temSend.DataBuffer = System.Text.Encoding.Default.GetBytes(str2); temSend.Length = (byte)temSend.DataBuffer.Length; cMsg.QuLen = temSend.Length; cMsg.sSendMsg = temSend; }
//组装报文 public void PacketLoopMsg(CMessage cMsg) { SSend_Message temSend = new SSend_Message(); switch (cMsg.Function.Substring(0, 4)) { case "0101": temSend.Length = 34; temSend.DataBuffer = new byte[temSend.Length]; for (int i = 0; i < 4; i++) { temSend.DataBuffer[i] = FINSTCPHeader[i]; } int iLen = temSend.Length - 8; temSend.DataBuffer[4] = (byte)(iLen >> 24); temSend.DataBuffer[5] = (byte)(iLen >> 16); temSend.DataBuffer[6] = (byte)(iLen >> 8); temSend.DataBuffer[7] = (byte)iLen; temSend.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSend.DataBuffer[i + 16] = FINSHeader[i]; } for (int i = 0; i < 3; i++) { temSend.DataBuffer[i + 26] = Convert.ToByte(cMsg.Function.Substring(i * 2, 2), 16); } iLen = Convert.ToInt32(cMsg.Starting); temSend.DataBuffer[29] = (byte)(iLen >> 8); temSend.DataBuffer[30] = (byte)iLen; iLen = Convert.ToInt32(cMsg.Number); temSend.DataBuffer[32] = (byte)(iLen >> 8); temSend.DataBuffer[33] = (byte)iLen; break; case "0102": break; default: break; } cMsg.sSendMsg = temSend; cMsg.ListMsgVar.Clear(); // foreach (CVar nVar in StaDevice.ListDevVar) // { //if (Convert.ToInt32(nVar.IntTag[0]) == cMsg.Message_No) // cMsg.ListMsgVar.Add(nVar.Name, nVar); // } }
public void SendWriteIdle()//下发写Idle值 { for (int kk = 5; kk < 7; kk++) { SSend_Message temSet = new SSend_Message(); int iLen = intEnd - intStart; CMessage nMsg = new CMessage(); temSet.Length = 34 + iLen * 2; temSet.DataBuffer = new byte[temSet.Length]; for (int i = 0; i < 4; i++) { temSet.DataBuffer[i] = FINSTCPHeader[i]; } int iNum = temSet.Length - 8; temSet.DataBuffer[4] = (byte)(iNum >> 24); temSet.DataBuffer[5] = (byte)(iNum >> 16); temSet.DataBuffer[6] = (byte)(iNum >> 8); temSet.DataBuffer[7] = (byte)iNum; temSet.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSet.DataBuffer[i + 16] = FINSHeader[i]; } temSet.DataBuffer[26] = 1; temSet.DataBuffer[27] = 2; temSet.DataBuffer[28] = 130; temSet.DataBuffer[29] = (byte)((intStart + (kk - 3) * 1000) >> 8); temSet.DataBuffer[30] = (byte)(intStart + (kk - 3) * 1000); temSet.DataBuffer[33] = (byte)iLen; foreach (CVar nVar in StaDevice.ListDevVar) { if (nVar.ByteAddr >= intStart && nVar.ByteAddr < intEnd) { int ibyte = nVar.ByteAddr; if (ibyte < intStart || ibyte > intEnd) { continue; } long iValue = (long)nVar.IntTag[kk]; temSet.DataBuffer[34 + (ibyte - intStart) * 2] = (byte)(iValue >> 8); temSet.DataBuffer[35 + (ibyte - intStart) * 2] = (byte)iValue; } } nMsg.sSendMsg = temSet; ListImmSendMsg.Add(nMsg); Debug.WriteLine("SendWriteIdle.ListImmSendMsg"); } }
public override bool Write(SSend_Message sSend) { if (bOpen) {//写串口数据 try { //n_SerialPort.WriteLine(sSendData); n_SerialPort.Write(sSend.DataBuffer, 0, sSend.Length); } catch (Exception) { return(false); } } return(true); }
//界面操作 public void SendAODO(string sVar, double fValue, string sType) { foreach (CVar nVar in StaDevice.ListDevVar) { if (nVar.Name == sVar) { SSend_Message temSet = new SSend_Message(); int iLen; CMessage nMsg = new CMessage(); switch (sType) { case "AO": //AO 需要处理变比 int iValue = (int)Math.Round(fValue / nVar.RatioValue); temSet.Length = 36; temSet.DataBuffer = new byte[temSet.Length]; for (int i = 0; i < 4; i++) { temSet.DataBuffer[i] = FINSTCPHeader[i]; } iLen = temSet.Length - 8; temSet.DataBuffer[4] = (byte)(iLen >> 24); temSet.DataBuffer[5] = (byte)(iLen >> 16); temSet.DataBuffer[6] = (byte)(iLen >> 8); temSet.DataBuffer[7] = (byte)iLen; temSet.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSet.DataBuffer[i + 16] = FINSHeader[i]; } temSet.DataBuffer[26] = 1; temSet.DataBuffer[27] = 2; temSet.DataBuffer[28] = 130; iLen = nVar.ByteAddr + 1000; temSet.DataBuffer[29] = (byte)(iLen >> 8); temSet.DataBuffer[30] = (byte)iLen; temSet.DataBuffer[33] = 1; temSet.DataBuffer[34] = (byte)(iValue >> 8); temSet.DataBuffer[35] = (byte)iValue; nMsg.sSendMsg = temSet; ListImmSendMsg.Add(nMsg); Debug.WriteLine("SendAODO:AO.ListImmSendMsg"); break; } } } }
public int Length; //发送报文长度=循环报文长度+非循环报文长度 public SSend_Message Clone() { SSend_Message obj = (SSend_Message)this.MemberwiseClone(); if (DataBuffer != null) { obj.DataBuffer = new byte[DataBuffer.Length]; for (int i = 0; i < DataBuffer.Length; i++) { obj.DataBuffer[i] = DataBuffer[i]; } } else { obj.DataBuffer = new byte[1]; } return(obj); }
/// <summary> /// 下发写多值 /// </summary> /// <param name="SendBuff">发送的字节buf</param> /// <param name="intStart">起始地址</param> /// <param name="iLen">数据长度</param> public void SendRun(byte[] SendBuff, int intStart, int iLen)//下发配方 { try { SSend_Message temSet = new SSend_Message(); CMessage nMsg = new CMessage(); temSet.Length = 34 + iLen * 2; temSet.DataBuffer = new byte[temSet.Length]; for (int i = 0; i < 4; i++) { temSet.DataBuffer[i] = FINSTCPHeader[i]; } int iNum = temSet.Length - 8; temSet.DataBuffer[4] = (byte)(iNum >> 24); temSet.DataBuffer[5] = (byte)(iNum >> 16); temSet.DataBuffer[6] = (byte)(iNum >> 8); temSet.DataBuffer[7] = (byte)iNum; temSet.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSet.DataBuffer[i + 16] = FINSHeader[i]; } temSet.DataBuffer[26] = 1; temSet.DataBuffer[27] = 2; temSet.DataBuffer[28] = 130; temSet.DataBuffer[29] = (byte)(intStart >> 8); temSet.DataBuffer[30] = (byte)intStart; temSet.DataBuffer[33] = (byte)iLen; for (int i = 0; i < Math.Min(SendBuff.Length, iLen * 2); i++) { temSet.DataBuffer[34 + i] = SendBuff[i]; } nMsg.sSendMsg = temSet; ListImmSendMsg.Add(nMsg); //Debug.WriteLine("SendRun.ListImmSendMsg"); } catch (Exception ex) { Debug.WriteLine("CProtcolFINS.SendRun" + ex.Message); } }
//写报文到以太网口 public virtual bool Write(SSend_Message sSend) { if (CommStateE != ECommSatate.Unknown) {//写串口数据 try { //n_SerialPort.WriteLine(sSendData); netstream.Write(sSend.DataBuffer, 0, sSend.Length); if (bDebug) { string sShow1 = ""; for (int i = 0; i < LastSendMsg.sSendMsg.Length; i++) { sShow1 += LastSendMsg.sSendMsg.DataBuffer[i].ToString("X2") + " "; } frmShow.InsertText(sShow1, "PLC;Send", LastSendMsg.sSendMsg.Length); } string sShow = ""; for (int i = 0; i < sSend.Length; i++) { sShow += sSend.DataBuffer[i].ToString("X2") + " "; } //if(sSend.DataBuffer[27]!=1) string strAdd = " "; if (sSend.Length > 30) { strAdd += ((sSend.DataBuffer[29] << 8) + sSend.DataBuffer[30]).ToString("0000"); } sShow = DateTime.Now.ToLongTimeString() + "PLCSend:" + sShow + " (" + sSend.Length.ToString() + ")" + strAdd; //Debug.WriteLine(sShow); ListStrMsg.Add(sShow); } catch (Exception) { return(false); } } return(true); }
public void SendReadIdle()//下发读Idle报文 { for (int kk = 2; kk < 4; kk++) { SSend_Message temSend = new SSend_Message(); CMessage nMsg = new CMessage(); temSend.Length = 34; temSend.DataBuffer = new byte[temSend.Length]; for (int i = 0; i < 4; i++) { temSend.DataBuffer[i] = FINSTCPHeader[i]; } int iLen = temSend.Length - 8; temSend.DataBuffer[4] = (byte)(iLen >> 24); temSend.DataBuffer[5] = (byte)(iLen >> 16); temSend.DataBuffer[6] = (byte)(iLen >> 8); temSend.DataBuffer[7] = (byte)iLen; temSend.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSend.DataBuffer[i + 16] = FINSHeader[i]; } string Function = "010182"; for (int i = 0; i < 3; i++) { temSend.DataBuffer[i + 26] = Convert.ToByte(Function.Substring(i * 2, 2), 16); } int iStart = intStart + kk * 1000; temSend.DataBuffer[29] = (byte)(iStart >> 8); temSend.DataBuffer[30] = (byte)iStart; iLen = intEnd - intStart; temSend.DataBuffer[32] = (byte)(iLen >> 8); temSend.DataBuffer[33] = (byte)iLen; nMsg.sSendMsg = temSend; nMsg.Starting = iStart.ToString(); ListImmSendMsg.Add(nMsg); Debug.WriteLine("SendReadIdle.ListImmSendMsg"); } }
//界面操作 public void SendAODO(string sVar, int iValue, string sType) { if (sType == "SY") { SSend_Message temSet = new SSend_Message(); int iLen; CMessage nMsg = new CMessage(); temSet.Length = 36; temSet.DataBuffer = new byte[temSet.Length]; for (int i = 0; i < 4; i++) { temSet.DataBuffer[i] = FINSTCPHeader[i]; } iLen = temSet.Length - 8; temSet.DataBuffer[4] = (byte)(iLen >> 24); temSet.DataBuffer[5] = (byte)(iLen >> 16); temSet.DataBuffer[6] = (byte)(iLen >> 8); temSet.DataBuffer[7] = (byte)iLen; temSet.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSet.DataBuffer[i + 16] = FINSHeader[i]; } temSet.DataBuffer[26] = 1; temSet.DataBuffer[27] = 2; temSet.DataBuffer[28] = 130; iLen = Convert.ToInt32(sVar); temSet.DataBuffer[29] = (byte)(iLen >> 8); temSet.DataBuffer[30] = (byte)iLen; temSet.DataBuffer[33] = 1; temSet.DataBuffer[34] = (byte)(iValue >> 8); temSet.DataBuffer[35] = (byte)iValue; nMsg.sSendMsg = temSet; ListImmSendMsg.Add(nMsg); CAlarmMsgEventArgs e = new CAlarmMsgEventArgs(); e.Date_Time = DateTime.Now; e.Recorder = GetMsg(sVar, iValue); e.priority = EAlarmPriority.PRIORITY_1; e.eAlarmType = EAlarmType.ManualAct; e.StaName = Name; if (e.Recorder != "") { staAlarm.OnAlarmEvent(e); } return; } foreach (CVar nVar in StaDevice.ListDevVar) { if (nVar.Name == sVar) { SSend_Message temSet = new SSend_Message(); int iLen; CMessage nMsg = new CMessage(); switch (sType) { case "AO": //AO 需要处理变比 iValue = (int)Math.Round(iValue / nVar.RatioValue); temSet.Length = 36; temSet.DataBuffer = new byte[temSet.Length]; for (int i = 0; i < 4; i++) { temSet.DataBuffer[i] = FINSTCPHeader[i]; } iLen = temSet.Length - 8; temSet.DataBuffer[4] = (byte)(iLen >> 24); temSet.DataBuffer[5] = (byte)(iLen >> 16); temSet.DataBuffer[6] = (byte)(iLen >> 8); temSet.DataBuffer[7] = (byte)iLen; temSet.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSet.DataBuffer[i + 16] = FINSHeader[i]; } temSet.DataBuffer[26] = 1; temSet.DataBuffer[27] = 2; temSet.DataBuffer[28] = 130; iLen = nVar.ByteAddr + 1000; temSet.DataBuffer[29] = (byte)(iLen >> 8); temSet.DataBuffer[30] = (byte)iLen; temSet.DataBuffer[33] = 1; temSet.DataBuffer[34] = (byte)(iValue >> 8); temSet.DataBuffer[35] = (byte)iValue; nMsg.sSendMsg = temSet; ListImmSendMsg.Add(nMsg); Debug.WriteLine("SendAODO:AO.ListImmSendMsg"); break; case "AO2": //AO2 不需要处理变比 temSet.Length = 36; temSet.DataBuffer = new byte[temSet.Length]; for (int i = 0; i < 4; i++) { temSet.DataBuffer[i] = FINSTCPHeader[i]; } iLen = temSet.Length - 8; temSet.DataBuffer[4] = (byte)(iLen >> 24); temSet.DataBuffer[5] = (byte)(iLen >> 16); temSet.DataBuffer[6] = (byte)(iLen >> 8); temSet.DataBuffer[7] = (byte)iLen; temSet.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSet.DataBuffer[i + 16] = FINSHeader[i]; } temSet.DataBuffer[26] = 1; temSet.DataBuffer[27] = 2; temSet.DataBuffer[28] = 130; iLen = nVar.ByteAddr + 1000; temSet.DataBuffer[29] = (byte)(iLen >> 8); temSet.DataBuffer[30] = (byte)iLen; temSet.DataBuffer[33] = 1; temSet.DataBuffer[34] = (byte)(iValue >> 8); temSet.DataBuffer[35] = (byte)iValue; nMsg.sSendMsg = temSet; ListImmSendMsg.Add(nMsg); Debug.WriteLine("SendAODO:AO2.ListImmSendMsg"); break; case "DO": //DO int iByte = nVar.ByteAddr - 1000; int iBit = nVar.BitAddr; if (nVar.GetBoolValue()) { iValue = 0; } else { iValue = 1; } temSet.Length = 35; temSet.DataBuffer = new byte[temSet.Length]; for (int i = 0; i < 4; i++) { temSet.DataBuffer[i] = FINSTCPHeader[i]; } iLen = temSet.Length - 8; temSet.DataBuffer[4] = (byte)(iLen >> 24); temSet.DataBuffer[5] = (byte)(iLen >> 16); temSet.DataBuffer[6] = (byte)(iLen >> 8); temSet.DataBuffer[7] = (byte)iLen; temSet.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSet.DataBuffer[i + 16] = FINSHeader[i]; } temSet.DataBuffer[26] = 1; temSet.DataBuffer[27] = 2; temSet.DataBuffer[28] = 2; temSet.DataBuffer[29] = (byte)(iByte >> 8); temSet.DataBuffer[30] = (byte)iByte; temSet.DataBuffer[31] = (byte)(iBit); temSet.DataBuffer[33] = 1; //iValue = 0; temSet.DataBuffer[34] = (byte)iValue; nMsg.sSendMsg = temSet; ListImmSendMsg.Add(nMsg); Debug.WriteLine("SendAODO:DO.ListImmSendMsg"); // ListImmSendMsg.Add(SendMag8000); break; case "DO2": //DO iByte = nVar.ByteAddr - 1000; iBit = nVar.BitAddr; temSet.Length = 35; temSet.DataBuffer = new byte[temSet.Length]; for (int i = 0; i < 4; i++) { temSet.DataBuffer[i] = FINSTCPHeader[i]; } iLen = temSet.Length - 8; temSet.DataBuffer[4] = (byte)(iLen >> 24); temSet.DataBuffer[5] = (byte)(iLen >> 16); temSet.DataBuffer[6] = (byte)(iLen >> 8); temSet.DataBuffer[7] = (byte)iLen; temSet.DataBuffer[11] = 2; for (int i = 0; i < 10; i++) { temSet.DataBuffer[i + 16] = FINSHeader[i]; } temSet.DataBuffer[26] = 1; temSet.DataBuffer[27] = 2; temSet.DataBuffer[28] = 2; temSet.DataBuffer[29] = (byte)(iByte >> 8); temSet.DataBuffer[30] = (byte)iByte; temSet.DataBuffer[31] = (byte)(iBit); temSet.DataBuffer[33] = 1; //iValue = 0; temSet.DataBuffer[34] = (byte)iValue; nMsg.sSendMsg = temSet; ListImmSendMsg.Add(nMsg); Debug.WriteLine("SendAODO:DO2.ListImmSendMsg"); // ListImmSendMsg.Add(SendMag8000); break; } } } }
public virtual bool Write(SSend_Message sSend) { return(false); }