Ejemplo n.º 1
0
        public DeltaReturnedData SendLongSizeRequest(DeltaMsgType bCommand, DeltaMemType bType, int iAddress, int iSize)
        {
            // Size is bigger then allowed - we have to send few messages
            DeltaReturnedData Result = new DeltaReturnedData();

            Result.IntValue = new int[iSize];
            int TmpSize = iSize;

            while (TmpSize > MAX_16BIT_SIZE)
            {
                DeltaReturnedData Incoming = this.SendNewMessage(bCommand, bType, (iAddress + iSize - TmpSize), MAX_16BIT_SIZE);
                if (Incoming.IntValue == null)
                {
                    return(Result);
                }
                Array.Copy(Incoming.IntValue, 0, Result.IntValue, iSize - TmpSize, MAX_16BIT_SIZE);
                TmpSize -= MAX_16BIT_SIZE;
            }
            if (TmpSize > 0)
            {
                DeltaReturnedData Incoming = this.SendNewMessage(bCommand, bType, (byte)(iAddress + iSize - TmpSize), (byte)TmpSize);
                Array.Copy(Incoming.IntValue, 0, Result.IntValue, iSize - TmpSize, TmpSize);
            }
            return(Result);
        }
Ejemplo n.º 2
0
        private DeltaReturnedData ParseReceivedBuf(string RxMsg, int Size, byte DataType)
        {
            DeltaReturnedData DRD = new DeltaReturnedData();



            if (RxMsg.Substring(0, 3).Equals(STX))
            {
                switch (DataType)
                {
                case 0:
                    if (int.Parse(RxMsg.Substring(5, 2), System.Globalization.NumberStyles.HexNumber) / 2 == Size)
                    {
                        DRD.IntValue = new int[Size];
                        for (int i = 0; i < Size; i++)
                        {
                            DRD.IntValue[i] = int.Parse(RxMsg.Substring(7 + (i * 4), 4), System.Globalization.NumberStyles.HexNumber);
                            //if (DRD.IntValue[)
                        }
                    }
                    break;

                case 1:
                    if (int.Parse(RxMsg.Substring(5, 2), System.Globalization.NumberStyles.HexNumber) == Size / 8)
                    {
                        DRD.BitStatus = new bool[Size];
                        for (int i = 0; i < Size / 8; i++)
                        {
                            byte temp = byte.Parse(RxMsg.Substring(7 + (i * 2), 2), System.Globalization.NumberStyles.HexNumber);
                            for (int j = 0; j < 8; j++)
                            {
                                DRD.BitStatus[(i * 8) + j] = Convert.ToBoolean(temp & 0x1);
                                temp >>= 1;
                            }
                        }
                    }
                    break;

                case 2:
                    if (int.Parse(RxMsg.Substring(5, 2), System.Globalization.NumberStyles.HexNumber) == (Size / 8) + 1)
                    {
                        //if (Size < 9) Size = 8;
                        DRD.BitStatus = new bool[Size];
                        for (int i = 0; i < (Size / 8); i++)
                        {
                            byte temp = byte.Parse(RxMsg.Substring(7 + (i * 2), 2), System.Globalization.NumberStyles.HexNumber);
                            for (int j = 0; j < 8; j++)
                            {
                                DRD.BitStatus[(i * 8) + j] = Convert.ToBoolean(temp & 0x1);
                                temp >>= 1;
                            }
                        }
                    }
                    break;
                }
            }
            return(DRD);
        }
