AlexandrY 3 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 35 minutes ago, syoma said: В CODESYS Control for Raspberry Pi все, что я указал выше, работает прямо из коробки без необходимости докупки лицензий. Эт все хрошо. Но K-Bus уже не будет и придется действительно полагаться на EtherCAT. Еще вопрос будет ли TCP MODBUS работать одновременно с EtherCAT (а modbus нужен обязательно). Риски сбоев сильно возрастают и быстродействие снижается. И не вижу чтобы CoDeSys для RPi давал патч для превращения линукса в RT, это настораживает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
framer 0 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 54 minutes ago, AlexandrY said: И не вижу чтобы CoDeSys для RPi давал патч для превращения линукса в RT, это настораживает. Вот наткулся. https://forge.codesys.com/trg/raspberry-pi/wiki/Home/#realtime-patch Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 3 minutes ago, framer said: Вот наткулся. https://forge.codesys.com/trg/raspberry-pi/wiki/Home/#realtime-patch Это патч для Rpi 2 / 3 а там, как известно, Ethernet сделан через ж..у USB Если связываться, то только с Rpi 4, поскольку риалтаймность Ethernet-а в такой системе становится критической. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 1 hour ago, AlexandrY said: Еще вопрос будет ли TCP MODBUS работать одновременно с EtherCAT (а modbus нужен обязательно). EtherCAT требует отдельного Ethernet порта. Ничего другого там быть не может. Для Modbus TCP надо просто отдельный USB Ethernet адаптер докупить. 1 hour ago, AlexandrY said: И не вижу чтобы CoDeSys для RPi давал патч для превращения линукса в RT, это настораживает. На форуме Codesys есть инфа, как пропатчить линукс до RT. Большинству это не нужно, так как там и так уже достаточно хорошие цифры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 5 minutes ago, syoma said: EtherCAT требует отдельного Ethernet порта. Ничего другого там быть не может. Для Modbus TCP надо просто отдельный USB Ethernet адаптер докупить. Ну не факт. Есть же EtherCAT драйвера для обычных PC. B по UDP можно EtherCAT транспортировать, как википедия вещает. Кто его знает что там в линуксе нахимичено. А отдельный USB Ethernet обещает великий колхоз. Понянет ли CoDeSys мапинг переменных из каплеров через такой интерфейс? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба Я имел ввиду, что к тому порту, на котором будет EtherCAT, может быть подключен только EtherCAT Каплер и больше ничего туда не подключишь - то есть он будет зарезервирован только за EtherCATом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба Посмотрел я как выглядит CODESYS Development System V3 Уныло. Голая IDE. Каталога оборудования нет, что с чем совместимо никакой информации. Остается только верить вашим словам что EtherCAT не может работать на одном интерфейсе с Ethernet UDP/TCP. На одни только опыты уйдет куча временги. Столько времени нет. Тот же KNX приобрел популярность, думаю, не потому что он такой протокол весь из себя замечательный, а потому что там есть всегда актуальный каталог и полный контроль совместимости. Инсталяторы не теряются в догадках что с чем заработает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yamantau 15 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 22 минуты назад, AlexandrY сказал: Посмотрел я как выглядит CODESYS Development System V3 Уныло. Голая IDE. Таргеты целевых платформ распространяются производителями самих железок, как мне помнится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 1 hour ago, AlexandrY said: Посмотрел я как выглядит CODESYS Development System V3 Уныло. Голая IDE. А тот e!Cockpit не на V2.3 случайно построен? То еще большее уныние. Quote Каталога оборудования нет, что с чем совместимо никакой информации. А как должно быть? 1 hour ago, AlexandrY said: На одни только опыты уйдет куча временги. Столько времени нет. По поводу опытов - на ютубе есть полно туториалов по которым за 5 минут запускается своя программа на ST вместе с I/O. Как по мне, это стоит выделенного времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 1 hour ago, syoma said: А как должно быть? По поводу опытов - на ютубе есть полно туториалов по которым за 5 минут запускается своя программа на ST вместе с I/O. Как по мне, это стоит выделенного времени. Должно быть как-то так: e!COCKPIT сделан на CoDeSyS V3.5 А ST я даже не планирую изучать. Берем диаграмму состояний, в данном случае круиз-контроль для управления скоростью и генерим из нее ST Spoiler CASE ssMethodType OF SS_INITIALIZE: clockTickCounter := 0; is_Enable := c_Controller_IN_NO_ACTIVE_C; is_on := c_Controller_IN_NO_ACTIVE_C; is_Set_Point_Calculation := c_Controller_IN_NO_ACTIVE_C; temporalCounter_i1 := 0; is_active_c1_Controller := 0; set_speed := 0.0; active := FALSE; TargetSpeed := 0.0; UnitDelay_DSTATE := 0.0; c_DiscreteTimeIntegrator_IC := 1; SS_STEP: tempInputSignal[0] := PLC_BOOL_TO_LREAL(in := (clockTickCounter < 1) AND (clockTickCounter >= 0)); IF clockTickCounter >= 1 THEN clockTickCounter := 0; ELSE clockTickCounter := clockTickCounter + 1; END_IF; tempInputSignal[1] := Increment; tempInputSignal[2] := Increment; tempInputSignal[3] := Decrement; tempInputSignal[4] := Decrement; tempInputSignal[5] := Set; tempInputSignal[6] := Resume; FOR Ns := 0 TO 6 DO i0_ZCFCN_d_ANY(u0 := EnableSetpoint_Trig_ZCE[Ns], u1 := tempInputSignal[Ns]); tempOutEvent[Ns] := i0_ZCFCN_d_ANY.y0; outState[Ns] := i0_ZCFCN_d_ANY.y1; END_FOR; tempOutEvent_0 := FALSE; FOR Ns := 0 TO 6 DO EnableSetpoint_Trig_ZCE[Ns] := outState[Ns]; tempOutEvent_0 := tempOutEvent_0 OR (tempOutEvent[Ns] <> 0); END_FOR; IF tempOutEvent_0 THEN FOR Ns := 0 TO 6 DO rtb_inputevents[Ns] := DINT_TO_SINT(tempOutEvent[Ns]); END_FOR; FOR Ns := 0 TO 6 DO callChartStep := 0; IF (Ns = 0) AND (rtb_inputevents[0] = 1) THEN callChartStep := 1; sfEvent := Controller_event_Update; IF temporalCounter_i1 < 10 THEN temporalCounter_i1 := UDINT_TO_USINT(USINT_TO_UDINT(temporalCounter_i1) + 1); END_IF; END_IF; IF (Ns = 1) AND (rtb_inputevents[1] = 1) THEN callChartStep := 1; sfEvent := Controller_event_INC_BD; END_IF; IF (Ns = 2) AND (rtb_inputevents[2] = -1) THEN callChartStep := 1; sfEvent := Controller_event_INC_BU; END_IF; IF (Ns = 3) AND (rtb_inputevents[3] = 1) THEN callChartStep := 1; sfEvent := Controller_event_DEC_BD; END_IF; IF (Ns = 4) AND (rtb_inputevents[4] = -1) THEN callChartStep := 1; sfEvent := Controller_event_DEC_BU; END_IF; IF (Ns = 5) AND (rtb_inputevents[5] <> 0) THEN callChartStep := 1; sfEvent := Controller_event_Set; END_IF; IF (Ns = 6) AND (rtb_inputevents[6] <> 0) THEN callChartStep := 1; sfEvent := Controller_event_Resume; END_IF; IF callChartStep = 1 THEN IF is_active_c1_Controller = 0 THEN is_active_c1_Controller := 1; is_Set_Point_Calculation := Controller_IN_Hold; is_Enable := Controller_IN_Off; ELSE CASE is_Set_Point_Calculation OF Controller_IN_Decrement: IF sfEvent = Controller_event_DEC_BU THEN is_Set_Point_Calculation := Controller_IN_Hold; ELSIF (sfEvent = Controller_event_Update) AND (temporalCounter_i1 = 10) THEN TargetSpeed := TargetSpeed - 1.0; END_IF; Controller_IN_Hold: IF (sfEvent = Controller_event_DEC_BD) AND (is_on = Controller_IN_active) THEN is_Set_Point_Calculation := Controller_IN_Decrement; temporalCounter_i1 := 0; TargetSpeed := TargetSpeed - 1.0; ELSIF (sfEvent = Controller_event_INC_BD) AND (is_on = Controller_IN_active) THEN is_Set_Point_Calculation := Controller_IN_Increment; temporalCounter_i1 := 0; TargetSpeed := TargetSpeed + 1.0; ELSIF (sfEvent = Controller_event_Set) AND (Power <> 0.0) THEN TargetSpeed := curr_speed; set_speed := curr_speed; ELSIF ((sfEvent = Controller_event_Resume) AND (Power <> 0.0)) AND (set_speed > 0.0) THEN TargetSpeed := set_speed; END_IF; ELSE (* case IN_Increment: *) IF sfEvent = Controller_event_INC_BU THEN is_Set_Point_Calculation := Controller_IN_Hold; ELSIF (sfEvent = Controller_event_Update) AND (temporalCounter_i1 = 10) THEN TargetSpeed := TargetSpeed + 1.0; END_IF; END_CASE; CASE is_Enable OF Controller_IN_Off: IF Power <> 0.0 THEN is_Enable := Controller_IN_on; is_on := Controller_IN_no_target; END_IF; ELSE (* case IN_on: *) IF Power = 0.0 THEN active := FALSE; is_on := c_Controller_IN_NO_ACTIVE_C; is_Enable := Controller_IN_Off; ELSE CASE is_on OF Controller_IN_active: IF brakeratio <> 0.0 THEN active := FALSE; is_on := Controller_IN_override; TargetSpeed := 0.0; END_IF; Controller_IN_no_target: IF sfEvent = Controller_event_Set THEN is_on := Controller_IN_active; active := TRUE; END_IF; ELSE (* case IN_override: *) IF (sfEvent = Controller_event_Set) OR (sfEvent = Controller_event_Resume) THEN is_on := Controller_IN_active; active := TRUE; END_IF; END_CASE; END_IF; END_CASE; END_IF; END_IF; END_FOR; IF temporalCounter_i1 = 10 THEN temporalCounter_i1 := 0; END_IF; END_IF; IF active THEN IF NOT PIDController_MODE THEN UnitDelay_DSTATE := 0.0; c_DiscreteTimeIntegrator_IC := 1; PIDController_MODE := TRUE; END_IF; rtb_PulseGenerator := TargetSpeed - curr_speed; IF c_DiscreteTimeIntegrator_IC <> 0 THEN c_DiscreteTimeIntegrator_DS := accl; END_IF; b_Sum := ((30.0 * rtb_PulseGenerator) + c_DiscreteTimeIntegrator_DS) + ((rtb_PulseGenerator - UnitDelay_DSTATE) * 30.0); UnitDelay_DSTATE := rtb_PulseGenerator; c_DiscreteTimeIntegrator_IC := 0; c_DiscreteTimeIntegrator_DS := ((10.0 * rtb_PulseGenerator) * 0.1) + c_DiscreteTimeIntegrator_DS; Throt_cmd := MAX(b_Sum, accl); ELSE IF PIDController_MODE THEN PIDController_MODE := FALSE; END_IF; Throt_cmd := accl; END_IF; END_CASE; И больше об ST знать ничего не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 16 minutes ago, AlexandrY said: Должно быть как-то так: Очень похоже на то, что я видел в Codesys. Не вижу принципиальных отличий. Диаграмки и там наверняка построить можно. Каталог продукции тоже есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 17 minutes ago, syoma said: Очень похоже на то, что я видел в Codesys. Не вижу принципиальных отличий. Диаграмки и там наверняка построить можно. Каталог продукции тоже есть. Диаграм нет, каталог какой-то есть, но скорее он просто включает модули поддерживаемые либами CoDeSys (но как-то странно отфильтрованные), но не по принципу совместимости между собой. Кстати, интересная аналитика про умный дом с умными вещами сегодня проскочила на хабре - https://habr.com/ru/article/498102/ Оказывается большинство ждет нашествия умных розеток, выключателей и лампочек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 10 мая, 2020 Опубликовано 10 мая, 2020 · Жалоба On 4/23/2020 at 10:47 AM, AlexandrY said: А ST я даже не планирую изучать. Берем диаграмму состояний, в данном случае круиз-контроль для управления скоростью и генерим из нее ST А я вот сегодня испытал Simulink Support Package for Raspberry Pi Hardware. В принципе прикольная штука - позволяет запускать Simulink модели прямо на малине без всяких других рантаймов. Есть встроенная поддержка MQTT. CAN попробую завтра. Жалко EtherCAT нет пока. И самое главное - поддерживается External mode - можно отлаживать модели, когда они крутятся на целевой платформе. С PLC Coder такой фичи нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 10 мая, 2020 Опубликовано 10 мая, 2020 · Жалоба 44 minutes ago, syoma said: А я вот сегодня испытал Simulink Support Package for Raspberry Pi Hardware. В принципе прикольная штука - позволяет запускать Simulink модели прямо на малине без всяких других рантаймов. Есть встроенная поддержка MQTT. CAN попробую завтра. Жалко EtherCAT нет пока. И самое главное - поддерживается External mode - можно отлаживать модели, когда они крутятся на целевой платформе. С PLC Coder такой фичи нет. Я бы не рассчитывал на External mode как на что-то серьезно полезное. Ему в мире микроконтроллеров и платформ с открытой средой исполнения есть достаточно заменителей. Например Micrium не далее как недавно сделал общественными исходники своего uC/Probe. Это по сути конструктор довольно крутого HMI для Windows клиентов, там и MQTT есть, кстати. Естественно канал в Simulink там сделать тоже можно. Или FreeMaster. Там уже готовые компоненты для Simulink-а есть. Причем куча каналов доставки. Даже через SWD отладочного адаптера. Я давно работаю с моделями Simulink на встроенных дивайсах через FreeMaster. ПЛК WAGO PFC200 есть открытые плаформы, туда тоже можно вставить исходники FreeMaster. Т.е. проблем наблюдать за моделью на целевой платформе в принципе нет. Я в умном доме честно не нашел куда можно применить Raspberry Pi без очевидного оверхеда либо мисюзинга. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба Добрался до выбора планшета. Нравится вот такой - https://www.amazon.com/dp/B0839NDRB2?tag=pulse2id1-20&linkCode=ogi&th=1 Имеет беспроводную зарядку, работает от IKEA-вских зарядников. Может в куче мест в доме висеть, зарядки дешевые. От софта нужен только броузер, поскольку WEB сервер в самом PLC. Но все же гложет мысль зачем тогда делают WEB панели? Количество пикселей минимальное, под каким-то линуксом, броузерный движок непонятный, требуют дыру в стене. Единственное что заметил: HMI сделанный на базе броузера и HTML в планшете заметно лагает. Т.е. мимолетно касаться планшета чтобы выполнить действи недостаточно, нужно всегда конкретно нажимать и ждать реакции. Вопрос: является ли это особеностью конкретного WEB сервера в PLC, или это врожденный порок планшетов с их сенсорным экраном и тормозным скриптовым движком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться