public S7DataRow(string name, S7DataRowType datatype, Block plcblock)
        {
            this.CurrentBlock = plcblock;
            this.Name = name;
            this.DataType = datatype;

            if (datatype == S7DataRowType.S5_KC || datatype == S7DataRowType.S5_C) StringSize = 2;
        }
예제 #2
0
        public S7DataRow(string name, S7DataRowType datatype, Block plcblock)
        {
            this.CurrentBlock = plcblock;
            this.Name         = name;
            this.DataType     = datatype;

            if (datatype == S7DataRowType.S5_KC || datatype == S7DataRowType.S5_C)
            {
                StringSize = 2;
            }
        }
예제 #3
0
        public static object DefaultValueForType(S7DataRowType DataType)
        {
            if (DataType == S7DataRowType.WORD)
                return (UInt16)0;
            else if (DataType == S7DataRowType.BOOL)
                return false;
            else if (DataType == S7DataRowType.BYTE)
                return (byte)0;
            else if (DataType == S7DataRowType.DWORD)
                return (UInt32)0;
            else if (DataType == S7DataRowType.INT)
                return (Int16)0;
            else if (DataType == S7DataRowType.DINT)
                return (Int32)0;
            else if (DataType == S7DataRowType.REAL)
                return (double)0;
            else if (DataType == S7DataRowType.S5TIME)
                return new TimeSpan();
            else if (DataType == S7DataRowType.TIME)
                return new TimeSpan();
            else if (DataType == S7DataRowType.DATE)
                return new DateTime(1990, 1, 1, 0, 0, 0, 0);
            else if (DataType == S7DataRowType.TIME_OF_DAY)
                return new DateTime(1990, 1, 1, 0, 0, 0, 0);
            else if (DataType == S7DataRowType.CHAR)
                return ' ';
            else if (DataType == S7DataRowType.DATE_AND_TIME)
                return new DateTime(1990, 1, 1, 0, 0, 0, 0);
            else if (DataType == S7DataRowType.STRING)
                return "";
            else if (DataType == S7DataRowType.STRUCT)
                return null;
            else if (DataType == S7DataRowType.UDT)
                return null;

            return null;
        }
        public Block DataTypeBlock { get; set; } //When the Type is SFB, FB or UDT, this contains the Block!

        public TIADataRow(string name, S7DataRowType datatype, Block block)
        {
            this.Name = name;
            this.DataType = datatype;
            this.CurrentBlock = block;
        }
