1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Чтение таймеров из ПЛС с помощью Sharp7

Ответить

Автор темы
Mutex
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 29 ноя 2021, 19:47
Имя: Михаил
Страна: Россия
город/регион: Псков

Чтение таймеров из ПЛС с помощью Sharp7

Сообщение Mutex »

Доброго всем времени суток!

Есть ли у кого примеры кода, как читать таймеры из PLC с помощью метода
ReadArea с параметром S7Area.TM или методом TMRead (из библиотеки Sharp7)?

Лазил по github этой библиотеки (Sharp7) и примеров не нашел.
Как будто это никто не использует.

Joshua
здесь недавно
здесь недавно
Сообщения: 76
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 9 раз

Чтение таймеров из ПЛС с помощью Sharp7

Сообщение Joshua »

Собственно, реализация метода TMRead из библиотеки:

Код: Выделить всё

        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;
        }
По идее, нужно просто задать начальный номер таймера Start и количество таймеров Amount. Результат получите в Buffer, там должен лежать массив по 2 байт (word) таймеров в формате:

Код: Выделить всё

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)
Ответить

Вернуться в «Общие вопросы»