Ejemplo n.º 3
0
        public DeltaReturnedData SendNewMessage(DeltaMsgType bCommand, DeltaMemType bType, int iAddress, byte bSize, List <Int16> oDataArrayToWrite = null)
        {
            byte              bcheckSum;
            string            stSendBuf;
            DeltaReturnedData Incoming = new DeltaReturnedData();

            bcheckSum = 0;
            stSendBuf = ":01";
            bcheckSum = 1; //Hex

            //kind of command
            switch (bCommand)
            {
            case DeltaMsgType.ReadCoilStatus:
                bcheckSum += (byte)DeltaMsgType.ReadCoilStatus;
                stSendBuf += Convert.ToString((byte)DeltaMsgType.ReadCoilStatus, 16).PadLeft(2, '0');
                break;

            case DeltaMsgType.ReadInputStatus:
                bcheckSum += (byte)DeltaMsgType.ReadInputStatus;
                stSendBuf += Convert.ToString((byte)DeltaMsgType.ReadInputStatus, 16).PadLeft(2, '0');
                break;

            case DeltaMsgType.ReadHoldingRegisters:
                bcheckSum += (byte)DeltaMsgType.ReadHoldingRegisters;
                stSendBuf += Convert.ToString((byte)DeltaMsgType.ReadHoldingRegisters, 16).PadLeft(2, '0');
                break;

            case DeltaMsgType.ForceSingleCoil:
                bcheckSum += (byte)DeltaMsgType.ForceSingleCoil;
                stSendBuf += Convert.ToString((byte)DeltaMsgType.ForceSingleCoil, 16).PadLeft(2, '0');
                break;

            case DeltaMsgType.PresetSingleRegister:
                bcheckSum += (byte)DeltaMsgType.PresetSingleRegister;
                stSendBuf += Convert.ToString((byte)DeltaMsgType.PresetSingleRegister, 16).PadLeft(2, '0');
                break;

            case DeltaMsgType.ForceMultipleCoils:
                bcheckSum += (byte)DeltaMsgType.ForceMultipleCoils;
                stSendBuf += Convert.ToString((byte)DeltaMsgType.ForceMultipleCoils, 16).PadLeft(2, '0');
                break;

            case DeltaMsgType.PresetMultipleRegister:
                bcheckSum += (byte)DeltaMsgType.PresetMultipleRegister;
                stSendBuf += Convert.ToString((byte)DeltaMsgType.PresetMultipleRegister, 16).PadLeft(2, '0');
                break;

            case DeltaMsgType.ReportSlaveID:
                bcheckSum += (byte)DeltaMsgType.ReportSlaveID;
                stSendBuf += Convert.ToString((byte)DeltaMsgType.ReportSlaveID, 16).PadLeft(2, '0');
                break;
            }

            //hi and lo address
            switch (bType)
            {
            case DeltaMemType.C:
                //Hibyte
                stSendBuf += Convert.ToString(((iAddress + C_OFFSET) / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + C_OFFSET) / 256);
                //Lowbyte
                stSendBuf += Convert.ToString(((iAddress + C_OFFSET) & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + C_OFFSET) & 255);
                break;

            case DeltaMemType.X:
                //Hibyte
                stSendBuf += Convert.ToString(((iAddress + X_OFFSET) / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + X_OFFSET) / 256);
                //Lowbyte
                stSendBuf += Convert.ToString(((iAddress + X_OFFSET) & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + X_OFFSET) & 255);
                break;

            case DeltaMemType.Y:
                //Hibyte
                stSendBuf += Convert.ToString(((iAddress + Y_OFFSET) / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + Y_OFFSET) / 256);
                //Lowbyte
                stSendBuf += Convert.ToString(((iAddress + Y_OFFSET) & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + Y_OFFSET) & 255);
                break;

            case DeltaMemType.T:
                //Hibyte
                stSendBuf += Convert.ToString(((iAddress + T_OFFSET) / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + T_OFFSET) / 256);
                //Lowbyte
                stSendBuf += Convert.ToString(((iAddress + T_OFFSET) & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + T_OFFSET) & 255);
                break;

            case DeltaMemType.M:
                //Hibyte
                stSendBuf += Convert.ToString(((iAddress + M_OFFSET) / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + M_OFFSET) / 256);
                //Lowbyte
                stSendBuf += Convert.ToString(((iAddress + M_OFFSET) & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + M_OFFSET) & 255);
                break;

            case DeltaMemType.D:
                //Hibyte
                stSendBuf += Convert.ToString(((iAddress + D_OFFSET) / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + D_OFFSET) / 256);
                //Lowbyte
                stSendBuf += Convert.ToString(((iAddress + D_OFFSET) & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)((iAddress + D_OFFSET) & 255);
                break;
            }

            switch (bCommand)
            {
            case DeltaMsgType.ReadInputStatus:
                //Hibyte Size
                stSendBuf += Convert.ToString((bSize / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)(bSize / 256);
                //Lowbyte Size
                stSendBuf += Convert.ToString(((bSize) & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)((bSize) & 255);
                break;

            case DeltaMsgType.ReadHoldingRegisters:
                //Hibyte Size
                stSendBuf += Convert.ToString((bSize / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)(bSize / 256);
                //Lowbyte Size
                stSendBuf += Convert.ToString((bSize & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)(bSize & 255);
                break;

            case DeltaMsgType.PresetSingleRegister:
                //Hibyte Size
                stSendBuf += Convert.ToString((oDataArrayToWrite[0] / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)(oDataArrayToWrite[0] / 256);
                //Lowbyte Size
                stSendBuf += Convert.ToString((oDataArrayToWrite[0] & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)(oDataArrayToWrite[0] & 255);
                break;

            case DeltaMsgType.PresetMultipleRegister:
                //Hibyte Size
                int registersNum = bSize;
                bSize += bSize;

                stSendBuf += Convert.ToString((registersNum / 256), 16).PadLeft(2, '0');
                bcheckSum += (byte)(registersNum / 256);
                //Lowbyte Size
                stSendBuf += Convert.ToString((registersNum & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)(registersNum & 255);

                stSendBuf += Convert.ToString((bSize & 255), 16).PadLeft(2, '0');
                bcheckSum += (byte)(bSize & 255);


                for (int i = 0; i < oDataArrayToWrite.Count; i++)
                {
                    stSendBuf += Convert.ToString((oDataArrayToWrite[i] / 256), 16).PadLeft(2, '0');
                    bcheckSum += (byte)(oDataArrayToWrite[i] / 256);
                    //Lowbyte Size
                    stSendBuf += Convert.ToString((oDataArrayToWrite[i] & 255), 16).PadLeft(2, '0');
                    bcheckSum += (byte)(oDataArrayToWrite[i] & 255);
                }

                break;

            case DeltaMsgType.ForceSingleCoil:
                if (bSize == 0)     //false
                {
                    //Hibyte Size
                    stSendBuf += "0000";
                }
                else        //true
                {
                    stSendBuf += "FF00";
                    bcheckSum += 0xFF;
                }
                break;
            }

            stSendBuf += Convert.ToString((0x100 - bcheckSum), 16).PadLeft(2, '0');
            stSendBuf  = stSendBuf.ToUpper();

            RxMsg = SendAndRecieveData(stSendBuf);

#if  DELTA_14SS
#else       //DELTA_12SA2
            RxMsg = ":0" + RxMsg;
#endif

            if (RxMsg == "")
            {
                incomingInfo.listDebugInfo.Add("No Response From unit -Check The Connection");
                return(Incoming);
            }
            // exit method if message is not valid
            //System.Diagnostics.Debug.Print(stSendBuf);
            //System.Diagnostics.Debug.Print(RxMsg);
            if (!CheckValidMessage(RxMsg))
            {
                return(Incoming);
            }

            //kind of command
            switch (bCommand)
            {
            case DeltaMsgType.ReadInputStatus:
                Incoming = ParseReceivedBuf(RxMsg, bSize, 1);
                break;

            case DeltaMsgType.ReadCoilStatus:
                Incoming = ParseReceivedBuf(RxMsg, bSize, 1);
                break;

            case DeltaMsgType.ReadHoldingRegisters:
                Incoming = ParseReceivedBuf(RxMsg, bSize, 0);
                newPressureTableReceive = true;
                break;

            case DeltaMsgType.ForceSingleCoil:
                if (!stSendBuf.Equals(RxMsg.Substring(0, RxMsg.Length - 1)))
                {
                    incomingInfo.listDebugInfo.Add("Received message is different then expected");
                }
                break;

            case DeltaMsgType.PresetSingleRegister:

                break;

            case DeltaMsgType.ForceMultipleCoils:

                break;

            case DeltaMsgType.PresetMultipleRegister:

                break;

            case DeltaMsgType.ReportSlaveID:

                break;
            }

            return(Incoming);
        }