예제 #5
0
        public static string ValueToString(object Value, S7DataRowType DataType)
        {
            if (DataType == S7DataRowType.S5_KY) return ((UInt16)Value / 256).ToString().PadLeft(3, '0') + "," + ((UInt16)Value % 256).ToString().PadLeft(3, '0');
            else if (DataType == S7DataRowType.S5_KF) return ((Int16)Value > 0 ? "+" : "") + Value.ToString();
            else if (DataType == S7DataRowType.S5_KH) return ((UInt16)Value).ToString("X", NumberFormatInfo.CurrentInfo).PadLeft(4, '0');
            else if (DataType == S7DataRowType.S5_KG) return SingleExtensions.ToS5(((float)Value));
            else if (DataType == S7DataRowType.S5_C || DataType == S7DataRowType.S5_KC) return "'" + ((string)Value) + "'"; //.PadLeft(4, ' ')
            else if (DataType == S7DataRowType.S5_KC) return "'" + ((string)Value).PadLeft(2, ' ') + "'";
            else if (DataType == S7DataRowType.S5_KT) return Helper.GetS5TimeFromTimeSpan(((TimeSpan)Value));
            else if (DataType == S7DataRowType.S5_KM)
            {
                var bt = BitConverter.GetBytes((UInt16)Value);
                string ret = "";
                foreach (byte b in bt)
                {
                    if (ret != "") ret = " " + ret;
                    ret = libnodave.dec2bin(b) + ret;

                }
                return ret;
            }
            else if (DataType == S7DataRowType.WORD) return "W#16#" + ((UInt16)Value).ToString("X", NumberFormatInfo.CurrentInfo);
            else if (DataType == S7DataRowType.BYTE) return "B#16#" + ((byte)Value).ToString("X", NumberFormatInfo.CurrentInfo);
            else if (DataType == S7DataRowType.DWORD) return "DW#16#" + ((UInt32)Value).ToString("X", NumberFormatInfo.CurrentInfo);
            else if (DataType == S7DataRowType.INT) return ((Int16)Value).ToString();
            else if (DataType == S7DataRowType.DINT) return "L#" + ((Int32)Value).ToString();
            else if (DataType == S7DataRowType.REAL) return ((DateTime)Value).ToString();
            else if (DataType == S7DataRowType.S5TIME)
            {
                var bt = new byte[2];
                libnodave.putS5Timeat(bt, 0, (TimeSpan)Value);
                return Helper.GetS5Time(bt[0], bt[1]);
            }
            else if (DataType == S7DataRowType.TIME)
            {
                var tm = (TimeSpan)Value;
                var ret = new StringBuilder("T#");
                if (tm.TotalMilliseconds < 0) ret.Append("-");
                if (tm.Days != 0) ret.Append(tm.Days + "D");
                if (tm.Hours != 0) ret.Append(tm.Hours + "H");
                if (tm.Minutes != 0) ret.Append(tm.Minutes + "M");
                if (tm.Seconds != 0) ret.Append(tm.Seconds + "S");
                if (tm.Milliseconds != 0 || tm.Ticks == 0) ret.Append(tm.Milliseconds + "MS");

                return ret.ToString();
            }
            else if (DataType == S7DataRowType.DATE)
            {
                DateTime ak = (DateTime)Value;
                StringBuilder sb = new StringBuilder();
                sb.Append("D#");
                sb.Append(ak.Year);
                sb.Append("-");
                sb.Append(ak.Month);
                sb.Append("-");
                sb.Append(ak.Day);
                return sb.ToString();
            }
            else if (DataType == S7DataRowType.TIME_OF_DAY)
            {
                DateTime ak = (DateTime)Value;
                StringBuilder sb = new StringBuilder();
                sb.Append("TOD#");
                sb.Append(ak.Hour);
                sb.Append(":");
                sb.Append(ak.Minute);
                sb.Append(":");
                sb.Append(ak.Second);
                sb.Append(".");
                sb.Append(ak.Millisecond.ToString().PadRight(3, '0'));
                return sb.ToString();
            }
            else if (DataType == S7DataRowType.CHAR) return ((char)Value).ToString();
            else if (DataType == S7DataRowType.DATE_AND_TIME)
            {
                DateTime ak = (DateTime)Value;
                StringBuilder sb = new StringBuilder();
                sb.Append("DT#");
                sb.Append(ak.Year.ToString().Substring(2));
                sb.Append("-");
                sb.Append(ak.Month);
                sb.Append("-");
                sb.Append(ak.Day);
                sb.Append("-");
                sb.Append(ak.Hour);
                sb.Append(":");
                sb.Append(ak.Minute);
                sb.Append(":");
                sb.Append(ak.Second);
                sb.Append(".");
                sb.Append(ak.Millisecond.ToString().PadRight(3, '0'));
                return sb.ToString();
            }
            else if (DataType == S7DataRowType.STRING) return Value.ToString();
            else if (DataType == S7DataRowType.STRUCT) return null;
            else if (DataType == S7DataRowType.UDT) return null;

            if (Value != null) return Value.ToString();

            return null;
        }
