yanvasilij 0 Posted July 18, 2016 · Report post Нельзя, я писал об это лично Марио. Он мне ответил, что это по его мнению даже логично и будет ли он это менять пока не знает. Но момент с функциональными блоками не такой неприятный, как ошибки вроде той, что проявляется при работе со вложенными CASE'ми. Вот тут я об этом писал. А это не Вы, тот самый Paul, что выложил ссылку в майлинг листе на свой git-репозитарий? (была неверная ссылка, отредактировал) Quote Ответить с цитированием Share this post Link to post Share on other sites
paulbell 0 Posted July 19, 2016 · Report post А это не Вы, тот самый Paul, что выложил ссылку в майлинг листе на свой git-репозитарий? (была неверная ссылка, отредактировал) Да, это я. Но момент с функциональными блоками не такой неприятный, как ошибки вроде той, что проявляется при работе со вложенными CASE'ми. Вот тут я об этом писал. Ооо, вот это уже более серёзно. Код компилятора я смотрел, сам код написан довольно качественно, даже недоделки задокументированы, что не часто встретишь. Там есть одна беда: тестовая инфраструктура не проработана, совсем. Если сейчас начать править код, то нет гарантий, что я что-нибудь не поломаю, а проверить это возможности нет... А ещё я не спец по пром автоматизации, я системный программист, связку Beremiz/matiec использовал только потому, что это единственный живой FLOSS-проект. Соответственно если что-то делать нужны: а) тестовые файлы (для регрессионного тестирования) б) кто-то, кто сможет проконсультировать по МЭКовским языкам. в) время, которого мало, ибо мне надо писать прошивки для трёх приборов... г) специалист по питону, ибо в) Quote Ответить с цитированием Share this post Link to post Share on other sites
yanvasilij 0 Posted July 19, 2016 · Report post Что касается matiec, там действительно все сложно. Это компилятор писался с помощью yacc и bison (инструменты для написания собственных компиляторов). Я сам в этом не шибко силен, насколько я это все понимаю вручную там пишутся только так называемые обработчики токенов, остальное автогенериться с помощью yacc и bison. Поэтому половина кода из репозитария matiec автогенерённая и разобраться там очень сложно. Консультации по МЭК-овским языкам это вообще отдельный разговор. Я сам работаю на АСУшною компанию, которая делает свой контроллер, поэтому общения с программистами АСУшниками мне хватает. И с их разговоров понял, что от контроллера к контроллеру различия в реализации МЭКовских языков настолько сильны, что люди много времени тратят на портирование проектов со шнайдера на сименс, с сименса на аланбредли и т.д. Базовые вещи конечно же совпадают, но в деталях много различий. Так что строго говоря IEC 61131-3 не такой уж и стандарт. Касательно питона, по самому Beremiz'y очень активное участие проявляет Андрей Скворцов (здесь он griabig). Если есть какие-то замечания, баги рекомендую писать в его баг-трекер, он достаточно оперативно реагирует. А вот ваши наработки по поводу пошаговой отладки STM32F из беремиза очень интересны. Я так понял отладку вы реализовали через последовательный порт? Quote Ответить с цитированием Share this post Link to post Share on other sites
paulbell 0 Posted July 19, 2016 · Report post Касательно питона, по самому Beremiz'y очень активное участие проявляет Андрей Скворцов (здесь он griabig). Если есть какие-то замечания, баги рекомендую писать в его баг-трекер, он достаточно оперативно реагирует. А вот ваши наработки по поводу пошаговой отладки STM32F из беремиза очень интересны. Я так понял отладку вы реализовали через последовательный порт? Да, через последовательный порт. Только пошаговой отладки (в смысле прошагивание инструкций) там нет, есть просмотр переменных и лога, насколько я понял, в Beremiz всё этим и ограничивается, я не видел там свидетельств возможность "шагать", как в том же Си. Хотя я текстовые языки там не тыкал, могу ошибаться... Но момент с функциональными блоками не такой неприятный, как ошибки вроде той, что проявляется при работе со вложенными CASE'ми. Вот тут я об этом писал. Кстати, а тот код пробовали обрабаывать с помощью iec2iec? Что генерируется в этом случае? Quote Ответить с цитированием Share this post Link to post Share on other sites
yanvasilij 0 Posted July 19, 2016 · Report post Кстати, а тот код пробовали обрабаывать с помощью iec2iec? Что генерируется в этом случае? Я если честно не совсем понимаю что делает iec2iec, поэтому и не пробовал. Если не затруднит растолкуйте для чего он? Я пробовал через консоль отправлять тот код в iec2c.exe, в генерированном им коде и была та злосчастная ошибка. Quote Ответить с цитированием Share this post Link to post Share on other sites
paulbell 0 Posted July 19, 2016 (edited) · Report post Я если честно не совсем понимаю что делает iec2iec, поэтому и не пробовал. Если не затруднит растолкуйте для чего он? Я пробовал через консоль отправлять тот код в iec2c.exe, в генерированном им коде и была та злосчастная ошибка. По задумке автора, он нужен для контроля корректности работы парсера (как раз той самой части, которая на bison и yacc/flex ): берем исходник на ST/LD/SFC, преобразуем в ST, сравниваем с оригиналом, если парсер отработал корректно, - должен получиться оригинал, или что-то близкое к нему. То есть это нужно для проверки корректности генерации AST и символьных таблиц, из которых в последствии генерируется код на Си. Такой подход позволяет отделить баги прасера и баги кодогенератора. Edited July 19, 2016 by paulbell Quote Ответить с цитированием Share this post Link to post Share on other sites
yanvasilij 0 Posted July 19, 2016 · Report post Только что сделал следующее: ..\..\matiec\iec2iec.exe -I ..\..\matiec\lib generated_plc.st > output.txt В файле generated_plc.st было следующее PROGRAM casetest VAR LocalVar0 : DINT; LocalVar1 : DINT; END_VAR case LocalVar0 of 0..127: localvar0 := 1; case LocalVar1 of 600: localvar0 := 1; else localvar0 := 1; END_CASE; end_case; END_PROGRAM CONFIGURATION config RESOURCE resource1 ON PLC TASK tast1(INTERVAL := T#100ms,PRIORITY := 0); PROGRAM ubs1 WITH tast1 : casetest; END_RESOURCE END_CONFIGURATION В файле output.txt оказало дофига отладочной информации, но в самом конце было следующее: {enable code generation}PROGRAM casetest VAR LocalVar0 : DINT; LocalVar1 : DINT; END_VAR CASE LocalVar0 OF 0 .. 127: localvar0 := 1; CASE LocalVar1 OF 600: localvar0 := 1; ELSE localvar0 := 1; END_CASE; END_CASE; END_PROGRAM CONFIGURATION config RESOURCE resource1 ON PLC TASK tast1 (INTERVAL := TIME#100ms, PRIORITY := 0); PROGRAM ubs1 WITH tast1 : casetest; END_RESOURCE END_CONFIGURATION Смею предположить, что парсер отработал все верно. Quote Ответить с цитированием Share this post Link to post Share on other sites
paulbell 0 Posted July 19, 2016 (edited) · Report post Смею предположить, что парсер отработал все верно. Похоже на то, значит баг в кодогенераторе... Марио не говорил, какой IDE он пользуется для отладки? Судя по всему Eclipse, но я не наблюдаю некоторых файлов... Только что сделал следующее: ..\..\matiec\iec2iec.exe -I ..\..\matiec\lib generated_plc.st > output.txt ОПАЧКИ! Судя по путям к iecstdlib, у Вас старая версия matiec, скорее всего из Beremiz 1.1, после этого Марио переписал часть кодогенератора, в частности переписывалась обработка кейсов: https://bitbucket.org/mjsousa/matiec/commit...e31e?at=default Дома вечером попробую скомпилить это же код более новой версии iec2c. А нет, перепутал с сишной частью. А все таки какая у Вас версия matiec? Edited July 19, 2016 by paulbell Quote Ответить с цитированием Share this post Link to post Share on other sites
yanvasilij 0 Posted July 19, 2016 · Report post iec2iec.exe -v matiec version 0.1 changeset id: 7518955c875a Мы форкнулись от сюда. Уже успели внести некоторые поправки кастельно глобальных переменных. Но изменения из основного репозитария время от времени вытаскиваем. По-поводу IDE у Марио я не спрашивал, мы редактировали в NetBeans. Но Вы можете ему написать, он достаточно отзывчивый товарищ. Quote Ответить с цитированием Share this post Link to post Share on other sites
paulbell 0 Posted July 19, 2016 · Report post iec2iec.exe -v matiec version 0.1 changeset id: 7518955c875a Мы форкнулись от сюда. Уже успели внести некоторые поправки кастельно глобальных переменных. Но изменения из основного репозитария время от времени вытаскиваем. По-поводу IDE у Марио я не спрашивал, мы редактировали в NetBeans. Но Вы можете ему написать, он достаточно отзывчивый товарищ. Это не с битведра, это с официального репозитория, изменения в кодогенераторе были на месяц позже, в комментарии к коммиту с кейсами говорится, что пофиксили два бага в обработке кейсов. Quote Ответить с цитированием Share this post Link to post Share on other sites
yanvasilij 0 Posted July 19, 2016 · Report post Этот комит в моей сборке есть. Ого! Вы правы! Сейчас выкачал последние комиты пересобрал матик и попробовал собрать это код - собралось, работает! Quote Ответить с цитированием Share this post Link to post Share on other sites
paulbell 0 Posted July 19, 2016 · Report post Этот комит в моей сборке есть. Ого! Вы правы! Сейчас выкачал последние комиты пересобрал матик и попробовал собрать это код - собралось, работает! Ну вот и славненько! А то я сначала прочитал свежие исходники matiec, там все в порядке со скобочками, а потом оказалось, что прасер работает нормально, следовательно, либо у Вас устаревшая версия, либо в matiec жестокие косяки с архитектурой... А какие там ещё баги? Ну которые мешают переносу проектов? Quote Ответить с цитированием Share this post Link to post Share on other sites
yanvasilij 0 Posted July 20, 2016 · Report post Был еще один баг, но мы его исправили самостоятельно: было невозможно вызывать глобальный функциональный блок из простого экземпляра функционального блока. Я вот сейчас смотрю и не уверен исправлял ли этот баг сам Марио. К сожалению мы поторопились и коментарий к комиту написали по-русски. Поэтому сделать запрос на пуш в оффициальный репозитарий думаю пока не получится, но если надо можем просто открыть свой. Quote Ответить с цитированием Share this post Link to post Share on other sites
paulbell 0 Posted July 22, 2016 · Report post Был еще один баг, но мы его исправили самостоятельно: было невозможно вызывать глобальный функциональный блок из простого экземпляра функционального блока. Я вот сейчас смотрю и не уверен исправлял ли этот баг сам Марио. К сожалению мы поторопились и коментарий к комиту написали по-русски. Поэтому сделать запрос на пуш в оффициальный репозитарий думаю пока не получится, но если надо можем просто открыть свой. Я считаю, что лучше открыть issue и добавить патч с исправлением в комменты. С другой стороны в трекере есть закрытые "незакрытые" баги, так что лучше куда-то форкнуть репозиторий Марио, пропатчить его и проветсти регрессионное тестирование, по результатам создать все issue, где будут только актуальные баги. Кстати, я смотрю тут уже есть три организации, заинтересованные в развитии Beremiz/matiec, может объединить усилия? Quote Ответить с цитированием Share this post Link to post Share on other sites
yanvasilij 0 Posted July 22, 2016 · Report post Я добавлю issue и патч на днях; и по-поводу "незакрытых" баг - согласен. По-поводу объединения усилия мы только ЗА. Андрей уже предлагал выше объединиться и отчасти нам это удалось, по мере обнаружения багов в самом Beremiz'e я пишу ему в баг-трекер. Я сам сейчас веду одновременно несколько проектов и в свободное от них время пишу, что-то вроде рантайма для STM32f4xx под беремиз (так же как это делаете Вы, если верить вашему репозитарию) и плагины для этого рантайма в Beremiz'e. У нас была попытка залезть глубоко в потороха matiec для испралления найденных багов, что-то даже удалось, то программист занятый этим переключился сейчас на другой проект, поэтому тут работа стоит. А, да у Beremiz'a есть IRC чат, Андрей там уже сидит, я все никак не могу поставить на рабочую машину IRC-клиент, поэтому бываю там редко, когда подключусь с телефона только. Quote Ответить с цитированием Share this post Link to post Share on other sites