ПЛК (Arduino Mega 2560 + W5100)

Модератор: Alex

Aven
Сообщения: 529
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 154 раза

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение Aven » Ср сен 13, 2017 10:10 am

Кстати есть куча готовых устройств, не думаю, что есть особый смысл делать свое железо, если не собираетесь производить устройства хотя бы десятками.


Изображение
$169 Industrial-PLC-Open-Source-Arduino-Mega-2560-DIN-Rail-Enclosure-LAN-WiFi-RTC
СпойлерПоказать
Изображение
$56 Arduino Industrial STM32 STM32F103 Maple Analog inputs 24V Arduino PLC OLED 0.96
СпойлерПоказать
Изображение
Ну Controllino от €115 до €265, эти подороже, но и посерьезнее реализация.
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение uni » Ср сен 13, 2017 11:06 am

Да, я собираюсь производить десятками. Ссылки хорошие, посмотрю на устройства.

Только мне нужно кнопочное поле и индикатор для управления устройством через иерархическое меню. Я пока не находил нужного мне вида конструктива, а Controllino - это фантик просто бессмысленный.

Я планирую вот такой вид, т.к. к нему у меня уже и софт практически есть готовый.
Вложения
2017-09-13_13-01-36.png
2017-09-13_13-01-36.png (273.32 КБ) 7267 просмотров
Россия навсегда!
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение alexsis_76 » Ср сен 13, 2017 12:35 pm

запрещено исполнение команд LPM и SPM в секции приложения
я имел ввиду что второй загрузчик помещается вместе с основной программой в конце пространства памяти.
Нужно ещё отделить модуль CPU от остального, чтобы я потом мог безболезненно перейти на arm, заменив плату CPU.
сделайте взаимодействие с аппаратной частью через HAL,когда вам будет нужен другой процессор заменяете HAL и все будет работать.
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение uni » Ср сен 13, 2017 1:48 pm

Со вторыми загрузчиками не всё так просто. Нужно предусмотреть удобную логику совместной их работы в разных ситуациях. Дело в том, что порядок их расположения в boot секции влияет на поведение платы в случае отсутствия программы и при наличии конфигурационного файла на карте. Сами вторые загрузчики тоже имеют свою логику и нужно тестировать разные варианты их поведения. Например, Arduino загрузчик выполняет только одну операцию и переходит на запуск программы. Это неудобно при работе с ним из AVR Studio, так как утилита прошивки там не умеет сбрасывать мк перед своей работой (переходе между вкладками). В общем, нужен тюнинг всей этой загрузочной системы.

Хочу ещё свой загрузчик в IAR'e пересобрать, т.к. он ровно в 4096 байт укладывается для AVR GCC, а мне нужна ещё небольшая логика (указать адрес для прошиваемого файла).

А пока разбираюсь с примерами нативной работы с W5100.
Россия навсегда!
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение alexsis_76 » Ср сен 13, 2017 2:48 pm

т.к. он ровно в 4096 байт укладывается
а почему так много? у вас ведь стек протоколов аппаратный,с enc занимает меньше хотя там стек программный.
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение uni » Ср сен 13, 2017 3:30 pm

Мой загрузчик состоит из двух частей: работа с файловой системой FAT32 (PetitFS) и операции записи во флеш (стандартные из avr/boot.h). Не встречал пока библиотек, которые поддерживали бы FAT32 с меньшим размером кода.
Это в основной части. Ещё есть управление светодиодом программирования и чтение конфигурационного файла. Также есть проверки наличия кода перед переходом на него. Не так просто оказалось найти C инструкцию для дальнего перехода (так и не нашёл, сделал асм вставку).

Приберусь в исходниках, выложу на github.
Россия навсегда!
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение uni » Ср сен 13, 2017 7:28 pm

Назовём загрузчик uniboot. Актуальное описание нужно смотреть в исходниках на svn.
unibootПоказать

Код: Выделить всё

Название:   Загрузчик, использующий sd-карту
Автор:      Вячеслав Мезенцев <viacheslavmezentsev@ya.ru>
Плата:      Arduino Mega2560
Лицензия:   GNU General Public License
Дата:       11 Сентября 2017
Компилятор: AVR GCC

Описание:
Загрузчик позволяет загружать программу во флеш мк, используя
sd-карту (FAT32). Размер загрузчика укладывается в 4 Кб.
Имя файла должно быть указано в файле BOOT.CFG.

Если загружается пользовательская программа, то в файле BOOT.CFG
должна находиться строка (без перевода строки) следующего формата:

FILE=FILENAME.BIN

Если загружается второй загрузчик, то в файле BOOT.CFG
должна находиться строка (без перевода строки) следующего формата:

BOOT=FILENAME.BIN

Имя файла должно быть в верхнем регистре и иметь формат 8.3.

Второй загрузчик (при его использовании) будет записан в boot-секцию
выше основного. Для его активации не нужно изменять фьюзы, достаточно 
в файле конфигурации BOOT.CFG указать строку:

BOOT=RUN

Замечания:
Если sd-карта отсутствует или нет файла BOOT.CFG, или в файле находится
строка: FILE=RUN, то управление сразу передаётся пользовательскому коду, 
если он есть (перед переходом это проверяется).

Перед переходом на второй загрузчик также проверяется его наличие.

Если нет пользовательской программы или загрузчика, то управление переходит
в вечный цикл (ожидается перезапуск).

На время записи флеш зажигается светодиод PROGLED.

Работу загрузчика можно протестировать, если собрать его отладочную версию,
раскомментировав DEBUG. При этом отключится запись во флеш, а по USART0
будут передаваться символы состояний (см. код ниже). 
Ссылки:

1. Исходник uniboot (svn) .

*** *******
Antispam service cleantalk.org ***
Последний раз редактировалось uni Чт сен 14, 2017 8:08 am, всего редактировалось 2 раза.
Россия навсегда!
cg_shura
Сообщения: 110
Зарегистрирован: Пт авг 14, 2015 11:24 am
Благодарил (а): 3 раза
Поблагодарили: 6 раз

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение cg_shura » Ср сен 13, 2017 7:29 pm

uni писал(а):Также есть проверки наличия кода перед переходом на него.
А как делается проверка наличия кода?
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение uni » Ср сен 13, 2017 7:31 pm

Можно посмотреть в исходниках. Я отправил сообщение, но оно ждёт одобрения модератора. Там будет ссылка на мой svn.

Вкратце, так:

Код: Выделить всё

    // Запуск по умолчанию, либо если файл BOOT.CFG содержит строку
    // "Bxxx=RUN" или "Fxxx=RUN".
    if ( run )
    {
#ifdef DEBUG
        PutChar( 'R' );
#endif        
        // Старт пользовательской программы.
        if ( pgm_read_word(0) != 0xFFFF ) 
        {
            // Переход в прикладную область.
            boot_rww_enable();

            goto * 0;
        }

        // Переходим на второй загрузчик.
        if ( pgm_read_word_far( BOOT2_ADR ) != 0xFFFF )
        { 
            asm volatile( "jmp %0" :: "i" ( BOOT2_ADR ) ); 
        }
    }
Россия навсегда!
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: ПЛК (Arduino Mega 2560 + W5100)

Сообщение alexsis_76 » Чт сен 14, 2017 2:43 pm

PetitFS
самая маленькая,на сайте элм чена есть примеры работы с ней.
Ответить