Segnetics

Вернуться   Segnetics > Форум Segnetics > SMLogix

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.07.2019, 13:02   #271
RomanIst
Member
 
Регистрация: Dec 2018
Сообщения: 89
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата:
Сообщение от Arsie Посмотреть сообщение
https://forum.segnetics.com/showthread.php?t=315 .

Блоки со входом real серьёзным образом погасят быстродействие линеек SMH2010/Pixel/SMH2G.

В этом случае пользуйтесь задержками в циклах системы, это всё равно константная величина. Кроме неудобства использования это даёт чудовищную экономию ресурсов контроллера на математике. А посчитать 10 или даже 20 задержек на калькуляторе не больно большая проблема, на самом деле. Редко когда задержек нужно много.



Прежде, чем что-то просить, нужно оценивать все аспекты своей просьбы. Я вот тоже хочу попадать на работу безо всех этих нервов в пробках и поднимания/опускания по лестницам. Это реально воплотить в жизнь. 2-3 носильщика, персональный водитель и вот оно, счастье. Но этим людям нужно платить зарплату. Моей зарплаты на это не хватит.

Ну это да но если бы человек не научился добывать огонь он так остался бы приматом в мире животных). Ведь нужно как то двигаться в сторону удобства.


Добавлено через 2 минуты

Цитата:
Сообщение от Arsie Посмотреть сообщение
https://forum.segnetics.com/showthread.php?t=315 . Да ещё и вы потом обманите сами себя, задав выдержку 2 мсек и удивляясь потом, почему Пиксель отмерил 0.2 секунды. А это всё от того, что он за вас всё посчитал, сэкономив вам секунд 5 времени и поэтому тормозит при работе.
Не обязательно контроллеры предыдущих поколений...
P.S И аспект - удобство я считаю вполне весомым.
RomanIst вне форума   Ответить с цитированием
Старый 24.07.2019, 13:37   #272
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от RomanIst Посмотреть сообщение
Не обязательно контроллеры предыдущих поколений...
P.S И аспект - удобство я считаю вполне весомым.
И станет в дополнение к "Как сделать слейва?" ещё одна часто поднимаемая тема "почему Пиксель тормозит?".

Запросов на доли секунды за этот год - 2 штуки. За 15 лет - 3 штуки. Думаю, мне проще 3 раза объяснить, как сделать, чем постоянно отвечать, как делать нельзя.

Вы же понимаете, как сделать себе макрос, работающий с долями секунд? Взять макрос time to tick, перевести математику в real и результат подать на стандартные макросы задержек в тиках.


PS. Я наверное добавлю потом макрос расчёта долей секунд в библиотеку.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 24.07.2019, 14:30   #273
RomanIst
Member
 
Регистрация: Dec 2018
Сообщения: 89
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата:
Сообщение от Arsie Посмотреть сообщение
И станет в дополнение к "Как сделать слейва?" ещё одна часто поднимаемая тема "почему Пиксель тормозит?".

Запросов на доли секунды за этот год - 2 штуки. За 15 лет - 3 штуки. Думаю, мне проще 3 раза объяснить, как сделать, чем постоянно отвечать, как делать нельзя.

Вы же понимаете, как сделать себе макрос, работающий с долями секунд? Взять макрос time to tick, перевести математику в real и результат подать на стандартные макросы задержек в тиках.


PS. Я наверное добавлю потом макрос расчёта долей секунд в библиотеку.

Видимо я тот самый из меньшинства кто часто пользуется долями секунд. В моем проекте временных задержек штук 30 или более и почти все из них задают задержку в долях секунд соответственно контроллер работает с мин. временем цикла.
У меня опыта программирования сегнетикс около 3-х месяцев. Поэтому при написании программы я заложил как фундамент задание времени во всех задержках переменной int (макрос ваш заводской). И была уверенность что контроллер потянет цикл 10мс следовательно везде выставил время с учетом данной константы. Но при готовности программы и залитии ее в ПЛК выяснилось что он тянет только 13мс и
поэтому пришлось спокойно с калькулятором сидеть и пересчитовать.