예제 #6
0
        public static object StringValueToObject(string Value, S7DataRowType DataType)
        {
            if (DataType == S7DataRowType.WORD)
                return Convert.ToUInt16(Helper.GetIntFromHexString(Value));
            else if (DataType == S7DataRowType.BOOL)
                return bool.Parse(Value);

            else if (DataType == S7DataRowType.DWORD)
                return Convert.ToUInt32(Helper.GetIntFromHexString(Value));

            else if (DataType == S7DataRowType.BYTE)
                return Convert.ToByte(Helper.GetIntFromHexString(Value));
            else if (DataType == S7DataRowType.INT)
                return Int16.Parse(Value);
            else if (DataType == S7DataRowType.DINT)
                return Int32.Parse(Value.Replace("L#", ""));
            else if (DataType == S7DataRowType.REAL)
                return double.Parse(Value);
            else if (DataType == S7DataRowType.S5TIME)
                return Helper.GetTimespanFromS5TimeorTime(Value);
            else if (DataType == S7DataRowType.TIME)
                return Helper.GetTimespanFromS5TimeorTime(Value);
            else if (DataType == S7DataRowType.DATE)
                return Helper.GetDateTimeFromDateString(Value);
            else if (DataType == S7DataRowType.TIME_OF_DAY)
                return Helper.GetDateTimeFromTimeOfDayString(Value);
            else if (DataType == S7DataRowType.CHAR)
                return Value.ToString()[1];
            else if (DataType == S7DataRowType.DATE_AND_TIME)
                return Helper.GetDateTimeFromDateAndTimeString(Value);
            else if (DataType == S7DataRowType.STRING)
                return Value.ToString();
            else if (DataType == S7DataRowType.STRUCT)
                return null;
            else if (DataType == S7DataRowType.UDT)
                return null;

            return null;
        }
