SIEMENS, DF&PD

Предыдущее посещение: Ср июл 06, 2016 14:38 Текущее время: Ср июл 06, 2016 14:38

Часовой пояс: UTC + 3 часа




 [ Сообщений: 79 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2012 12:14 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
временная база это что то вроде дискретности таймера? А как опредилить какая база мне подойдет зная диапазон 0.01...10 сек


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2012 14:37 
Не в сети
Известный Писатель

Зарегистрирован: Вс дек 18, 2011 11:25
Сообщения: 243
starter_KIP Вот вы ленитесь читать документацию и учебники, а это здесь совсем не привествуются. Перд тем как задавать вопросы про S5TIME для начала нужно было ознакомится со соответствующим разделом из книги Бергера, где можно прочитать буквально следующее:

Цитата:
Тип данных S5TIME занимает 16-разрядное слово со структурой "1+3
тетрады" (см. рис. 24.3).
Время задается в часах, минутах, секундах и миллисекундах.
Преобразование числа S5TIME-формата во внутреннее представление
выполняется системой STEP 7. Внутренне число представляется как BCD-
число (число в двоично-десятичном коде) из диапазона от 000 до 999.
Временная база (time base) может принимать следующие значения: 10 мс
(0000), 100 мс (0001), 1 с (0010), 10 с (0011). Время определяется как
результат произведения временной базы на значение таймера.



Это ответ на все ваши вопросы, в т.ч. и последний(даже жирным выделил)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2012 21:41 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
И все таки как решить эту задачу:
Преобразовать величину типа REAL ну к примеру 0.12 к времени таймера 0.12 сек. Попытки применить элементарные функции преобразования ни к чему не привели. получается только целая величина времени.
подскажите решение этой задачи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2012 22:40 
Не в сети
Писатель со стажем

Зарегистрирован: Пн июл 06, 2009 9:37
Сообщения: 851
Откуда: Санкт-Петербург
SBF4 (TON)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2012 23:05 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
Почему то таймер не запускается. База времени 0ю01 сек.
Код:
L     #time_var  //time_var=S5T#7s40ms по таблице переменных
  SD    "timer"  //timer=S5T#0ms адрес T 6


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 2:25 
Не в сети
Известный Писатель

Зарегистрирован: Пн ноя 15, 2010 6:41
Сообщения: 322
Откуда: Томск
starter_KIP писал(а):
Почему то таймер не запускается. База времени 0ю01 сек.
Код:
L     #time_var  //time_var=S5T#7s40ms по таблице переменных
  SD    "timer"  //timer=S5T#0ms адрес T 6

Что значит "По таблице переменных". Судя по коду - это все у вас временные переменные в области TEMP?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 6:31 
Не в сети
Возможно это нечеловек

Зарегистрирован: Пн окт 30, 2006 16:27
Сообщения: 2268
Откуда: Украина, Днепродзержинск
А что у Вас перед этими строками написано?
У Вас есть признак, по которому таймер должен запускаться?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 9:14 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
Cerberus писал(а):
А что у Вас перед этими строками написано?
Код:
  L    7.04e+000 //это 7.04 сек
  L    1.0e+2     
  *R
  TRUNC // в акумуляторе 704
  L  W#16#0000
  OW
  T   #Time_var  //time_var=S5T#7s40ms по таблице переменных
  SD    "timer"  //timer=S5T#0ms адрес T 6

Условия запуска нет, а разве команда SD неявляется таким условием?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 10:07 
Не в сети
Возможно это нечеловек

Зарегистрирован: Пн окт 30, 2006 16:27
Сообщения: 2268
Откуда: Украина, Днепродзержинск
Хм, весьма странный код....
Вы перемножаете две величины, затем преобразовываете в WORD, после чего делаете, зачем-то поразрядное ИЛИ.

Затем просто вызываете номер таймера, но не запускаете его....
Мало того, таймер не знает на какое время ему запускаться....

Вот рабочий код
Код:
      L     7.040000e+000               //это 7.04 сек
      L     1.000000e+002
      *R                                // в акумуляторе 704
      TRUNC
      ITB   
      T     #time_var

      A     M      1.0
      L     #time_var                   //time_var=S5T#7s40ms по таблице переменных
      SD    T      6                    //timer=S5T#0ms адрес T 6

      A     T      6
      =     M      1.1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 10:56 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
Cerberus писал(а):
Хм, весьма странный код....
Вы перемножаете две величины, затем преобразовываете в WORD, после чего делаете, зачем-то поразрядное ИЛИ.[/code]

Я таким образом привожу мое время 7.04 сек. к временной базе 0.01. Т.е как я понял время таймера это произведение временной базы на значение времени в первых 11 разрядах BCD (Berger стр229.).
Т.е как раз 0.01*704=7s0mc. По VAT time_var=S5T#7s40ms. Вроде значение соответствует формату. Или я неправильно понимаю формат для таймера. Буду признателен если объясните.
А поразрядным или я просто объединил временную базу и время. Может более грамотный есть путь?

За примеp рабочего кода спасибо. Хота было бы неплохо оставить более детальные комментарии к вашим строкам. Не могу понять как именно запускать таймер и на какое время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 11:07 
Не в сети
Известный Писатель

Зарегистрирован: Вс дек 18, 2011 11:25
Сообщения: 243
starter_KIP писал(а):
Я таким образом привожу мое время 7.04 сек. к временной базе 0.01. Т.е как я понял время таймера это произведение временной базы на значение времени в первых 11 разрядах BCD (Berger стр229.).
Т.е как раз 0.01*704=7s0mc. По VAT time_var=S5T#7s40ms. Вроде значение соответствует формату. Или я неправильно понимаю формат для таймера. Буду признателен если объясните.
А поразрядным или я просто объединил временную базу и время. Может более грамотный есть путь?

Поразрядное ИЛИ с нулем число никак не изменит, поэтому эти строчки можно опустить. Если база выбирается 10 мс(как вашем случае), то базу специально приводить не нужно. Но маскимум что вы сможете выжать из таймера-это 9,99 сек. Если нужно больше, то нужно приводить базу.
Кстати, нужно оябзательно следить, чтобы число int не превышало 999!
Иначе галимотья начнется.
Время таймер берет время из асс1, не вижу смысла специально вводить дополнительную переменную. Ну разе что для удобночитаемости программы.
А запускатется таймер командой SD, но перед ней обязательно нужно ставить некую логическую проверку. Потому как таймер запустится командо SD только в том случае, когда перед командой SD RLO изменится с 0 к 1

При появлении 1 на I 0.1 таймер будет отрабатывать 7 секуд
Код:
      L     7.000000e+000               
      L     1.000000e+002
      *R   
      TRUNC                           
      ITB   
      A     I      0.1
      SD    T      2



Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 11:17 
Не в сети
Возможно это нечеловек

Зарегистрирован: Пн окт 30, 2006 16:27
Сообщения: 2268
Откуда: Украина, Днепродзержинск
Согласен, можно переменную и не заводить лишнюю, но так было изначально, потому так и оставил. Может быть она не для одного таймера потом будет использоваться, мало ли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 11:21 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
Maxim_85 писал(а):
Поразрядное ИЛИ с нулем число никак не изменит...

Согласен, просто формальность.
Maxim_85 писал(а):
Потому как таймер запустится командо SD только в том случае, когда перед командой SD RLO изменится с 0 к 1
При появлении 1 на I 0.1 таймер будет отрабатывать 7 секуд

А если отойти от входных переменных, а использовать только программные?
Наверное этот делается так как в примере Cerberus'а.
Код:
  A     M      1.0
L     #time_var                   //time_var=S5T#7s40ms по таблице переменных


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 11:37 
Не в сети
Известный Писатель

Зарегистрирован: Вс дек 18, 2011 11:25
Сообщения: 243
starter_KIP писал(а):
Согласен, просто формальность.

Формальность формальностью, а какое-то время на это бездарно убили. Зачем? Пишите сразу оптимальный код.

starter_KIP писал(а):
А если отойти от входных переменных, а использовать только программные?

Да ради Бога, таймер запустится при имзмении RLO перед SD. А чем вы его(RLO) будете менять зависит только от ваших потребностей и возможности компилятора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 13:03 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
Так, стойте. А не слетит "логика" программы? Ведь RLO используют логические инструкции. А я меняю RLO только что бы запустить таймер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 13:09 
Не в сети
Возможно это нечеловек

Зарегистрирован: Пн окт 30, 2006 16:27
Сообщения: 2268
Откуда: Украина, Днепродзержинск
Смотря что у Вас будет написано в блоке, какая именно структура программы. Чтобы ответить надо видеть конкретный пример кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 13:32 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
На верное правильно будет так. Так точно не слетит логика.
Код:
A I 2.0 первичный опрос (first check)
A I 2.1 оператор проверки (check statement)
A I 1.7 оператор проверки (check statement)
= Q 5.1 условный оператор (conditional statement)
//далее работаем с таймером.
  A     M      1.0
  L     #time_var                   //time_var=S5T#7s40ms по таблице переменных


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 19:18 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
Maksim.Rakshin писал(а):
Если через N циклов RLO станет "0", но таймер еще не "отсчитал", то соответственно таймер остановится ...

Получается что пока таймер считает нельзя использовать инструкции, могущие изменить RLO? Или же конкретный RLO привязан конкретно к определенному таймеру?
Не совсем ясен механизм этого RLO.
Maksim.Rakshin писал(а):
Мануал немешало бы Вам прочитать.. Там все же написано..

Буду очень признателен если дадите ссылку на более менее вменяемый мануал. Честное слово, перечитал на эту тему кучу Сименсовской писанины, толком - ни о чем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 20:11 
Не в сети
Известный Писатель

Зарегистрирован: Вс дек 18, 2011 11:25
Сообщения: 243
starter_KIP писал(а):
Буду очень признателен если дадите ссылку на более менее вменяемый мануал. Честное слово, перечитал на эту тему кучу Сименсовской писанины, толком - ни о чем.

Открываете Бергера на стр. 325. Раздел 15 "Биты состояния" и пытаетесь разобраться. Нужно четко уяснить, что такое RLO, FC(первичный опрос) как они связаны с собой, понять, что такое логический шаг(как и где начинается и где заканчивается). Это основы основ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 21:13 
Не в сети
Известный Писатель

Зарегистрирован: Сб авг 25, 2012 8:56
Сообщения: 112
Откуда: новосибирск
вот написал простой пример. Каждые 10 сек таймер должен заново запускаться, но во второй проход таймер не запускается хотя условия такие же как и при первом запуске. Где ошибка?
Код:
 
//предыдущая кода часть убрана для краткости
  A   "timer"
    JCN   end

m1:   S     M      0.0
      A    M      0.0
      =     M      0.1 // тут   установливаю RLO
      L     S5T#10S //перед этой инструкцией RLO=1, но во второй раз таймер не запускается?!!
      SD    "timer"
      JU    end
end: nop


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 79 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Rolex, YandexBot и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group