Настройка плагина PlgMimCalendarJP

Существую три типа передачи данных:
- Double
- String
- Hex

У каналов должен быть выбран тип Входной/Выходной или Расчётный/Выходной.
Формула включена - Включено.
Входная формула: Val(); 1
Выходная формула:
- Double. Первый календарь: SetDate(), Второй календарь: SetDate().
- String. Первый календарь: SetDateFromText(), Второй календарь: SetDateFromText().
- Hex. Первый календарь: SetTwoDatesFromHex(номер канала второго календаря), Второй календарь: SetDateFromHex().


// Calendar date scripts.
// The channel stores date and time as OADate double.
// Status 1 means Defined.

// double
// Input formula:  Val(); 1
// Output formula: SetDate()

public double SetDate()
{
   SetData(CnlNum, CmdVal, 1);
   return CmdVal;
}

// text
// cmdData = "2000-01-01T07:06:00.000Z"
// isHex = false
// Input formula:  Val(); 1
// Output formula: SetDateFromText()

public double SetDateFromText()
{
   if (string.IsNullOrWhiteSpace(CmdDataStr))
   {
       return double.NaN;
   }

   DateTime dt = DateTime.Parse(
       CmdDataStr,
       null,
       System.Globalization.DateTimeStyles.RoundtripKind);

   double oaDate = EncodeDate(dt.ToUniversalTime());
   SetData(CnlNum, oaDate, 1);
   return oaDate;
}

// hex, one date
// cmdData = 8 bytes, OADate double
// isHex = true
// Input formula:  Val(); 1
// Output formula: SetDateFromHex()

public double SetDateFromHex()
{
   if (CmdData == null || CmdData.Length < 8)
   {
       return double.NaN;
   }

   double oaDate = System.BitConverter.ToDouble(CmdData, 0);
   SetData(CnlNum, oaDate, 1);
   return oaDate;
}

// hex, two dates
// cmdData = 16 bytes:
// bytes 0..7   = first OADate double
// bytes 8..15  = second OADate double
// isHex = true
// Input formula of both channels: Val(); 1
// Output formula of first channel: SetTwoDatesFromHex(7)
// where 7 is the second channel number.

public double SetTwoDatesFromHex(int secondCnlNum)
{
   if (CmdData == null || CmdData.Length < 16)
   {
       return double.NaN;
   }

   double oaDate1 = System.BitConverter.ToDouble(CmdData, 0);
   double oaDate2 = System.BitConverter.ToDouble(CmdData, 8);

   SetData(CnlNum, oaDate1, 1);
   SetData(secondCnlNum, oaDate2, 1);

   return oaDate1;
}


Изображение уменьшено. Щелкните, чтобы увидеть оригинал.