예제 #7
0
        /*internal static S7DataRow GetInterface(int Start, int Count, byte[] BD, DataTypes.PLCBlockType blkTP, bool isInstanceDB, S7Block myBlk)
         * {
         *  S7DataRow parameterRoot = new S7DataRow("ROOTNODE", S7DataRowType.STRUCT, myBlk);
         *  S7DataRow parameterIN = new S7DataRow("IN", S7DataRowType.STRUCT, myBlk);
         *  S7DataRow parameterOUT = new S7DataRow("OUT", S7DataRowType.STRUCT, myBlk);
         *  S7DataRow parameterINOUT = new S7DataRow("IN_OUT", S7DataRowType.STRUCT, myBlk);
         *  S7DataRow parameterSTAT = new S7DataRow("STATIC", S7DataRowType.STRUCT, myBlk);
         *  S7DataRow parameterTEMP = new S7DataRow("TEMP", S7DataRowType.STRUCT, myBlk);
         *  S7DataRow parameterRETVAL = new S7DataRow("RET_VAL", S7DataRowType.STRUCT, myBlk);
         *
         *
         *  parameterRoot.Add(parameterIN);
         *  parameterRoot.Add(parameterOUT);
         *  parameterRoot.Add(parameterINOUT);
         *  if (blkTP == DataTypes.PLCBlockType.FB || (blkTP == DataTypes.PLCBlockType.DB && isInstanceDB))
         *      parameterRoot.Add(parameterSTAT);
         *  if (blkTP != DataTypes.PLCBlockType.DB)
         *      parameterRoot.Add(parameterTEMP);
         *  parameterRoot.Add(parameterRETVAL);
         *  parameterRoot.ReadOnly = true;
         *
         *  if (blkTP == DataTypes.PLCBlockType.DB && !isInstanceDB)
         *      parameterRoot = parameterSTAT;
         *
         *  //PLCDataRowsInterface retVal = new PLCDataRowsInterface();
         *  int INcnt = 0;
         *  int OUTcnt = 0;
         *  int IN_OUTcnt = 0;
         *  int STATcnt = 0;
         *  int TEMPcnt = 0;
         *  int StackNr = 1;
         *
         *
         *  int pos = Start + 4;
         *  string parNm = "";
         *
         *  S7DataRow akParameter = parameterRoot;
         *
         *
         *  while (pos <= (Start + Count))
         *  {
         *      switch (BD[pos + 1])
         *      {
         *          case 0x01:
         *          case 0x09: //with start val
         *              akParameter = parameterIN;
         *              parNm = "IN";
         *              break;
         *          case 0x02:
         *          case 0x0A: //with start val
         *              akParameter = parameterOUT;
         *              parNm = "OUT";
         *              break;
         *          case 0x03:
         *          case 0x0b: //with start val
         *              akParameter = parameterINOUT;
         *              parNm = "IN_OUT";
         *              break;
         *          case 0x04:
         *          case 0x0C: //with start val
         *              akParameter = parameterSTAT;
         *              parNm = "STAT";
         *              break;
         *          case 0x05:
         *              akParameter = parameterTEMP;
         *              parNm = "TEMP";
         *              break;
         *          case 0x06:
         *              akParameter = parameterRETVAL;
         *              parNm = "RET_VAL";
         *              break;
         *      }
         *
         *
         *      pos += 2;
         *  }
         *  return parameterRoot;
         * }*/

        //internal PLCDataRow GetInterfaceSubrows(PLCDataRow currRow)


        internal static void GetVarTypeEN(S7DataRow currPar, object startVal, byte b, bool Struct, bool Arry, string VarName, byte[] interfaceBytes, byte[] actualvalueBytes, ref int pos, ref List <string> ParaList, ref int StackNr, string VarNamePrefix, ref int VarCounter, ref int Valpos, S7Block myBlk)
        {
            int i, max, dim;

            S7DataRowType Result = S7DataRowType.BOOL;

            switch (b)
            {
            case 0x01:
                Result = S7DataRowType.BOOL;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x02:
                Result = S7DataRowType.BYTE;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x03:
                Result = S7DataRowType.CHAR;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x04:
                Result = S7DataRowType.WORD;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x05:
                Result = S7DataRowType.INT;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x06:
                Result = S7DataRowType.DWORD;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x07:
                Result = S7DataRowType.DINT;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x08:
                Result = S7DataRowType.REAL;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x09:
                Result = S7DataRowType.DATE;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x0A:
                Result = S7DataRowType.TIME_OF_DAY;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x0b:
                Result = S7DataRowType.TIME;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x0C:
                Result = S7DataRowType.S5TIME;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x0E:
                Result = S7DataRowType.DATE_AND_TIME;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x10:     //Array...
            {
                dim = interfaceBytes[pos + 2];
                List <int> arrStart = new List <int>();
                List <int> arrStop  = new List <int>();

                for (i = 0; i <= dim - 1; i++)
                {
                    arrStart.Add(BitConverter.ToInt16(interfaceBytes, pos + 3 + (i * 4)));
                    arrStop.Add(BitConverter.ToInt16(interfaceBytes, pos + 5 + (i * 4)));
                }
                GetVarTypeEN(currPar, "", interfaceBytes[pos + 3 + (dim * 4)], true, true, VarName, interfaceBytes, actualvalueBytes, ref pos, ref ParaList, ref StackNr, VarNamePrefix, ref VarCounter, ref Valpos, myBlk);
                ((S7DataRow)currPar.Children[currPar.Children.Count - 1]).ArrayStart = arrStart;
                ((S7DataRow)currPar.Children[currPar.Children.Count - 1]).ArrayStop  = arrStop;
                ((S7DataRow)currPar.Children[currPar.Children.Count - 1]).IsArray    = true;
                pos += 3 + (dim * 4);
            } break;

            case 0x11:     //Struct
            {
                if (Arry)
                {
                    pos += 7;
                }
                Result = S7DataRowType.STRUCT;
                var akPar = new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    StartValue = startVal
                };
                currPar.Add(akPar);
                VarCounter++;
                max = interfaceBytes[pos + 2] - 1;
                for (i = 0; i <= max; i++)
                {
                    if ((interfaceBytes[pos + 3] == 0x11) || (interfaceBytes[pos + 3] == 0x10))
                    {
                        pos += 3;


                        if (Helper.IsWithStartVal(interfaceBytes[pos + 1]))
                        {
                            if (interfaceBytes[pos] != 0x10)         //Datentyp == Array...
                            {
                                startVal = GetVarTypeVal(interfaceBytes[pos], actualvalueBytes, ref Valpos);
                            }
                            else
                            {
                                Valpos   = Valpos + 6;
                                startVal = GetVarTypeVal(interfaceBytes[pos + 3 + (interfaceBytes[pos + 2] * 4)], actualvalueBytes, ref Valpos);
                            }
                        }
                        else
                        {
                            startVal = null;
                        }


                        GetVarTypeEN(akPar, startVal, interfaceBytes[pos], true, false, VarName + "." + VarNamePrefix + VarCounter.ToString(), interfaceBytes, actualvalueBytes, ref pos, ref ParaList, ref StackNr, VarNamePrefix, ref VarCounter, ref Valpos, myBlk);
                        pos -= 3;
                    }
                    else
                    {
                        if (Helper.IsWithStartVal(interfaceBytes[pos + 4]))
                        {
                            if (interfaceBytes[pos] != 0x10)         //Datentyp == Array...
                            {
                                startVal = GetVarTypeVal(interfaceBytes[pos + 3], actualvalueBytes, ref Valpos);
                            }
                            else
                            {
                                Valpos   = Valpos + 6;
                                startVal = GetVarTypeVal(interfaceBytes[pos + 6 + (interfaceBytes[pos + 2] * 4)], actualvalueBytes, ref Valpos);
                            }
                        }
                        else
                        {
                            startVal = null;
                        }

                        GetVarTypeEN(akPar, startVal, interfaceBytes[pos + 3], true, false, VarName + "." + VarNamePrefix + VarCounter.ToString(), interfaceBytes, actualvalueBytes, ref pos, ref ParaList, ref StackNr, VarNamePrefix, ref VarCounter, ref Valpos, myBlk);
                    }
                    pos += 2;
                }
                if (Arry)
                {
                    pos -= 7;
                }
                pos += 1;
            } break;

            case 0x13:
            {
                Result = S7DataRowType.STRING;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                    {
                        Value = startVal
                    });
                if (Arry)
                {
                    currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                        {
                            Value = startVal, StringSize = interfaceBytes[pos + 9]
                        });
                }
                else
                {
                    currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                        {
                            Value = startVal, StringSize = interfaceBytes[pos + 2]
                        });
                }
                pos += 1;
                VarCounter++;
            }
            break;

            case 0x14:
                Result = S7DataRowType.POINTER;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x16:
                Result = S7DataRowType.ANY;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x17:
                Result = S7DataRowType.BLOCK_FB;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x18:
                Result = S7DataRowType.BLOCK_FC;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x19:
                Result = S7DataRowType.BLOCK_DB;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x1A:
                Result = S7DataRowType.BLOCK_SDB;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x1C:
                Result = S7DataRowType.COUNTER;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;

            case 0x1D:
                Result = S7DataRowType.TIMER;
                currPar.Add(new S7DataRow(VarNamePrefix + VarCounter.ToString(), Result, myBlk)
                {
                    Value = startVal
                });
                VarCounter++;
                break;
                //default: Result = "UNKNOWN (" + Convert.ToString(b) + ")"; break;
            }
            //if (!Struct || Arry)
            {
                ParaList.Add(VarName);
                //Result = Result + "(" + Convert.ToString(StackNr * 2) + ")";
                StackNr = StackNr + 1;
            }

            //return Result;
        }
