|
|
|
Beremiz, портирование под stm32 |
|
|
|
Jul 18 2016, 11:41
|
Местный
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041
|
Нельзя, я писал об это лично Марио. Он мне ответил, что это по его мнению даже логично и будет ли он это менять пока не знает. Но момент с функциональными блоками не такой неприятный, как ошибки вроде той, что проявляется при работе со вложенными CASE'ми. Вот тут я об этом писал. А это не Вы, тот самый Paul, что выложил ссылку в майлинг листе на свой git-репозитарий? (была неверная ссылка, отредактировал)
|
|
|
|
|
Jul 19 2016, 05:59
|
Участник
Группа: Участник
Сообщений: 20
Регистрация: 18-07-16
Пользователь №: 92 595
|
Цитата(yanvasiij @ Jul 18 2016, 16:41) А это не Вы, тот самый Paul, что выложил ссылку в майлинг листе на свой git-репозитарий? (была неверная ссылка, отредактировал) Да, это я. Цитата(yanvasiij @ Jul 18 2016, 16:41) Но момент с функциональными блоками не такой неприятный, как ошибки вроде той, что проявляется при работе со вложенными CASE'ми. Вот тут я об этом писал. Ооо, вот это уже более серёзно. Код компилятора я смотрел, сам код написан довольно качественно, даже недоделки задокументированы, что не часто встретишь. Там есть одна беда: тестовая инфраструктура не проработана, совсем. Если сейчас начать править код, то нет гарантий, что я что-нибудь не поломаю, а проверить это возможности нет... А ещё я не спец по пром автоматизации, я системный программист, связку Beremiz/matiec использовал только потому, что это единственный живой FLOSS-проект. Соответственно если что-то делать нужны: а) тестовые файлы (для регрессионного тестирования) б) кто-то, кто сможет проконсультировать по МЭКовским языкам. в) время, которого мало, ибо мне надо писать прошивки для трёх приборов... г) специалист по питону, ибо в)
|
|
|
|
|
Jul 19 2016, 06:15
|
Местный
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041
|
Что касается matiec, там действительно все сложно. Это компилятор писался с помощью yacc и bison (инструменты для написания собственных компиляторов). Я сам в этом не шибко силен, насколько я это все понимаю вручную там пишутся только так называемые обработчики токенов, остальное автогенериться с помощью yacc и bison. Поэтому половина кода из репозитария matiec автогенерённая и разобраться там очень сложно. Консультации по МЭК-овским языкам это вообще отдельный разговор. Я сам работаю на АСУшною компанию, которая делает свой контроллер, поэтому общения с программистами АСУшниками мне хватает. И с их разговоров понял, что от контроллера к контроллеру различия в реализации МЭКовских языков настолько сильны, что люди много времени тратят на портирование проектов со шнайдера на сименс, с сименса на аланбредли и т.д. Базовые вещи конечно же совпадают, но в деталях много различий. Так что строго говоря IEC 61131-3 не такой уж и стандарт. Касательно питона, по самому Beremiz'y очень активное участие проявляет Андрей Скворцов (здесь он griabig). Если есть какие-то замечания, баги рекомендую писать в его баг-трекер, он достаточно оперативно реагирует. А вот ваши наработки по поводу пошаговой отладки STM32F из беремиза очень интересны. Я так понял отладку вы реализовали через последовательный порт?
|
|
|
|
|
Jul 19 2016, 06:52
|
Участник
Группа: Участник
Сообщений: 20
Регистрация: 18-07-16
Пользователь №: 92 595
|
Цитата(yanvasiij @ Jul 19 2016, 11:15) Касательно питона, по самому Beremiz'y очень активное участие проявляет Андрей Скворцов (здесь он griabig). Если есть какие-то замечания, баги рекомендую писать в его баг-трекер, он достаточно оперативно реагирует. А вот ваши наработки по поводу пошаговой отладки STM32F из беремиза очень интересны. Я так понял отладку вы реализовали через последовательный порт? Да, через последовательный порт. Только пошаговой отладки (в смысле прошагивание инструкций) там нет, есть просмотр переменных и лога, насколько я понял, в Beremiz всё этим и ограничивается, я не видел там свидетельств возможность "шагать", как в том же Си. Хотя я текстовые языки там не тыкал, могу ошибаться... Цитата(yanvasiij @ Jul 18 2016, 16:41) Но момент с функциональными блоками не такой неприятный, как ошибки вроде той, что проявляется при работе со вложенными CASE'ми. Вот тут я об этом писал. Кстати, а тот код пробовали обрабаывать с помощью iec2iec? Что генерируется в этом случае?
|
|
|
|
|
Jul 19 2016, 07:02
|
Местный
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041
|
Цитата(paulbell @ Jul 19 2016, 11:52) Кстати, а тот код пробовали обрабаывать с помощью iec2iec? Что генерируется в этом случае? Я если честно не совсем понимаю что делает iec2iec, поэтому и не пробовал. Если не затруднит растолкуйте для чего он? Я пробовал через консоль отправлять тот код в iec2c.exe, в генерированном им коде и была та злосчастная ошибка.
|
|
|
|
|
Jul 19 2016, 07:25
|
Участник
Группа: Участник
Сообщений: 20
Регистрация: 18-07-16
Пользователь №: 92 595
|
Цитата(yanvasiij @ Jul 19 2016, 12:02) Я если честно не совсем понимаю что делает iec2iec, поэтому и не пробовал. Если не затруднит растолкуйте для чего он? Я пробовал через консоль отправлять тот код в iec2c.exe, в генерированном им коде и была та злосчастная ошибка. По задумке автора, он нужен для контроля корректности работы парсера (как раз той самой части, которая на bison и yacc/flex ): берем исходник на ST/LD/SFC, преобразуем в ST, сравниваем с оригиналом, если парсер отработал корректно, - должен получиться оригинал, или что-то близкое к нему. То есть это нужно для проверки корректности генерации AST и символьных таблиц, из которых в последствии генерируется код на Си. Такой подход позволяет отделить баги прасера и баги кодогенератора.
Сообщение отредактировал paulbell - Jul 19 2016, 07:30
|
|
|
|
|
Jul 19 2016, 07:57
|
Местный
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041
|
Только что сделал следующее: Код ..\..\matiec\iec2iec.exe -I ..\..\matiec\lib generated_plc.st > output.txt В файле generated_plc.st было следующее CODE 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 оказало дофига отладочной информации, но в самом конце было следующее: CODE {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 Смею предположить, что парсер отработал все верно.
|
|
|
|
|
Jul 19 2016, 08:29
|
Участник
Группа: Участник
Сообщений: 20
Регистрация: 18-07-16
Пользователь №: 92 595
|
Цитата(yanvasiij @ Jul 19 2016, 12:57) Смею предположить, что парсер отработал все верно. Похоже на то, значит баг в кодогенераторе... Марио не говорил, какой IDE он пользуется для отладки? Судя по всему Eclipse, но я не наблюдаю некоторых файлов... Цитата(yanvasiij @ Jul 19 2016, 12:57) Только что сделал следующее: Код ..\..\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?
Сообщение отредактировал paulbell - Jul 19 2016, 08:36
|
|
|
|
|
Jul 19 2016, 09:08
|
Местный
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041
|
Код iec2iec.exe -v matiec version 0.1 changeset id: 7518955c875a Мы форкнулись от сюда. Уже успели внести некоторые поправки кастельно глобальных переменных. Но изменения из основного репозитария время от времени вытаскиваем. По-поводу IDE у Марио я не спрашивал, мы редактировали в NetBeans. Но Вы можете ему написать, он достаточно отзывчивый товарищ.
|
|
|
|
|
Jul 19 2016, 09:52
|
Участник
Группа: Участник
Сообщений: 20
Регистрация: 18-07-16
Пользователь №: 92 595
|
Цитата(yanvasiij @ Jul 19 2016, 14:08) Код iec2iec.exe -v matiec version 0.1 changeset id: 7518955c875a Мы форкнулись от сюда. Уже успели внести некоторые поправки кастельно глобальных переменных. Но изменения из основного репозитария время от времени вытаскиваем. По-поводу IDE у Марио я не спрашивал, мы редактировали в NetBeans. Но Вы можете ему написать, он достаточно отзывчивый товарищ. Это не с битведра, это с официального репозитория, изменения в кодогенераторе были на месяц позже, в комментарии к коммиту с кейсами говорится, что пофиксили два бага в обработке кейсов.
|
|
|
|
|
Jul 19 2016, 14:56
|
Участник
Группа: Участник
Сообщений: 20
Регистрация: 18-07-16
Пользователь №: 92 595
|
Цитата(yanvasiij @ Jul 19 2016, 15:12) Этот комит в моей сборке есть.
Ого! Вы правы! Сейчас выкачал последние комиты пересобрал матик и попробовал собрать это код - собралось, работает!
Ну вот и славненько! А то я сначала прочитал свежие исходники matiec, там все в порядке со скобочками, а потом оказалось, что прасер работает нормально, следовательно, либо у Вас устаревшая версия, либо в matiec жестокие косяки с архитектурой... А какие там ещё баги? Ну которые мешают переносу проектов?
|
|
|
|
|
Jul 22 2016, 07:39
|
Участник
Группа: Участник
Сообщений: 20
Регистрация: 18-07-16
Пользователь №: 92 595
|
Цитата(yanvasiij @ Jul 20 2016, 09:23) Был еще один баг, но мы его исправили самостоятельно: было невозможно вызывать глобальный функциональный блок из простого экземпляра функционального блока. Я вот сейчас смотрю и не уверен исправлял ли этот баг сам Марио. К сожалению мы поторопились и коментарий к комиту написали по-русски. Поэтому сделать запрос на пуш в оффициальный репозитарий думаю пока не получится, но если надо можем просто открыть свой. Я считаю, что лучше открыть issue и добавить патч с исправлением в комменты. С другой стороны в трекере есть закрытые "незакрытые" баги, так что лучше куда-то форкнуть репозиторий Марио, пропатчить его и проветсти регрессионное тестирование, по результатам создать все issue, где будут только актуальные баги. Кстати, я смотрю тут уже есть три организации, заинтересованные в развитии Beremiz/matiec, может объединить усилия?
|
|
|
|
|
Jul 22 2016, 10:16
|
Местный
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041
|
Я добавлю issue и патч на днях; и по-поводу "незакрытых" баг - согласен.
По-поводу объединения усилия мы только ЗА. Андрей уже предлагал выше объединиться и отчасти нам это удалось, по мере обнаружения багов в самом Beremiz'e я пишу ему в баг-трекер. Я сам сейчас веду одновременно несколько проектов и в свободное от них время пишу, что-то вроде рантайма для STM32f4xx под беремиз (так же как это делаете Вы, если верить вашему репозитарию) и плагины для этого рантайма в Beremiz'e. У нас была попытка залезть глубоко в потороха matiec для испралления найденных багов, что-то даже удалось, то программист занятый этим переключился сейчас на другой проект, поэтому тут работа стоит.
А, да у Beremiz'a есть IRC чат, Андрей там уже сидит, я все никак не могу поставить на рабочую машину IRC-клиент, поэтому бываю там редко, когда подключусь с телефона только.
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|