EB Pro и S5TIME

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

EB Pro и S5TIME

Сообщение Uncle Fedor » 13 май 2014, 08:09

Доброго всем времени суток.
Возник вопрос, как без преобразования данных на стороне ПЛК, отображать данные типа S5TIME на панели.
Пробовал использовать форматы 16 bit BCD и 32 bit BCD, всё замечательно если изменяемое время < 9.99 сек, однако если время более 10.00 сек начинаются проблемы. Поставив 10.00 сек на панели, в ПЛК получаем S5time 0 ms, а устанвовив в ПЛК S5time 1 m в панели получаем 16,00.
Понимаю, что можно преобразовать в ПЛК S5TIME - > BCD потом BCD - > S5TME на панели использовать чтение/запись с разных адресов, но как-то слишком заковыристо получается, если кто сталкивался с данной проблемой, может быть есть простое решение?
Uncle Fedor
 
Сообщения: 18
Зарегистрирован: 17 фев 2014, 06:20

Re: EB Pro и S5TIME

Сообщение den_po » 14 май 2014, 09:45

Преобразование данных в любом случае нужно, либо на стороне ПЛК, либо на стороне панели.
Регистр в этом формате кроме времени содержит информацию о диапазоне (множитель). Для значения больше 9.99с этот множитель - ненулевой.
Описание формата http://support.automation.siemens.com/W ... aller=view
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EB Pro и S5TIME

Сообщение Uncle Fedor » 19 май 2014, 08:08

А каким образом делать преобразование на стороне панели?
Я только начинаю разбираться с EBpro, еще много белых пятен, если не сложно дайте пример.
Заранее благодарен.
Uncle Fedor
 
Сообщения: 18
Зарегистрирован: 17 фев 2014, 06:20

Re: EB Pro и S5TIME

Сообщение den_po » 19 май 2014, 12:28

Макросами. Примерно так

Миллисекунды в S5TIME:
Код: Выделить всё
  1. //исходное значение: LW0 32бита беззнаковое целое
  2. //результат: LW2 16бит S5TIME (в случае успеха)
  3. macro_command main()
  4. unsigned int timems
  5. GetData(timems, "Local HMI", LW, 0, 1)
  6. timems = timems/10
  7. unsigned int base = 0
  8. while timems>999
  9.    timems = timems / 10
  10.    base = base + 1
  11. wend
  12. if base > 3 then
  13.    //ошибка! число не в диапазоне
  14. else
  15.    unsigned short s5time
  16.    BIN2BCD(timems, s5time)
  17.    s5time = s5time + (base<<12)
  18.    
  19.    //сохраняем результат
  20.    SetData(timems, "Local HMI", LW, 2, 1)
  21.    
  22. end if
  23. end macro_command


S5TIME в миллисекунды
Код: Выделить всё
  1. //исходное значение: LW2 16бит S5TIME
  2. //результат: LW0 32бита беззнаковое целое
  3. macro_command main()
  4. unsigned short s5time
  5. GetData(s5time, "Local HMI", LW, 0, 1)
  6. unsigned int timems
  7. int base
  8. base = (s5time >> 12) & 3
  9. s5time = s5time & 0xFFF
  10. BCD2BIN(s5time, timems)
  11. while base>=0
  12.    timems = timems * 10
  13.    base = base - 1
  14. wend
  15. end macro_command
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EB Pro и S5TIME

Сообщение Uncle Fedor » 19 май 2014, 13:03

Огромное спасибо буду пробовать.
Uncle Fedor
 
Сообщения: 18
Зарегистрирован: 17 фев 2014, 06:20

Re: EB Pro и S5TIME

Сообщение Uncle Fedor » 27 апр 2015, 09:59