예제 #8
0
        public static object StringValueToObject(string Value, S7DataRowType DataType)
        {
            if (DataType == S7DataRowType.WORD)
            {
                return(Convert.ToUInt16(Helper.GetIntFromHexString(Value)));
            }
            else if (DataType == S7DataRowType.BOOL)
            {
                return(bool.Parse(Value));
            }

            else if (DataType == S7DataRowType.DWORD)
            {
                return(Convert.ToUInt32(Helper.GetIntFromHexString(Value)));
            }

            else if (DataType == S7DataRowType.BYTE)
            {
                return(Convert.ToByte(Helper.GetIntFromHexString(Value)));
            }
            else if (DataType == S7DataRowType.INT)
            {
                return(Int16.Parse(Value));
            }
            else if (DataType == S7DataRowType.DINT)
            {
                return(Int32.Parse(Value.Replace("L#", "")));
            }
            else if (DataType == S7DataRowType.REAL)
            {
                return(double.Parse(Value));
            }
            else if (DataType == S7DataRowType.S5TIME)
            {
                return(Helper.GetTimespanFromS5TimeorTime(Value));
            }
            else if (DataType == S7DataRowType.TIME)
            {
                return(Helper.GetTimespanFromS5TimeorTime(Value));
            }
            else if (DataType == S7DataRowType.DATE)
            {
                return(Helper.GetDateTimeFromDateString(Value));
            }
            else if (DataType == S7DataRowType.TIME_OF_DAY)
            {
                return(Helper.GetDateTimeFromTimeOfDayString(Value));
            }
            else if (DataType == S7DataRowType.CHAR)
            {
                return(Value.ToString()[1]);
            }
            else if (DataType == S7DataRowType.DATE_AND_TIME)
            {
                return(Helper.GetDateTimeFromDateAndTimeString(Value));
            }
            else if (DataType == S7DataRowType.STRING)
            {
                return(Value.ToString());
            }
            else if (DataType == S7DataRowType.STRUCT)
            {
                return(null);
            }
            else if (DataType == S7DataRowType.UDT)
            {
                return(null);
            }

            return(null);
        }
