Siemens AG
Список форумов SIEMENS, Россия. IA&DT
   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Сдвиг битов влево (DWord) на STL
На страницу Пред.  1, 2
 
Начать новую тему   Ответить на тему    Список форумов SIEMENS, Россия. IA&DT -> Промышленное программное обеспечение
Предыдущая тема :: Следующая тема  
Автор Сообщение
Александр В..
Известный Писатель


Зарегистрирован: 06.07.2009
Сообщения: 331
Откуда: Санкт-Петербург

Сообщение Добавлено: Пт Май 06, 2011 13:01    Заголовок сообщения: Ответить с цитатой

чем вызвана необходимость использования буфера? разные скорости записи и чтения из него?
опишите задачу, а не спрашивайте решение придуманного_вами_оптимального_решения
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Vladimir87
Новый писатель


Зарегистрирован: 17.03.2011
Сообщения: 35

Сообщение Добавлено: Пт Май 06, 2011 13:23    Заголовок сообщения: Ответить с цитатой

буфер нужен для того чтоб предотвратить потерю информации при обрыве связи, ну и разное время опроса может быть. Мне нужно собрать информацию с датчиков и передать на верхний уровень . Вот и вся задача.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Негатив
Написал больше чем Вы читали


Зарегистрирован: 26.02.2006
Сообщения: 1059
Откуда: Липецк, ОАО "НЛМК"

Сообщение Добавлено: Пт Май 06, 2011 13:35    Заголовок сообщения: Ответить с цитатой

Собираете информацию -> пишете в DB -> передаёте на верхний уровень(Ethernet?)
Никаких сдвиговых буферов не нужно. Все операции можно делать в различных циклических OB, например: опрос датчиков и запись в DB - OB37, передача на верхний уровень - OB35. А можно и всё в один цикл "запихать".
Если "сбор" информации неудачен(или вызвано диагностическое прерывание на "отвал" ET-шки) - в DB не пишется,остаётся и передаётся предыдущее значение(и бит ошибки сбора данных).


Последний раз редактировалось: Негатив (Пт Май 06, 2011 13:42), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Vladimir87
Новый писатель


Зарегистрирован: 17.03.2011
Сообщения: 35

Сообщение Добавлено: Пт Май 06, 2011 13:41    Заголовок сообщения: Ответить с цитатой

а если обрыв связи ? где будут храниться значения переменных за время обрыва ? опрос нужен каждую секунду
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Негатив
Написал больше чем Вы читали


Зарегистрирован: 26.02.2006
Сообщения: 1059
Откуда: Липецк, ОАО "НЛМК"

Сообщение Добавлено: Пт Май 06, 2011 13:44    Заголовок сообщения: Ответить с цитатой

Vladimir87 писал(а):
а если обрыв связи ? где будут храниться значения переменных за время обрыва ? опрос нужен каждую секунду

Раз в секунду - это довольно медленно ;)
Пропала, к примеру, связь на 5 секунд - разъём кто-то выдернул и обратно воткнул. И будете вы на верхний уровень передавать _устаревшие_на_5_секунд_ данные. Причём постоянно. И задержка будет накапливаться. Понимаете, чем это грозит?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Vladimir87
Новый писатель


Зарегистрирован: 17.03.2011
Сообщения: 35

Сообщение Добавлено: Пт Май 06, 2011 14:04    Заголовок сообщения: Ответить с цитатой

Как это ? Из буфера данные передаются все сразу с метками времени , времени хватит все передать до следующего опроса + если и так то это не мои проблемы . Мне помогут ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр В..
Известный Писатель


Зарегистрирован: 06.07.2009
Сообщения: 331
Откуда: Санкт-Петербург

Сообщение Добавлено: Пт Май 06, 2011 14:42    Заголовок сообщения: Ответить с цитатой

ситуацию потерю связи можно решить дублированием/резервированием линий связи.
вы допускаете обрыв связи PLC-WinCC.
скажите, связь PLC-Сигнальные модули у вас резервированная? Тип ПЛК отказоустойчивый? Кабель до датчиков дублируется? Датчики дублируются?
накопить данные в ПЛК и отослать их асинхронным обменом - дело техники программирования, которой вам явно не хватает
вы уже продумали прием данных на стороне WinCC? Это будет сыпаться в TagLogging? Со своими метками времени?

особо ответственный объект? обеспечив буферизацию и передачу данных за время потери связи с HMI что вы выиграете? ПЛК должен отработать аварийную ситуацию, и при восстановлении связи, оператор увидит систему в безопасном состоянии, при определенной вашей сноровке, никак не связанной с кольцевыми буферами и чудо-функциями FieldRead и т.п.


Последний раз редактировалось: Александр В.. (Пт Май 06, 2011 14:46), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
new_user
Известный Писатель


Зарегистрирован: 18.06.2007
Сообщения: 101
Откуда: Украина, ПАО "МК "Азовсталь"

Сообщение Добавлено: Пт Май 06, 2011 14:44    Заголовок сообщения: Ответить с цитатой

Vladimir87 писал(а):
Как это ? Из буфера данные передаются все сразу с метками времени , времени хватит все передать до следующего опроса + если и так то это не мои проблемы . Мне помогут ?


А зачем вам лишняя головная боль: данные в ПЛК хранить в буферном DB да еще и с метками времени - вы же их в СКАДу передаете, пусть там в архив значений процесса и пишутся, будет вам и время и значения. Вот пример кода функционального блока, реализующего буфер например на 60 значений сигнала с аналогового входа за минуту (блок вызываем каждую секунду). Буфер со значениями будет в экзеемплярном DB:
Код:

FUNCTION_BLOCK FB1
TITLE = 'значения за последнюю минуту'

VAR_INPUT
an_vhod: REAL; //аналоговый вход обработанный и масштабированный
END_VAR

VAR
x:ARRAY [1..60] OF REAL; //массив дл зн сигнала аналог.входа
i: INT;
END_VAR

  // Instruction Section
  //сдвиг массива
FOR i:= 1 TO 59 DO
    x[i]:=x[i+1];
END_FOR;

x[60]:=an_vhod; //ввод_значения в буфер

END_FUNCTION_BLOCK

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vladimir87
Новый писатель


Зарегистрирован: 17.03.2011
Сообщения: 35

Сообщение Добавлено: Пт Май 06, 2011 14:49    Заголовок сообщения: Ответить с цитатой

а можно в stl ? пакета scl нету (
Так вы советуете напрямую все передавать в скаду ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр В..
Известный Писатель


Зарегистрирован: 06.07.2009
Сообщения: 331
Откуда: Санкт-Петербург

Сообщение Добавлено: Пт Май 06, 2011 15:00    Заголовок сообщения: Ответить с цитатой

трудно советовать не имея информации об объекте, алгоритме управления и мерах противоаварийной защиты =)
в недавнем проекте для особо важных аналоговых сигналов мы использовали аналоговые развязки Phoenix и безбумажные регистраторы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Vladimir87
Новый писатель


Зарегистрирован: 17.03.2011
Сообщения: 35

Сообщение Добавлено: Пт Май 06, 2011 15:02    Заголовок сообщения: Ответить с цитатой

Дело в том что я не являюсь главным в реализации сего проекта. Моим начальником был сделан проект на S7 1200, мне же нужно его просто повторить на S7 300. НА 1200 все хорошо работает .
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр В..
Известный Писатель


Зарегистрирован: 06.07.2009
Сообщения: 331
Откуда: Санкт-Петербург

Сообщение Добавлено: Пт Май 06, 2011 15:11    Заголовок сообщения: Ответить с цитатой

Vladimir87 писал(а):
проект на S7 1200, мне же нужно его просто повторить на S7 300. НА 1200 все хорошо работает .

