Добавить в корзинуПозвонить
Найти в Дзене

ИИ в АСУ ТП - как использовать ИИ в АСУТП конкретный пример из жизни

В ИИ https://chat.deepseek.com/
Набрал код из FC20 относящийся к маслонасосу Запрос: Что означает код ниже и как сделать чтобы "Cч_наработки".MaslonasosHr" суммировался как длинное целое число? Приведи полный доработанный код. NOP 0 AN #FrZ3 JC N061 L "Cч_наработки".MaslonasosMin INC 1 T "Cч_наработки".MaslonasosMin L W#16#3C <I JC N061 L W#16#0 T "Cч_наработки".MaslonasosMin L "Cч_наработки".MaslonasosHr L DW#16#1 +I T "Cч_наработки".MaslonasosHr N061: NOP 0 Код предназначен для подсчёта времени наработки маслонасоса в минутах и часах. Вот его пошаговое объяснение: NOP 0 - Пустая операция (заглушка) AN #FrZ3 - Проверка сигнала отключения (если FrZ3=0, условие выполняется) JC N061 - Выход из цикла при активном сигнале FrZ3 Инкремент минутной метки: STL L "Cч_наработки".MaslonasosMin // Загрузить минуты INC 1 // +1 минута T "Cч_наработки".MaslonasosMin // Сохранить L W#16#3C <I - Сравнение с 60 (0x3C = 60) JC N0

В ИИ

https://chat.deepseek.com/

Набрал код из FC20 относящийся к маслонасосу

Запрос:

Что означает код ниже и как сделать чтобы "Cч_наработки".MaslonasosHr" суммировался как длинное целое число? Приведи полный доработанный код.

NOP 0

AN #FrZ3

JC N061

L "Cч_наработки".MaslonasosMin

INC 1

T "Cч_наработки".MaslonasosMin

L W#16#3C

<I

JC N061

L W#16#0

T "Cч_наработки".MaslonasosMin

L "Cч_наработки".MaslonasosHr

L DW#16#1

+I

T "Cч_наработки".MaslonasosHr

N061: NOP 0

Код предназначен для подсчёта времени наработки маслонасоса в минутах и часах. Вот его пошаговое объяснение:

NOP 0 - Пустая операция (заглушка)

AN #FrZ3 - Проверка сигнала отключения (если FrZ3=0, условие выполняется)

JC N061 - Выход из цикла при активном сигнале FrZ3

Инкремент минутной метки:

STL

L "Cч_наработки".MaslonasosMin // Загрузить минуты

INC 1 // +1 минута

T "Cч_наработки".MaslonasosMin // Сохранить

L W#16#3C <I - Сравнение с 60 (0x3C = 60)

JC N061 - Пропуск сброса, если меньше 60

Сброс минут и инкремент часов:

STL

L 0 // Обнулить

T "Cч_наработки".MaslonasosMin

L "Cч_наработки".MaslonasosHr // Загрузить часы

L DW#16#1 +I // +1 час (16-битное сложение)

T "Cч_наработки".MaslonasosHr

Чтобы "MaslonasosHr" суммировался как 32-битное число:

Ответ

Исходный код реализует счетчик времени работы насоса с переводом минут в часы. Каждую минуту увеличивается переменная MaslonasosMin, при достижении 60 минут она сбрасывается, и увеличивается MaslonasosHr.

Проблема: Для работы с большими значениями часов (более 32767) нужно использовать 32-битный тип данных (DInt) вместо 16-битного (Int).

Исправления:

Замена операции +I (сложение Int) на +D (сложение DInt).

Использование 32-битной константы L#1 вместо DW#16#1.

Объявление переменной MaslonasosHr как DInt в структуре данных.

Доработанный код:

STL

NOP 0

AN #FrZ3 // Проверка условия активации счетчика

JC N061 // Переход к метке N061, если условие ложно

L "Cч_наработки".MaslonasosMin // Загрузка минут

INC 1 // Увеличить минуты на 1

T "Cч_наработки".MaslonasosMin // Сохранить минуты

L 60 // Верхний предел минут (W#16#3C = 60)

<I // Сравнение минут с 60