예제 #9
0
        public static string ValueToString(object Value, S7DataRowType DataType)
        {
            if (DataType == S7DataRowType.S5_KY)
            {
                return(((UInt16)Value / 256).ToString().PadLeft(3, '0') + "," + ((UInt16)Value % 256).ToString().PadLeft(3, '0'));
            }
            else if (DataType == S7DataRowType.S5_KF)
            {
                return(((Int16)Value > 0 ? "+" : "") + Value.ToString());
            }
            else if (DataType == S7DataRowType.S5_KH)
            {
                return(((UInt16)Value).ToString("X", NumberFormatInfo.CurrentInfo).PadLeft(4, '0'));
            }
            else if (DataType == S7DataRowType.S5_KG)
            {
                return(SingleExtensions.ToS5(((float)Value)));
            }
            else if (DataType == S7DataRowType.S5_C || DataType == S7DataRowType.S5_KC)
            {
                return("'" + ((string)Value) + "'");                                                                        //.PadLeft(4, ' ')
            }
            else if (DataType == S7DataRowType.S5_KC)
            {
                return("'" + ((string)Value).PadLeft(2, ' ') + "'");
            }
            else if (DataType == S7DataRowType.S5_KT)
            {
                return(Helper.GetS5TimeFromTimeSpan(((TimeSpan)Value)));
            }
            else if (DataType == S7DataRowType.S5_KM)
            {
                var    bt  = BitConverter.GetBytes((UInt16)Value);
                string ret = "";
                foreach (byte b in bt)
                {
                    if (ret != "")
                    {
                        ret = " " + ret;
                    }
                    ret = libnodave.dec2bin(b) + ret;
                }
                return(ret);
            }
            else if (DataType == S7DataRowType.WORD)
            {
                return("W#16#" + ((UInt16)Value).ToString("X", NumberFormatInfo.CurrentInfo));
            }
            else if (DataType == S7DataRowType.BYTE)
            {
                return("B#16#" + ((byte)Value).ToString("X", NumberFormatInfo.CurrentInfo));
            }
            else if (DataType == S7DataRowType.DWORD)
            {
                return("DW#16#" + ((UInt32)Value).ToString("X", NumberFormatInfo.CurrentInfo));
            }
            else if (DataType == S7DataRowType.INT)
            {
                return(((Int16)Value).ToString());
            }
            else if (DataType == S7DataRowType.DINT)
            {
                return("L#" + ((Int32)Value).ToString());
            }
            else if (DataType == S7DataRowType.REAL)
            {
                return(((DateTime)Value).ToString());
            }
            else if (DataType == S7DataRowType.S5TIME)
            {
                var bt = new byte[2];
                libnodave.putS5Timeat(bt, 0, (TimeSpan)Value);
                return(Helper.GetS5Time(bt[0], bt[1]));
            }
            else if (DataType == S7DataRowType.TIME)
            {
                var tm  = (TimeSpan)Value;
                var ret = new StringBuilder("T#");
                if (tm.TotalMilliseconds < 0)
                {
                    ret.Append("-");
                }
                if (tm.Days != 0)
                {
                    ret.Append(tm.Days + "D");
                }
                if (tm.Hours != 0)
                {
                    ret.Append(tm.Hours + "H");
                }
                if (tm.Minutes != 0)
                {
                    ret.Append(tm.Minutes + "M");
                }
                if (tm.Seconds != 0)
                {
                    ret.Append(tm.Seconds + "S");
                }
                if (tm.Milliseconds != 0 || tm.Ticks == 0)
                {
                    ret.Append(tm.Milliseconds + "MS");
                }

                return(ret.ToString());
            }
            else if (DataType == S7DataRowType.DATE)
            {
                DateTime      ak = (DateTime)Value;
                StringBuilder sb = new StringBuilder();
                sb.Append("D#");
                sb.Append(ak.Year);
                sb.Append("-");
                sb.Append(ak.Month);
                sb.Append("-");
                sb.Append(ak.Day);
                return(sb.ToString());
            }
            else if (DataType == S7DataRowType.TIME_OF_DAY)
            {
                DateTime      ak = (DateTime)Value;
                StringBuilder sb = new StringBuilder();
                sb.Append("TOD#");
                sb.Append(ak.Hour);
                sb.Append(":");
                sb.Append(ak.Minute);
                sb.Append(":");
                sb.Append(ak.Second);
                sb.Append(".");
                sb.Append(ak.Millisecond.ToString().PadRight(3, '0'));
                return(sb.ToString());
            }
            else if (DataType == S7DataRowType.CHAR)
            {
                return(((char)Value).ToString());
            }
            else if (DataType == S7DataRowType.DATE_AND_TIME)
            {
                DateTime      ak = (DateTime)Value;
                StringBuilder sb = new StringBuilder();
                sb.Append("DT#");
                sb.Append(ak.Year.ToString().Substring(2));
                sb.Append("-");
                sb.Append(ak.Month);
                sb.Append("-");
                sb.Append(ak.Day);
                sb.Append("-");
                sb.Append(ak.Hour);
                sb.Append(":");
                sb.Append(ak.Minute);
                sb.Append(":");
                sb.Append(ak.Second);
                sb.Append(".");
                sb.Append(ak.Millisecond.ToString().PadRight(3, '0'));
                return(sb.ToString());
            }
            else if (DataType == S7DataRowType.STRING)
            {
                return(Value.ToString());
            }
            else if (DataType == S7DataRowType.STRUCT)
            {
                return(null);
            }
            else if (DataType == S7DataRowType.UDT)
            {
                return(null);
            }

            if (Value != null)
            {
                return(Value.ToString());
            }

            return(null);
        }
