Esempio n. 1
0
 public static extern bool gambatte_getmemoryarea(IntPtr core, MemoryAreas which, ref IntPtr data, ref int length);
Esempio n. 2
0
 public static extern void GetMemoryAreas(IntPtr g, [Out] MemoryAreas mem);
Esempio n. 3
0
 public static extern void BizGetMemoryAreas(IntPtr ctx, [Out] MemoryAreas dst);
Esempio n. 4
0
		public static extern bool gambatte_getmemoryarea(IntPtr core, MemoryAreas which, ref IntPtr data, ref int length);
Esempio n. 5
0
 public abstract bool sameboy_getmemoryarea(IntPtr core, MemoryAreas which, ref IntPtr data, ref int length);
Esempio n. 6
0
 public abstract void BizGetMemoryAreas(IntPtr ctx, [Out] MemoryAreas dst);
        private static bool IsVariableTypeValidForAddress(PlcMemoryModes operatingMode, MemoryAreas area, VariableTypes variableType, int memoryAddress, bool writeRequired)
        {
            if (operatingMode == PlcMemoryModes.CSCJMode)
            {
                switch (area)
                {
                    case MemoryAreas.CIO:

                        switch (variableType)
                        {
                            case VariableTypes.Bit:
                            case VariableTypes.BitWithForcedStatus:
                                Contract.Assert(memoryAddress.Between(0, 614315), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            case VariableTypes.Word:
                            case VariableTypes.WordWithForcedStatus:
                                Contract.Assert(memoryAddress.Between(0, 6143), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            default:
                                throw new InvalidOperationException("The variable type is not valid for this memory address");
                        }
                    case MemoryAreas.WR:
                        switch (variableType)
                        {
                            case VariableTypes.Bit:
                            case VariableTypes.BitWithForcedStatus:
                                Contract.Assert(memoryAddress.Between(0, 51115), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            case VariableTypes.Word:
                            case VariableTypes.WordWithForcedStatus:
                                Contract.Assert(memoryAddress.Between(0, 511), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            default:
                                throw new InvalidOperationException("The variable type is not valid for this memory address");
                        }
                    case MemoryAreas.DM:
                        switch (variableType)
                        {
                            case VariableTypes.Bit:
                                Contract.Assert(memoryAddress.Between(0, 3276715), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            case VariableTypes.Word:
                                Contract.Assert(memoryAddress.Between(0, 32767), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            default:
                                throw new InvalidOperationException("The variable type is not valid for this memory address");
                        }
                    case MemoryAreas.HR:
                        switch (variableType)
                        {
                            case VariableTypes.Bit:
                            case VariableTypes.BitWithForcedStatus:
                                Contract.Assert(memoryAddress.Between(0, 51115), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            case VariableTypes.Word:
                            case VariableTypes.WordWithForcedStatus:
                                Contract.Assert(memoryAddress.Between(0, 511), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            default:
                                throw new InvalidOperationException("The variable type is not valid for this memory address");
                        }

                    case MemoryAreas.AR:
                        switch (variableType)
                        {
                            case VariableTypes.Bit:
                            case VariableTypes.BitWithForcedStatus:
                                if (writeRequired)
                                {
                                    Contract.Assert(memoryAddress.Between(44800, 95915), String.Format("This memory address is out of range for {0} using the {1} data type. As this is a write operation the memory area must be between: {2} and {3}", area, variableType, 44800, 95915));
                                }
                                else
                                {
                                    Contract.Assert(memoryAddress.Between(0, 44715), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                }
                                return true;
                            default:
                                throw new InvalidOperationException("The variable type is not valid for this memory address");
                        }

                    case MemoryAreas.TIM:
                        switch (variableType)
                        {
                            case VariableTypes.CompletionFlag:
                            case VariableTypes.CompletionFlagWithForcedStatus:
                                Contract.Assert(memoryAddress.Between(0, 4095), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            default:
                                throw new InvalidOperationException("The variable type is not valid for this memory address");
                        }
                    case MemoryAreas.CNT:
                        switch (variableType)
                        {
                            case VariableTypes.CompletionFlag:
                            case VariableTypes.CompletionFlagWithForcedStatus:
                                Contract.Assert(memoryAddress.Between(0, 4095), String.Format("This memory address is out of range for {0} using the {1} data type", area, variableType));
                                return true;
                            default:
                                throw new InvalidOperationException("The variable type is not valid for this memory address");
                        }

                    default:
                        throw new InvalidOperationException(String.Format("Invalid memory area detected {0}", area));
                }

            }
            else
            {
                throw new NotImplementedException();
            }
        }
        private static byte ParseMemoryAreaCode(VariableTypes variableType, PlcMemoryModes mode, MemoryAreas memoryArea)
        {
            {
                if (mode == PlcMemoryModes.CSCJMode)
                {
                    switch (variableType)
                    {
                        case VariableTypes.Bit:
                            switch (memoryArea)
                            {
                                case MemoryAreas.CIO:
                                    return Convert.ToByte("30", 16);
                                case MemoryAreas.WR:
                                    return Convert.ToByte("31", 16);
                                case MemoryAreas.HR:
                                    return Convert.ToByte("32", 16);
                                case MemoryAreas.AR:
                                    return Convert.ToByte("33", 16);
                                case MemoryAreas.DM:
                                    return Convert.ToByte("02", 16);
                                case MemoryAreas.TK:
                                    return Convert.ToByte("06", 16);
                                default:
                                    throw new InvalidOperationException(String.Format("The memory area {0} is not valid when using {1} mode when using the memory area as {2} ", memoryArea, mode, variableType));
                            }
                        case VariableTypes.BitWithForcedStatus:
                            switch (memoryArea)
                            {
                                case MemoryAreas.CIO:
                                    return Convert.ToByte("70", 16);
                                case MemoryAreas.WR:
                                    return Convert.ToByte("71", 16);
                                case MemoryAreas.HR:
                                    return Convert.ToByte("72", 16);
                                default:
                                    throw new InvalidOperationException(String.Format("The memory area {0} is not valid when using {1} mode when using the memory area as {2} ", memoryArea, mode, variableType));
                            }
                        case VariableTypes.Word:
                            switch (memoryArea)
                            {
                                case MemoryAreas.CIO:
                                    return Convert.ToByte("B0", 16);
                                case MemoryAreas.WR:
                                    return Convert.ToByte("B1", 16);
                                case MemoryAreas.HR:
                                    return Convert.ToByte("B2", 16);
                                case MemoryAreas.AR:
                                    return Convert.ToByte("B3", 16);
                                case MemoryAreas.DM:
                                    return Convert.ToByte("82", 16);
                                default:
                                    throw new InvalidOperationException(String.Format("The memory area {0} is not valid when using {1} mode when using the memory area as {2} ", memoryArea, mode, variableType));
                            }
                        case VariableTypes.WordWithForcedStatus:
                            switch (memoryArea)
                            {
                                case MemoryAreas.CIO:
                                    return Convert.ToByte("F0", 16);
                                case MemoryAreas.WR:
                                    return Convert.ToByte("F1", 16);
                                case MemoryAreas.HR:
                                    return Convert.ToByte("F2", 16);
                                default:
                                    throw new InvalidOperationException(String.Format("The memory area {0} is not valid when using {1} mode when using the memory area as {2} ", memoryArea, mode, variableType));
                            }
                        case VariableTypes.CompletionFlag:
                            switch (memoryArea)
                            {
                                case MemoryAreas.TIM:
                                case MemoryAreas.CNT:
                                    return Convert.ToByte("09", 16);
                                default:
                                    throw new InvalidOperationException(String.Format("The memory area {0} is not valid when using {1} mode when using the memory area as {2} ", memoryArea, mode, variableType));
                            }
                        case VariableTypes.Status:
                            switch (memoryArea)
                            {
                                case MemoryAreas.TK:
                                    return Convert.ToByte("46", 16);
                                default:
                                    throw new InvalidOperationException(String.Format("The memory area {0} is not valid when using {1} mode when using the memory area as {2} ", memoryArea, mode, variableType));
                            }
                        case VariableTypes.PV:
                            switch (memoryArea)
                            {
                                case MemoryAreas.IR:
                                    return Convert.ToByte("DC", 16);
                                case MemoryAreas.DR:
                                    return Convert.ToByte("DC", 16);
                                case MemoryAreas.TIM:
                                case MemoryAreas.CNT:
                                    return Convert.ToByte("89", 16);
                                default:
                                    throw new InvalidOperationException(String.Format("The memory area {0} is not valid when using {1} mode when using the memory area as {2} ", memoryArea, mode, variableType));
                            }
                        default:
                            throw new InvalidOperationException(String.Format("An invalid variable type {0} was used. ", variableType));
                    }

                }
                else
                {
                    //CV Mode
                    throw new NotImplementedException();
                }
            }
        }