Доброго всем времени суток!
Есть ли у кого примеры кода, как читать таймеры из PLC с помощью метода
ReadArea с параметром S7Area.TM или методом TMRead (из библиотеки Sharp7)?
Лазил по github этой библиотеки (Sharp7) и примеров не нашел.
Как будто это никто не использует.
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Чтение таймеров из ПЛС с помощью Sharp7
-
- здесь недавно
- Сообщения: 3
- Зарегистрирован: 29 ноя 2021, 19:47
- Имя: Михаил
- Страна: Россия
- город/регион: Псков
-
- здесь недавно
- Сообщения: 76
- Зарегистрирован: 21 мар 2023, 02:12
- Имя: Владимир
- Страна: РФ
- город/регион: Псков
- Благодарил (а): 2 раза
- Поблагодарили: 9 раз
Чтение таймеров из ПЛС с помощью Sharp7
Собственно, реализация метода TMRead из библиотеки:
По идее, нужно просто задать начальный номер таймера Start и количество таймеров Amount. Результат получите в Buffer, там должен лежать массив по 2 байт (word) таймеров в формате:
Код: Выделить всё
public int TMRead(int Start, int Amount, ushort[] Buffer)
{
byte[] sBuffer = new byte[Amount * 2];
int Result = ReadArea(S7Consts.S7AreaTM, 0, Start, Amount, S7Consts.S7WLTimer, sBuffer);
if (Result == 0)
{
for (int c = 0; c < Amount; c++)
{
Buffer[c] = (ushort)((sBuffer[c * 2 + 1] << 8) + (sBuffer[c * 2]));
}
}
return Result;
}
Код: Выделить всё
Values of variables in the SIMATIC_TIME format are entered in BCD format.
The 16 bits have the following significance:
| 0 0 x x | h h h h | t t t t | u u u u |
Bits 15 and 14 are always zero.
Bits 13 and 12 (marked with xx) set the multiplier for bits 0 to 11:
00 => multiplier 10 milliseconds
01 => multiplier 100 milliseconds
10 => multiplier 1 second
11 => multiplier 10 seconds
Bits 11 to 8 hundreds (hhhh)
Bits 7 to 4 tens (tttt)
Bits 3 to 0 units (uuuu)