예제 #10
0
        public static object DefaultValueForType(S7DataRowType DataType)
        {
            if (DataType == S7DataRowType.WORD)
            {
                return((UInt16)0);
            }
            else if (DataType == S7DataRowType.BOOL)
            {
                return(false);
            }
            else if (DataType == S7DataRowType.BYTE)
            {
                return((byte)0);
            }
            else if (DataType == S7DataRowType.DWORD)
            {
                return((UInt32)0);
            }
            else if (DataType == S7DataRowType.INT)
            {
                return((Int16)0);
            }
            else if (DataType == S7DataRowType.DINT)
            {
                return((Int32)0);
            }
            else if (DataType == S7DataRowType.REAL)
            {
                return((double)0);
            }
            else if (DataType == S7DataRowType.S5TIME)
            {
                return(new TimeSpan());
            }
            else if (DataType == S7DataRowType.TIME)
            {
                return(new TimeSpan());
            }
            else if (DataType == S7DataRowType.DATE)
            {
                return(new DateTime(1990, 1, 1, 0, 0, 0, 0));
            }
            else if (DataType == S7DataRowType.TIME_OF_DAY)
            {
                return(new DateTime(1990, 1, 1, 0, 0, 0, 0));
            }
            else if (DataType == S7DataRowType.CHAR)
            {
                return(' ');
            }
            else if (DataType == S7DataRowType.DATE_AND_TIME)
            {
                return(new DateTime(1990, 1, 1, 0, 0, 0, 0));
            }
            else if (DataType == S7DataRowType.STRING)
            {
                return("");
            }
            else if (DataType == S7DataRowType.STRUCT)
            {
                return(null);
            }
            else if (DataType == S7DataRowType.UDT)
            {
                return(null);
            }

            return(null);
        }
예제 #11
0
        }                                        //When the Type is SFB, FB or UDT, this contains the Block!

        public TIADataRow(string name, S7DataRowType datatype, Block block)
        {
            this.Name         = name;
            this.DataType     = datatype;
            this.CurrentBlock = block;
        }