насколько часто пригождалась функция отправки данных из буфера при работе проекта на 1200?
если есть решение для приема данных WinCC, то может и есть смысл делать буфер этот =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Vladimir87
Новый писатель


Зарегистрирован: 17.03.2011
Сообщения: 35

Сообщение Добавлено: Пт Май 06, 2011 15:19    Заголовок сообщения: Ответить с цитатой

Так я и рад его делать, но не знаю как . Спрашиваю на форуме, а мне вопросом на вопрос только отвечают .
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр В..
Известный Писатель


Зарегистрирован: 06.07.2009
Сообщения: 331
Откуда: Санкт-Петербург

Сообщение Добавлено: Пт Май 06, 2011 15:36    Заголовок сообщения: Ответить с цитатой

похоже популярна задача
http://iadt.siemens.ru/forum/viewtopic.php?t=16470
я такие решения никогда не делал и поделиться мне с вами нечем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
new_user
Известный Писатель


Зарегистрирован: 18.06.2007
Сообщения: 101
Откуда: Украина, ПАО "МК "Азовсталь"

Сообщение Добавлено: Пт Май 06, 2011 23:52    Заголовок сообщения: Ответить с цитатой

Почитайте, что написано в этом ФАКе:
How can you access an element indirectly in STL in a two-dimensional array (e.g. a value in line 2 and column 5)?
https://support.automation.siemens.com/WW/llisapi.dll/22423651?func=ll&objId=24520463&objAction=csView&ehbid=22423651&query=array+stl&lang=en&siteid=cseus&aktprim=0&extranet=standard&viewreg=WW&load=treecontent
ИМХО, работать с массивами в STL, а не в SCL - геморрой, но когда другого выхода нет, то...

Немного переделал программу по ссылке выше. Проверил - работает.
1. Создаем функцию FC10.
Входные параметры:
iIntSpalte - тип Int - индекс элемента одномерного массива в DB (например 1..25)
Выходные параметры:
oDwAdr - тип DWord - адрес с форматом указателя
oBoError - тип Bool - ошибка
Параметры TEMP:
tIntErg - тип Int - вспомогательная переменная для вычисления адреса указателя
tBoError - тип Bool - временный бит ошибки
Код FC10:
Код:

//Инициализация переменных
      SET   
      R     #tBoError
      L     0
      T     #tIntErg
//Проверка границ массива
      L     #iIntSpalte
      L     1
      <I   
      S     #tBoError
      JC    END

      L     #iIntSpalte
      L     25
      >I   
      S     #tBoError
      JC    END
//Вычисление смещения (целочисленное значение)
      L     #iIntSpalte
      DEC   1
      L     4                           //В типе Реал 4 байта
      *I   
      L     #tIntErg
      +I   
      T     #tIntErg
//Формирование выходных значений функции
END:  NOP   0
// Преобразование к типу указателя
      L     #tIntErg
      ITD   
      SLD   3
      T     #oDwAdr
// Если tBoError=1 то на выходе - ошибка
      A     #tBoError
      =     #oBoError


2. Создаем DB11 с массивом значений [1..25] типа Real

3. В ОВ1 вызываем FC10 и читаем значения из Db11 по индексу
Код:

      CALL  FC    10
       iIntSpalte:=MW12 //Индекс элемента в массиве
       oDwAdr    :=MD20 //Значение указателя
       oBoError  :=M1.1 //Ошибка

      A     M      1.1
      JC    end

      OPN   DB    11                    //Вызов DB с массивом
      LAR1  MD    20                    //Грузим указатель
      L     DBD [AR1,P#0.0]             //Получаем значение искомого элемента массива
      T     MD    30

end:  NOP   0



Вроде похоже на работу ф. FieldRead, насколько я понял из ее описания.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов SIEMENS, Россия. IA&DT -> Промышленное программное обеспечение Часовой пояс: GMT + 3
На страницу Пред.  1, 2
Страница 2 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB 2.0.11 © 2001, 2002 phpBB Group