JC N061 // Если меньше 60, переход к N061

L 0 // Сброс минут

T "Cч_наработки".MaslonasosMin

L "Cч_наработки".MaslonasosHr // Загрузка часов

L L#1 // Загрузка 32-битной единицы

+D // Сложение DInt (32-битное)

T "Cч_наработки".MaslonasosHr // Сохранение часов

N061: NOP 0 // Конец ветвления

Настройки структуры данных:

Убедитесь, что MaslonasosHr объявлен как DInt (Double Integer) в структуре "Cч_наработки".

MaslonasosMin должен быть типа Int (Word), так как диапазон 0-59 влезает в 16 бит.

Запрос:

Объясни также исходный код с пояснением каждой инструкции

Ответ:

Вот построчное объяснение оригинального кода с комментариями на русском языке:

Исходный код с пояснениями:

stl

NOP 0 // Пустая операция (No Operation)

AN #FrZ3 // Проверить бит #FrZ3 (логическое И НЕ)

JC N061 // Если #FrZ3 = 0, перейти к метке N061 (пропустить счет)

L "Cч_наработки".MaslonasosMin // Загрузить значение минут в аккумулятор

INC 1 // Увеличить аккумулятор на 1 (минуты++)

T "Cч_наработки".MaslonasosMin // Сохранить новое значение минут

L W#16#3C // Загрузить число 60 (W#16#3C = 60 в WORD)

<I // Сравнить аккумулятор (минуты) с 60 (16-битное сравнение)

JC N061 // Если минуты < 60, перейти к N061 (не сбрасывать счетчик)

L W#16#0 // Загрузить 0 (сброс минут)

T "Cч_наработки".MaslonasosMin // Обнулить минуты

L "Cч_наработки".MaslonasosHr // Загрузить текущие часы

L DW#16#1 // Загрузить 1 (32-битное число, но в оригинале ошибка: DW#16#1 = DWord, но +I работает с Int)

+I // Сложить часы и 1 (16-битное сложение)

T "Cч_наработки".MaslonasosHr // Сохранить новые часы

N061: NOP 0 // Конец логики (метка для переходов)

Ключевые моменты работы кода:

Условие активации счетчика (AN #FrZ3):

Счетчик работает только если сигнал #FrZ3 активен (логика AN инвертирует сигнал: если #FrZ3 = 0, счетчик увеличивается).

Инкремент минут:

Каждый цикл, когда условие выполняется, минуты увеличиваются на 1 (INC 1).

Проверка на 60 минут:

Если минуты достигают 60, происходит:

Сброс минут в 0.

Увеличение часов на 1.

Проблема в оригинальном коде:

Для часов используется 16-битное сложение (+I), что ограничивает максимальное значение часов до 32767 (Int).

Константа DW#16#1 несовместима с +I (должна быть W#16#1 для 16-бит).

Как работает доработанный код (32-битный):

stl

L "Cч_наработки".MaslonasosHr // Загрузить часы (32-битный DInt)

L L#1 // Загрузить 32-битную единицу (L#1 = DInt)

+D // 32-битное сложение (DInt + DInt)

T "Cч_наработки".MaslonasosHr // Сохранить часы (теперь до 2,147,483,647)

Пояснение типов данных:

Переменная Тип Диапазон Описание

MaslonasosMin Int 0–32767 Минуты (0–59, хватит 16 бит)

MaslonasosHr DInt −2,147,483,648 – 2,147,483,647 Часы (32 бита)

ИИ помогает программисту писать программу. Сюрреализм, Фэнтэзи 7D, бесконечная экспозиция и детализация, неземная красота, мило, эстетично, грациозно.
ИИ помогает программисту писать программу. Сюрреализм, Фэнтэзи 7D, бесконечная экспозиция и детализация, неземная красота, мило, эстетично, грациозно.
ИИ-помощница помогает программисту писать программу. Сюрреализм, Фэнтэзи 7D, бесконечная экспозиция и детализация, неземная красота, мило, эстетично, грациозно.
ИИ-помощница помогает программисту писать программу. Сюрреализм, Фэнтэзи 7D, бесконечная экспозиция и детализация, неземная красота, мило, эстетично, грациозно.