Вопросы новичка (kobrik)

Инженерное программное обеспечение
Аватара пользователя
mr_Frodo
Профессионал
Сообщения: 588
Зарегистрирован: 22 июл 2016, 20:38

Re: Вопросы новичка (kobrik)

Сообщение mr_Frodo »

0,1 град = 1INT
Вот моя подпись...

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Вопросы новичка (kobrik)

Сообщение Михайло »

kobrik
Я просто привел точки линейной зависимости.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

значит для произведения операций в контроллере над температурой нужно сигнал нормировать и все? и тогда я получу 0,1 град = 1INT. где потом я должен буду поделить на 10 чтоб получить действительные показания температуры?

Аватара пользователя
mr_Frodo
Профессионал
Сообщения: 588
Зарегистрирован: 22 июл 2016, 20:38

Re: Вопросы новичка (kobrik)

Сообщение mr_Frodo »

не совсем понимаю, что в данном случае Вы подразумеваете под нормированием. Минимальная точность для контроля температуры Сименс задал 0,1 градуса. В PIW дробные (реальные) числа не могут передаваться по природе "двоичности" преобразователя АЦП, соответственно для получения значения в градусах нужно просто разделить входную величину PIW на 10, но в таком случае мы теряем точность десятых долей, т.к. при формировании в АЦП не целых значений температуры и деления их на 10 в результате деления мы будем получать только целые значения градусов - 1, 2, 3 , 4 и т.д Для получения десятичных значений нам надо будет преобразовать входящую с PIW ВЕЛИЧИНУ В РЕАЛЬНОЕ ЧИСЛО И ТОЛЬКО ПОТОМ ДЕЛИТЬ НА 10.

Пример без преобразования в реал:
L PIW256
L 10
/I
T MW100
В данном случае при значении с АЦП =155 в MW100 мы получим значение 15, что не совсем соответствует истине, и даже если значение приблизится к 159, тов рез-те всё-равно будет 15.

другой пример:
L PIW 256
ITD
DTR
L 1.000000e+001
/R
T MD 100
в MD100 будет реальное значение температуры с точностью до требуемой в 0.1 градуса
Вот моя подпись...

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

Я извиняюсь за наверное очень тупой вопрос, где тогда использовать NORM_X?

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Вопросы новичка (kobrik)

Сообщение Михайло »

NORM_X должен всегда использоваться перед SCALE_X. Нужно из числа (A,B) получить число (C,D).

Например, термосопротивление Cu100 (100М), диапазон -200...+200 град С.
Имеем:
A = -2000
B = 2000
Надо получить:
C = -200.0
D = 200.0
Сначала нормируем NORM_X, это значит из (A,B) получаем (0,1), затем масштабируем SCALE_X, это значит из (0,1) получаем (C,D).
Если до сих пор не понял, как использовать пару NORM_X, SCALE_X, просто подели на 10 с помощью одного DIV. :)

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

Михайло писал(а):NORM_X должен всегда использоваться перед SCALE_X. Нужно из числа (A,B) получить число (C,D).

Например, термосопротивление Cu100 (100М), диапазон -200...+200 град С.
Имеем:
A = -2000
B = 2000
Надо получить:
C = -200.0
D = 200.0
Сначала нормируем NORM_X, это значит из (A,B) получаем (0,1), затем масштабируем SCALE_X, это значит из (0,1) получаем (C,D).
Если до сих пор не понял, как использовать пару NORM_X, SCALE_X, просто подели на 10 с помощью одного DIV. :)
теперь понял :) значит у нас две опции: делить на 10 или NORM_X, SCALE_X. я то думал эти две операции нужно использовать одновременно.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

здравствуйте, есть ли функциональные различия между ПИД контроллерами в ТИА портале и Степ 7? какие новшества есть в ТИА портале ?

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

здравствуйте,

помогите понять следующее выражение.
заранее спасибо.

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

      L     A
      L     B
      +R    
      L     C
      -R    
      T     D

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

A, B, C, D переменные

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Вопросы новичка (kobrik)

Сообщение Михайло »

Надо разобраться в том, что такое аккумуляторы ACCU1 и ACCU2. Это 32-битные регистры. Процессор ПЛК умеет складывать, вычитать, умножать, делить и выполнять множество других операций только с двумя этими аккумуляторами.

Соответственно нужны инструкции пересылки из переменных A, B, C, D в аккумуляторы и обратно:

1) Инструкция L (Load) переносит содержимое ACCU1 в ACCU2, а затем из переменной в ACCU1.
2) Инструкция T (Transfer) переносит значение из ACCU1 в переменную.
3) Инструкции +R (-R) берут значения ACCU1 и ACCU2, выполняют сложение (вычитание) и помещают результат в ACCU1.

