Вопросы новичка (kobrik)
Re: Вопросы новичка (kobrik)
kobrik
Я просто привел точки линейной зависимости.
Я просто привел точки линейной зависимости.
Re: Вопросы новичка (kobrik)
значит для произведения операций в контроллере над температурой нужно сигнал нормировать и все? и тогда я получу 0,1 град = 1INT. где потом я должен буду поделить на 10 чтоб получить действительные показания температуры?
Re: Вопросы новичка (kobrik)
не совсем понимаю, что в данном случае Вы подразумеваете под нормированием. Минимальная точность для контроля температуры Сименс задал 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 градуса
Пример без преобразования в реал:
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 градуса
Вот моя подпись...
Re: Вопросы новичка (kobrik)
Я извиняюсь за наверное очень тупой вопрос, где тогда использовать NORM_X?
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.
Например, термосопротивление 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.
Re: Вопросы новичка (kobrik)
теперь понял значит у нас две опции: делить на 10 или NORM_X, SCALE_X. я то думал эти две операции нужно использовать одновременно.Михайло писал(а):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.
Re: Вопросы новичка (kobrik)
здравствуйте, есть ли функциональные различия между ПИД контроллерами в ТИА портале и Степ 7? какие новшества есть в ТИА портале ?
Re: Вопросы новичка (kobrik)
здравствуйте,
помогите понять следующее выражение.
заранее спасибо.
помогите понять следующее выражение.
заранее спасибо.
Код: Выделить всё
L A
L B
+R
L C
-R
T D
Re: Вопросы новичка (kobrik)
A, B, C, D переменные
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.
Теперь, зная действия инструкций, попытайся проанализировать, что делает программа.
Соответственно нужны инструкции пересылки из переменных A, B, C, D в аккумуляторы и обратно:
1) Инструкция L (Load) переносит содержимое ACCU1 в ACCU2, а затем из переменной в ACCU1.
2) Инструкция T (Transfer) переносит значение из ACCU1 в переменную.
3) Инструкции +R (-R) берут значения ACCU1 и ACCU2, выполняют сложение (вычитание) и помещают результат в ACCU1.
Теперь, зная действия инструкций, попытайся проанализировать, что делает программа.
Re: Вопросы новичка (kobrik)
D=A+B-C вроде так. или нет?))Михайло писал(а):Надо разобраться в том, что такое аккумуляторы ACCU1 и ACCU2. Это 32-битные регистры. Процессор ПЛК умеет складывать, вычитать, умножать, делить и выполнять множество других операций только с двумя этими аккумуляторами.
Соответственно нужны инструкции пересылки из переменных A, B, C, D в аккумуляторы и обратно:
1) Инструкция L (Load) переносит содержимое ACCU1 в ACCU2, а затем из переменной в ACCU1.
2) Инструкция T (Transfer) переносит значение из ACCU1 в переменную.
3) Инструкции +R (-R) берут значения ACCU1 и ACCU2, выполняют сложение (вычитание) и помещают результат в ACCU1.
Теперь, зная действия инструкций, попытайся проанализировать, что делает программа.
Re: Вопросы новичка (kobrik)
Правильно.
Можешь написать код - что-то вроде E = (A-B)*(C+D)? Не раскрывая скобки, но используя некоторую временную переменную F.
Можешь написать код - что-то вроде E = (A-B)*(C+D)? Не раскрывая скобки, но используя некоторую временную переменную F.
Re: Вопросы новичка (kobrik)
L AМихайло писал(а):Правильно.
Можешь написать код - что-то вроде E = (A-B)*(C+D)? Не раскрывая скобки, но используя некоторую временную переменную F.
L B
-R
T F
L C
L D
+R
L F
*R
Re: Вопросы новичка (kobrik)
Все верно, только в конце забыл записать результат в переменную E. В аккумуляторе хранить не получится, он постоянно используется.
Re: Вопросы новичка (kobrik)
как дать команды
Объект – кран.
Имеет два положения – открыт и закрыт, соответственно два одноименных ТС (дискретные входные сигналы).
Есть две команды управления – открыть и закрыть.
Открытие может осуществляться при наличии ТС «Закрыт», открытие – наоборот.
Кран имеет конечное время хода. При подаче команды на открытие (закрытие) запускается таймер (допустим 5 секунд). При превышении времени хода – формируется сигнал «Неисправность».
В общем-то весь алгоритм.
Объект – кран.
Имеет два положения – открыт и закрыт, соответственно два одноименных ТС (дискретные входные сигналы).
Есть две команды управления – открыть и закрыть.
Открытие может осуществляться при наличии ТС «Закрыт», открытие – наоборот.
Кран имеет конечное время хода. При подаче команды на открытие (закрытие) запускается таймер (допустим 5 секунд). При превышении времени хода – формируется сигнал «Неисправность».
В общем-то весь алгоритм.
Re: Вопросы новичка (kobrik)
Вообще о чём разговор?
Как дать команды - можно голосом скомандовать: кран откройся, ну иили кого-нить попросить...
Как дать команды - можно голосом скомандовать: кран откройся, ну иили кого-нить попросить...
Вот моя подпись...
Re: Вопросы новичка (kobrik)
Роман
Косвенно (по разделу) понятно, что речь идет о программе в Step7. Step7 или ТИА Портал?
Косвенно (по разделу) понятно, что речь идет о программе в Step7. Step7 или ТИА Портал?
Re: Вопросы новичка (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
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
Re: Вопросы новичка (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