После этих небольших грабель я буду закладывать уже свои модифицированные макросы с автоматическим пересчетом этого времени в независимости от времени цикла системы.
Поэтому я предложил Вам сделать данное улучшение, для того чтобы другие не повторяли моих ошибок.
RomanIst вне форума   Ответить с цитированием
Старый 24.07.2019, 14:37   #274
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от RomanIst Посмотреть сообщение
при написании программы я заложил как фундамент задание времени во всех задержках переменной int (макрос ваш заводской). И была уверенность что контроллер потянет цикл 10мс следовательно везде выставил время с учетом данной константы. Но при готовности программы и залитии ее в ПЛК выяснилось что он тянет только 13мс и
поэтому пришлось спокойно с калькулятором сидеть и пересчитовать.
Вот тот самый случай, когда с вашим предложением получится не 13 мс, а 30 мс. Что в ряде случаев сделает задачу невыполнимой из-за слишком медленной работы контроллера.

Сам же корень вашей проблемы хотя бы в том, что все действия, зависимые от времени цикла, нужно рассчитывать в конце. Причина проста: вы не знаете истинного времени цикла. В итоге вы дважды посчитали: в начале реализации, когда время цикла было неизвестным и в конце реализации, когда оно стало известным.


Добавлено через 1 минуту

Цитата
Сообщение от RomanIst Посмотреть сообщение
Поэтому я предложил Вам сделать данное улучшение, для того чтобы другие не повторяли моих ошибок.
Одни ошибки (сделать работу дважды) заменить на другие, возможно более фатальные.

Я понимаю суть вашего предложения и объяснил его неоднозначность. Да и проблема у вас не в долях. Доли - это лишь способ решить вашу проблему, причём косвенный способ, по которому даже поговорка народная есть. Настоящее решение - это воспитание в себе привычки не делать ту работу, которую невозможно выполнить правильно в настоящий момент времени. Сейчас вы просто посидели с калькулятором, потом в другой задаче может неделя пропасть зря.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 24.07.2019, 14:43   #275
RomanIst
Member
 
Регистрация: Dec 2018
Сообщения: 89
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата:
Сообщение от Arsie Посмотреть сообщение
Вот тот самый случай, когда с вашим предложением получится не 13 мс, а 30 мс. Что в ряде случаев сделает задачу невыполнимой из-за слишком медленной работы контроллера.

Сам же корень вашей проблемы хотя бы в том, что все действия, зависимые от времени цикла, нужно рассчитывать в конце. Причина проста: вы не знаете истинного времени цикла. В итоге вы дважды посчитали: в начале реализации, когда время цикла было неизвестным и в конце реализации, когда оно стало известным.
Вот если эти не 13мс а 30мс, то я бы сюда не написал).
Значения задержек формировались во время написания программы, т.е. я смотрю очень селективно на выполнение определенного алгоритма поэтому наиболее правильно и верно получается определить точное время задержки которое требуется. Короче не знаю может быть это только в моем случае такие выводы получаются...
RomanIst вне форума   Ответить с цитированием
Старый 24.07.2019, 14:49   #276
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от RomanIst Посмотреть сообщение
Вот если эти не 13мс а 30мс, то я бы сюда не написал).
Значения задержек формировались во время написания программы, т.е. я смотрю очень селективно на выполнение определенного алгоритма поэтому наиболее правильно и верно получается определить точное время задержки которое требуется. Короче не знаю может быть это только в моем случае такие выводы получаются...
Если мне требуется в задаче ловить миллисекунды, то я в одном месте программы группирую все входы задержек. Ну типа как макрос Config в Конструкторах. Это позволяет пересчитывать все времена хотя бы централизованно, не разыскивая нужные блоки и не забывая всё напрочь через год-два)


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 24.07.2019, 15:08   #277
RomanIst
Member
 
Регистрация: Dec 2018
Сообщения: 89
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата:
Сообщение от Arsie Посмотреть сообщение
Если мне требуется в задаче ловить миллисекунды, то я в одном месте программы группирую все входы задержек. Ну типа как макрос Config в Конструкторах. Это позволяет пересчитывать все времена хотя бы централизованно, не разыскивая нужные блоки и не забывая всё напрочь через год-два)
Это хорошо буду применять.
Есть еще один нюанс, это те случаи когда программа написана, со временем все ясно, но: А дайка я еще что нибудь напишу, а давай тут вот это прибавлю и понеслась) И время цикла будет постоянно увеличиваться и пересчитовать придется постоянно и...
Из этого следует - сделайте блок time to tick в милисекундах (без real) чтобы он был базовым.