Теперь, зная действия инструкций, попытайся проанализировать, что делает программа.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

Михайло писал(а):Надо разобраться в том, что такое аккумуляторы ACCU1 и ACCU2. Это 32-битные регистры. Процессор ПЛК умеет складывать, вычитать, умножать, делить и выполнять множество других операций только с двумя этими аккумуляторами.

Соответственно нужны инструкции пересылки из переменных A, B, C, D в аккумуляторы и обратно:

1) Инструкция L (Load) переносит содержимое ACCU1 в ACCU2, а затем из переменной в ACCU1.
2) Инструкция T (Transfer) переносит значение из ACCU1 в переменную.
3) Инструкции +R (-R) берут значения ACCU1 и ACCU2, выполняют сложение (вычитание) и помещают результат в ACCU1.

Теперь, зная действия инструкций, попытайся проанализировать, что делает программа.
D=A+B-C вроде так. или нет?))

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Вопросы новичка (kobrik)

Сообщение Михайло »

Правильно.

Можешь написать код - что-то вроде E = (A-B)*(C+D)? Не раскрывая скобки, но используя некоторую временную переменную F.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

Михайло писал(а):Правильно.

Можешь написать код - что-то вроде E = (A-B)*(C+D)? Не раскрывая скобки, но используя некоторую временную переменную F.
L A
L B
-R
T F
L C
L D
+R
L F
*R

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Вопросы новичка (kobrik)

Сообщение Михайло »

Все верно, только в конце забыл записать результат в переменную E. В аккумуляторе хранить не получится, он постоянно используется.

Роман
Профан
Сообщения: 1
Зарегистрирован: 12 янв 2017, 13:14

Re: Вопросы новичка (kobrik)

Сообщение Роман »

как дать команды
Объект – кран.

Имеет два положения – открыт и закрыт, соответственно два одноименных ТС (дискретные входные сигналы).

Есть две команды управления – открыть и закрыть.

Открытие может осуществляться при наличии ТС «Закрыт», открытие – наоборот.

Кран имеет конечное время хода. При подаче команды на открытие (закрытие) запускается таймер (допустим 5 секунд). При превышении времени хода – формируется сигнал «Неисправность».

В общем-то весь алгоритм.

Аватара пользователя
mr_Frodo
Профессионал
Сообщения: 588
Зарегистрирован: 22 июл 2016, 20:38

Re: Вопросы новичка (kobrik)

Сообщение mr_Frodo »

Вообще о чём разговор? :dontknow:
Как дать команды - можно голосом скомандовать: кран откройся, ну иили кого-нить попросить... :p
Вот моя подпись...

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Вопросы новичка (kobrik)

Сообщение Михайло »

Роман
Косвенно (по разделу) понятно, что речь идет о программе в Step7. Step7 или ТИА Портал?

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

Такой вопрос, нужно срочно по работе. Для чего нужны вот эти нижеуказанные блоки:

G7_STD_3 FC 72 FC 472
ALARM_SQ SFC 17 Generate Block-Related Messages with Acknowledgment FC 72/FC 472
ALARM_S SFC 18 Generate Permanently Acknowledged Block-Related Messages FC 72/FC 472
BLKMOV SFC 20 Copy Variables FC 72/FC 472
WR_USMSG SFC 52 Write a User-Defined Diagnostic Event to the Diagnostic Buffer FC 72/FC 472
TIME_TCK SFC 64 Read the System Time FC 72/FC 472

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Вопросы новичка (kobrik)

Сообщение kobrik »

У меня сейчас задача такая. Используя язык программирования SCL нужно считывать данные из блока данных (REAL, INT, WORD, BOOL), конвертировать их в STRING и записывать обратно тот же блок под другим адресом. Вот сделал кое что, но не подходит. Помогите пожалуйста.

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

DATA_BLOCK DB150
//
// Baustein-Kommentar ...
//
    STRUCT
        Invalue1 : REAL; //float - real
        Invalue2 : DINT; //long DINT
        Invalue3 : INT; //short INT
        Invalue4 : WORD; //us short WORD
        Invalue5 : DWORD; //u long DWORD
        Invalue6 : STRING [20]; //string
        Invalue7 : STRING [20]; //string
        Outvalue1 : STRING[20]; //float - real
        Outvalue2 : STRING[20]; //long DINT
        Outvalue3 : STRING[20]; //short INT
        Outvalue4 : STRING[20]; //us short WORD
        Outvalue5 : STRING[20]; //u long DWORD
        Outvalue6 : STRING[20]; //string
    END_STRUCT


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

    Outvalue1:= REAL_TO_STRING (DB150.DBW0);
    Outvalue2:= DINT_TO_STRING (Invalue2);
    Outvalue3:= INT_TO_STRING (Invalue3);
;
    END_DATA_BLOCK

Ответить