Exemplo n.º 1
0
        //根据变量名称写
        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;
            }
        }
Exemplo n.º 2
0
        //读取下一条报文
        private bool GetSendMsg()
        {
            try
            {
                CMessage sSend = new CMessage();

                SID++;
                if (CommStateE == ECommSatate.Failure)
                {
                    LastSendMsg = (CMessage)SendMsgHands;
                    SendMsgHandsNum++;
                    //Debug.WriteLine(SendMsgHandsNum.ToString());
                    if (LastSendMsg.sSendMsg.Length > 25)
                    {
                        LastSendMsg.sSendMsg.DataBuffer[25] = SID;
                    }
                    Write(LastSendMsg.sSendMsg);
                    return(true);
                }
                lock (this)
                {
                    if (ListImmSendMsg.Count > 0)
                    {
                        LastSendMsg = (CMessage)ListImmSendMsg[0];
                        if (LastSendMsg.sSendMsg.Length > 25)
                        {
                            LastSendMsg.sSendMsg.DataBuffer[25] = SID;
                        }
                        Write(LastSendMsg.sSendMsg);
                        ListImmSendMsg.RemoveAt(0);
                        //Debug.WriteLine(DateTime.Now.ToLongTimeString() + "CommTimerCall:GetSendMsg:ListImmSendMsg");
                        return(true);
                    }
                }

                sSend = GetNextLoopMsg();
                if (sSend.sSendMsg.Length > 0)
                {
                    LastSendMsg = sSend;
                    if (LastSendMsg.sSendMsg.Length > 25)
                    {
                        LastSendMsg.sSendMsg.DataBuffer[25] = SID;
                    }
                    Write(LastSendMsg.sSendMsg);
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("CProtcolFINS.GetSendMsg" + e.Message);
            }
            return(true);
        }
Exemplo n.º 3
0
 public void InitLoopMsg()//初始化循环发送报文ListMsgSend
 {
     ListMsgCyc.Clear();
     foreach (CMessage nMsg in StaDevice.ListMsgLoop)
     {
         nMsg.iPortIndex = this.iPortIndex;
         nMsg.iStaIndex  = this.iStaIndex;
         PacketLoopMsg(nMsg);
         ListMsgCyc.Add(nMsg);
         ListImmSendMsg.Add(nMsg); Debug.WriteLine("InitLoopMsg.ListImmSendMsg");
     }
     SendReadIdle();
 }
Exemplo n.º 4
0
        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");
            }
        }
Exemplo n.º 5
0
        //界面操作
        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;
                    }
                }
            }
        }
Exemplo n.º 6
0
        /// <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);
            }
        }
Exemplo n.º 7
0
 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");
     }
 }
Exemplo n.º 8
0
        private bool GetSendMsg()
        {
            try
            {
                CMessage sSend = new CMessage();

                iSendNum++;

                lock (this)
                {
                    if (ListImmSendMsg.Count > 0)
                    {
                        LastSendMsg = (CMessage)ListImmSendMsg[0];
                        LastSendMsg.sSendMsg.DataBuffer[0] = (Byte)(iSendNum >> 8);
                        LastSendMsg.sSendMsg.DataBuffer[1] = (Byte)iSendNum;
                        Write();
                        ListImmSendMsg.RemoveAt(0);
                        return(true);
                    }
                }

                sSend = GetNextLoopMsg();
                if (sSend.sSendMsg.Length > 0)
                {
                    LastSendMsg = sSend;
                    LastSendMsg.sSendMsg.DataBuffer[0] = (Byte)(iSendNum >> 8);
                    LastSendMsg.sSendMsg.DataBuffer[1] = (Byte)iSendNum;
                    Write();
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("CProtcolModbusTCP.GetSendMsg" + e.Message);
            }
            return(true);
        }
Exemplo n.º 9
0
        //界面操作
        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;
                    }
                }
            }
        }