Последний раз редактировалось RomanIst, 24.07.2019 в 15:23
RomanIst вне форума   Ответить с цитированием
Старый 24.07.2019, 15:28   #278
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от RomanIst Посмотреть сообщение
Это хорошо буду применять.
Есть еще один нюанс, это те случаи когда программа написана, со временем все ясно, но: А дайка я еще что нибудь напишу, а давай тут вот это прибавлю и понеслась) И время цикла будет постоянно увеличиваться и пересчитовать придется постоянно и...
Это решается просто. Если задаче достаточно времени цикла 50 мсек, то не нужно загонять контроллер в 10 мсек. Не будет и проблем.

А если задаче нужен цикл 10 мсек, то вы не сможете раздуть алгоритм выше 10 мсек, т.к. задача станет невыполнима.

В общем, пример из разряда "Назло маме уши отморожу"



Цитата
Сообщение от RomanIst Посмотреть сообщение
Из этого следует - сделайте блок time to tick в милисекундах (без real) чтобы он был базовым.
Литр воды, что в бутылке, что в банке, что в луже - это литр воды.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 24.07.2019, 15:39   #279
RomanIst
Member
 
Регистрация: Dec 2018
Сообщения: 89
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата:
Сообщение от Arsie Посмотреть сообщение
Это решается просто. Если задаче достаточно времени цикла 50 мсек, то не нужно загонять контроллер в 10 мсек. Не будет и проблем.

А если задаче нужен цикл 10 мсек, то вы не сможете раздуть алгоритм выше 10 мсек, т.к. задача станет невыполнима.

В общем, пример из разряда "Назло маме уши отморожу"





Литр воды, что в бутылке, что в банке, что в луже - это литр воды.
Один маленький блочек - а рутины меньше для деток)
Даже лучше было бы заменить блок секундный на милисекундный.
RomanIst вне форума   Ответить с цитированием
Старый 24.07.2019, 16:19   #280
ujin
Senior Member
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 450
Благодарил(а): 0 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от RomanIst Посмотреть сообщение
Даже лучше было бы заменить блок секундный на милисекундный.
У одного известного и большого производителя на форуме можно проголосовать за предложения по улучшению. Если предложение не набрало нужных голосов - снимается. Набрало - ставится в очередь. Много голосов передвигается вперед по очереди.
Я бы проголосовал за Ваше предложение принять за базу миллисекунды
Еще несколько предложений:
1. Тип int 64, uint 64
2. Цикл FOR (foreach) - вывести из недокументированной возможности
3. Переменные типа массив (разных типов).


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 24.07.2019, 16:41   #281
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от ujin Посмотреть сообщение
У одного известного и большого производителя на форуме можно проголосовать за предложения по улучшению. Если предложение не набрало нужных голосов - снимается. Набрало - ставится в очередь. Много голосов передвигается вперед по очереди.
У нас не тот охват у форума. К сожалению.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 25.07.2019, 11:44   #282
ackur
Новичок
 
Регистрация: Oct 2015
Сообщения: 17
Благодарил(а): 1 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от ujin Посмотреть сообщение
2. Цикл FOR (foreach) - вывести из недокументированной возможности
А можно поподробнее?
ackur вне форума   Ответить с цитированием
Старый 13.09.2019, 14:16   #283
Shurion
Новичок
 
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 22
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Добавлю и я тоже не большую хотелку.
Хотелось бы чтобы вид связи переключался автоматически. Например при нажатии на именованную связь (которая уже существует), вид переключался тоже, а то сейчас приходится каждый раз в ручную.
Shurion вне форума   Ответить с цитированием
Старый 13.09.2019, 14:22   #284
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от Shurion Посмотреть сообщение
Добавлю и я тоже не большую хотелку.
Хотелось бы чтобы вид связи переключался автоматически. Например при нажатии на именованную связь (которая уже существует), вид переключался тоже, а то сейчас приходится каждый раз в ручную.
Альт инвертирует тип проводимой связи


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 13.09.2019, 14:29   #285
Shurion
Новичок
 
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 22
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Ну это же лишнее нажатие клавиши
Поэтому и хотелочка чтобы автоматически при нажатии на связь
UPD: А как это работает? что то у меня не получилось через альт?
Shurion вне форума   Ответить с цитированием
Старый 13.09.2019, 14:34   #286
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от Shurion Посмотреть сообщение
Ну это же лишнее нажатие клавиши
Поэтому и хотелочка чтобы автоматически при нажатии на связь
UPD: А как это работает? что то у меня не получилось через альт?
Alt + тыкнуть на выходе блока.