Реализовал функцию на стороне контроллера:
Ввод времени в формате REAL (он же Floating point), также вывод времени в REAL.
Кто с S-300/400 работал знают, что ввод происходит в S5TIME, а вывод может происходить в INT, либо в S5TIME, второй вариант мне удобней т.к есть идентификатор разрешения таймера.
Код: Выделить всё
  1. FUNCTION FC 2 : VOID
  2. TITLE =
  3. VERSION : 0.1
  4. VAR_INPUT
  5.   TIME_REAL : REAL ;   
  6.   S5T_INP : S5TIME ;   
  7. END_VAR
  8. VAR_OUTPUT
  9.   S5T_OUT : S5TIME ;   
  10.   REAL_OUT : REAL ;   
  11. END_VAR
  12. BEGIN
  13. NETWORK
  14. TITLE =
  15. // Определение пределов ввода времени
  16. // от 0 мс до 9 сек 990 мс
  17.       L     #TIME_REAL;
  18.       L     9.990000e+000;
  19.       <=R   ;
  20.       JC    T000;
  21. // от 9 сек 990 мс мс до 99 сек 900 мс
  22.       L     #TIME_REAL;
  23.       L     9.990000e+001;
  24.       <=R   ;
  25.       JC    T001;
  26. // от 99 сек 900 мс до 999 сек
  27.       L     #TIME_REAL;
  28.       L     9.990000e+002;
  29.       <=R   ;
  30.       JC    T002;
  31. // от 999 сек до 9990 сек
  32.       L     #TIME_REAL;
  33.       L     9.990000e+002;
  34.       >R    ;
  35.       JC    T003;
  36. // Преобразование
  37. // от 0 мс до 9 сек 990 мс [ПРЕОБРАЗОВАНИЯ НЕ ТРЕБУЮТСЯ]
  38. T000: L     #TIME_REAL;
  39. // Множитель для REAL числа
  40.       L     1.000000e+002;
  41.       *R    ;
  42.       RND   ;
  43.       DTB   ;
  44.       JU    TEND;
  45. // от 9 сек 990 мс мс до 99 сек 900 мс [ПРЕОБРАЗОВАНИЯ 1]
  46. T001: L     #TIME_REAL;
  47. // Множитель для REAL числа
  48.       L     1.000000e+001;
  49.       *R    ;
  50.       RND   ;
  51.       DTB   ;
  52.       L     W#16#1000;
  53.       OW    ;
  54.       JU    TEND;
  55. // от 99 сек 900 мс до 999 сек [ПРЕОБРАЗОВАНИЯ 2]
  56. T002: L     #TIME_REAL;
  57.       RND   ;
  58.       DTB   ;
  59.       L     W#16#2000;
  60.       OW    ;
  61.       JU    TEND;
  62. // от 999 сек до 9990 сек [ПРЕОБРАЗОВАНИЯ 3]
  63. T003: L     #TIME_REAL;
  64. // Множитель для REAL числа
  65.       L     1.000000e-001;
  66.       *R    ;
  67.       RND   ;
  68.       DTB   ;
  69.       L     W#16#3000;
  70.       OW    ;
  71.       JU    TEND;
  72. TEND: T     #S5T_OUT;
  73.       NOP   0;
  74. NETWORK
  75. TITLE =
  76. // Определение пределов вывода времени
  77. // от 0 мс до 9 сек 990 мс
  78.       L     #S5T_INP;
  79.       L     2457;
  80.       <=I   ;
  81.       JC    D000;
  82. // от 9 сек 990 мс мс до 99 сек 900 мс
  83.       L     #S5T_INP;
  84.       L     6553;
  85.       <=I   ;
  86.       JC    D001;
  87. // от 99 сек 900 мс до 999 сек
  88.       L     #S5T_INP;
  89.       L     10649;
  90.       <=I   ;
  91.       JC    D002;
  92. // от 999 сек до 9990 сек
  93.       L     #S5T_INP;
  94.       L     10649;
  95.       >I    ;
  96.       JC    D003;
  97. // Обратное преобразование
  98. // от 0 мс до 9 сек 990 мс [ПРЕОБРАЗОВАНИЯ НЕ ТРЕБУЮТСЯ]
  99. D000: L     #S5T_INP;
  100.       BTD   ;
  101.       DTR   ;
  102. // Множитель для REAL числа
  103.       L     1.000000e-002;
  104.       *R    ;
  105.       JU    DEND;
  106. D001: L     #S5T_INP;
  107.       L     W#16#1000;
  108.       XOW   ;
  109.       BTD   ;
  110.       DTR   ;
  111. // Множитель для REAL числа
  112.       L     1.000000e-001;
  113.       *R    ;
  114.       JU    DEND;
  115. D002: L     #S5T_INP;
  116.       L     W#16#2000;
  117.       XOW   ;
  118.       BTD   ;
  119.       DTR   ;
  120.       JU    DEND;
  121. D003: L     #S5T_INP;
  122.       L     W#16#3000;
  123.       XOW   ;
  124.       BTD   ;
  125.       DTR   ;
  126. // Множитель для REAL числа
  127.       L     1.000000e+001;
  128.       *R    ;
  129.       JU    DEND;
  130. DEND: T     #REAL_OUT;
  131.       NOP   0;
  132. END_FUNCTION

Функция призвана путем сравнения, автоматически подставлять множитель для "S5TIME" значений. Может быть кому-нибудь пригодится.
Uncle Fedor
 
Сообщения: 18
Зарегистрирован: 17 фев 2014, 06:20

Re: EB Pro и S5TIME

Сообщение den_po » 01 июн 2015, 11:40

Кстати, в последних версиях для S7-1200 добавлены типы: S5TIME_10Ms, S5TIME_100Ms, S5TIME_1S, S5TIME_10S.
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25


Вернуться в Weintek

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 75