PS. Я поддерживаю вашу хотелку, тоже хочу этого несколько лет уже)


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 13.09.2019, 19:08   #287
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 1 954
Благодарил(а): 32 раз(а)
Поблагодарили: 10 раз(а) в 9 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата:
Сообщение от Arsie Посмотреть сообщение
Альт инвертирует тип проводимой связи
это касается только 3.30.*** или 3.28.*** тоже?


__________________
C уважением, LordN
LordN вне форума   Ответить с цитированием
Старый 15.09.2019, 17:57   #288
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от LordN Посмотреть сообщение
это касается только 3.30.*** или 3.28.*** тоже?
3.28 тоже.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 15.09.2019, 21:19   #289
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 1 954
Благодарил(а): 32 раз(а)
Поблагодарили: 10 раз(а) в 9 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата:
Сообщение от Arsie Посмотреть сообщение
3.28 тоже.
у меня альт включает только именованную связь. из проводка. обратно - нет.


__________________
C уважением, LordN
LordN вне форума   Ответить с цитированием
Старый 16.09.2019, 10:39   #290
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 224
Благодарил(а): 3 раз(а)
Поблагодарили: 65 раз(а) в 63 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от LordN Посмотреть сообщение
у меня альт включает только именованную связь. из проводка. обратно - нет.
ПКМ по поляне щёлкните, переключится обратно в проводок.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Благодарность от:
Старый 27.09.2019, 05:10   #291
SlavikP
Member
 
Регистрация: May 2019
Сообщения: 32
Благодарил(а): 2 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Небольшие хотелки в SMLogix

Озвучу свою хотелку.
Возможно ли сделать привязку блоков к сетке, чтоб они сами "прилипали" к узлам?
А то выравнивать напрягает.
И еще совсем маленькая хотелка.
А возможно ли в лоджике изменять масштаб отображения? Иногда было бы очень удобно.
SlavikP вне форума   Ответить с цитированием
Старый 27.09.2019, 09:25   #292
gcvdsv
Member
 
Регистрация: Dec 2015
Сообщения: 77
Благодарил(а): 10 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Хотелось бы иметь поиск по проекту в дополнение к ctrl+F и проводнику,
Что то вроде строки поиска на панели инструментов, с выпадающим списком после ввода.
gcvdsv вне форума   Ответить с цитированием
Старый 27.09.2019, 12:16   #293
Ilya J.
Сотрудник Segnetics
 
Аватара для Ilya J.
 
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 545
Благодарил(а): 0 раз(а)
Поблагодарили: 46 раз(а) в 45 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Цитата
Сообщение от SlavikP Посмотреть сообщение
Озвучу свою хотелку.
Возможно ли сделать привязку блоков к сетке, чтоб они сами "прилипали" к узлам?
А то выравнивать напрягает.
И еще совсем маленькая хотелка.
А возможно ли в лоджике изменять масштаб отображения? Иногда было бы очень удобно.
Привязка к сетке на мой взгляд медвежья услуга, постоянно будет прилипать куда-то не туда, а если раздражает, можете сетку убрать или наоборот частоту увеличить, к какому-нибудь узлу да прилипнет)

Про масштаб соглашусь, было бы удобно, но сейчас такого нет.


Добавлено через 59 секунд

Цитата
Сообщение от gcvdsv Посмотреть сообщение
Хотелось бы иметь поиск по проекту в дополнение к ctrl+F и проводнику,
Что то вроде строки поиска на панели инструментов, с выпадающим списком после ввода.
Мне кажется, таким образом получится проводник, только в другом виде.


__________________
https://segnetics.com/support
Ilya J. вне форума   Ответить с цитированием
Старый 27.09.2019, 13:44   #294
gcvdsv
Member
 
Регистрация: Dec 2015
Сообщения: 77
Благодарил(а): 10 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Небольшие хотелки в SMLogix

Еще хотелка, что бы в смарте, тип enum принимал не только int, но и bool.
Основной посыл, что бы не ставить постоянно boolToInt
gcvdsv вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подвис проект после обновления SMlogix Login Вопросы о SMH-2G(i) 16 22.03.2016 19:06
WebHelp SMLogix в PDF vlanaz SMLogix 0 01.12.2015 09:54
Обновление SMLogix: версия 3.18.0011 Arsie SMLogix 0 15.05.2009 17:07
Выпущена новая версия SMLogix: 3.18 Arsie SMLogix 0 27.03.2009 11:02
SMLogix + GSM Max2114 Связь с внешним миром 41 16.02.2009 17:55


Часовой пояс GMT +4, время: 09:29.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2019