ПЛК (Arduino Mega 2560 + W5100)

Модератор: Alex

alexsis_76
Сообщения: 748
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 3 раза
Поблагодарили: 44 раза

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

Сообщение alexsis_76 » Пт сен 15, 2017 3:46 pm

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

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

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

Разобрался с низкоуровневой работой с сокетами. Наконец-то. Жаль только SPI у меня программный. Пока не получилось завести аппаратный, что-то не работает. Опять же долго пришлось повозиться, но оно того стоит. Теперь я отвязан от Arduino Framework'а в плане работы с сетевой платой на W5100. Пока в демо-примере я гружу страничку из флеши.

Следующие на очереди ftpd и httpd, работающий с sd-картой при помощи FatFS. Что касается ftpd, то нужно уже работающий пример подправить в плане замены на мои драйвера, а httpd я просто возьму какой-нибудь лёгенький из примеров для linux.

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

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

Сообщение uni » Пн сен 18, 2017 10:18 am

Параллельно думаю о вопросе формата файла конфигурации для прототипа. У меня есть драйвер для json, но мне этот формат кажется слишком избыточным для настройки сети, серверов и пр. Наверное разобью всё по разным файлам по аналогии с linux, например, httpd.conf, ftpd.conf, telnetd.conf, network и т.п.

Я собрал первую версию httpd с файловой системой FatFs, но пока ничего не работает как обычно. Сразу встаёт вопрос о регистраторе сигналов. Как удобнее хранить и в каком формате. Насколько я вижу по AMS, там для AmCharts используется CSV (Comma-Separated Values). Пока остановлюсь на нём. Нужно подумать ещё о структуре каталогов.

Ещё один важный момент - это конфигурирование прототипа, пока нет встроенной интерпретируемой программы. У меня есть идея реализовать устройства в виде набора параметров (интерфейс связи, набор регистров). Пользователь будет выбирать устройства из имеющегося списка, его регистры будут добавляться в общий список доступных тегов (обобщённые регистры), а уже эти теги будут доступны для записи/чтения/архивирования. Т.е. я хочу первый прототип сделать в виде МВВ (модуля ввода-вывода), который поддерживает по возможности универсальную конфигурацию, не зависящую от прошивки, а только от конфигурационного файла. Этот файл инициализирует внутренние структуры при старте, редактируется при помощи web или можно написать специальную утилиту конфигурации и подменять файл через ftp.

В таком случае мне не нужно будет специально для каждого нового устройства менять прошивку. Нужно будет только реализовать востребованные протоколы и/или интерфейсы. Modbus TCP/RTU будет по умолчанию. Кстати, страничка будет считывать данные тегов при помощи post запросов как я это делаю тут: Modbus-RTU на скриптах . У прототипа МВВ будет общая карта тегов (регистров), которая описывается также в конфигурационном файле.
Последний раз редактировалось uni Пн сен 18, 2017 11:09 am, всего редактировалось 1 раз.
Россия навсегда!
cg_shura
Сообщения: 110
Зарегистрирован: Пт авг 14, 2015 11:24 am
Благодарил (а): 3 раза
Поблагодарили: 6 раз

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

Сообщение cg_shura » Пн сен 18, 2017 10:27 am

uni писал(а):Параллельно думаю о вопросе формата файла конфигурации для прототипа. У меня есть драйвер для json, но мне этот формат кажется слишком избыточным для настройки сети, серверов и пр. Наверное разобью всё по разным файлам по аналогии с linux, например, httpd.conf, ftpd.conf, telned.conf, network и т.п.
Зато единообразно для любых настоек, расширяется новыми параметрами, позволяет делать любые иерархии в отличии от ini-файлов. Также массивы в json есть, в ini придется изобретать костыли для этого.
uni писал(а):Я собрал первую версию httpd с файловой системой FatFs, но пока ничего не работает как обычно. Сразу встаёт вопрос о регистраторе сигналов. Как удобнее хранить и в каком формате. Насколько я вижу по AMS, там для AmCharts используется CSV (Comma-Separated Values). Пока остановлюсь на нём.
CSV занимает места намного больше бинарного формата. Для игрушек типа AMS CSV подходит.
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение uni » Пн сен 18, 2017 10:55 am

CSV занимает места намного больше бинарного формата. Для игрушек типа AMS CSV подходит.
Могу использовать MessagePack как вариант бинарного, но тогда придётся писать специальный драйвер "базы данных", чтобы проверять целостность, делать навигацию для выборки значений. Трудно сказать насколько это сложно (например, дописывать в конец файла после сбоя по питанию).
Можно поискать исходники старых форматов баз данных типа dBase (структура DBF-файла), чтобы можно было сразу в Excel загружать.

П.С. Нашёл исходник libdbf, вроде бы выглядит нормальным. Когда с FatFs закончу, попробую реализовать запись/чтение dbf файла. В исходнике есть функции для чтения и записи, хотя в описании написано только о чтении почему-то.

Ссылки:

1.C library to read DBF files (libdbf) .
Последний раз редактировалось uni Пн сен 18, 2017 11:12 am, всего редактировалось 3 раза.
Россия навсегда!
cg_shura
Сообщения: 110
Зарегистрирован: Пт авг 14, 2015 11:24 am
Благодарил (а): 3 раза
Поблагодарили: 6 раз

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

Сообщение cg_shura » Пн сен 18, 2017 11:03 am

uni писал(а):
CSV занимает места намного больше бинарного формата. Для игрушек типа AMS CSV подходит.
Могу использовать MessagePack как вариант бинарного, но тогда придётся писать специальный драйвер "базы данных", чтобы проверять целостность, делать навигацию для выборки значений. Трудно сказать насколько это сложно (например, дописывать в конец файла после сбоя по питанию).
MessagePack как я понял - для структурированных данных, компактный вариант json. Для логгера самое важное - минимальный объем данных. Нельзя рассчитывать что всегда будет MicroSD. Завтра вам понадобится сделать дешевле и компактнее и придется поставить микросхему флеш памяти, которая далеко не гигабайты.
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение uni » Вт сен 19, 2017 2:07 pm

Хорошие новости о проекте Beremiz. Мне тут сообщили, что по крайней мере для LD код получается вполне умещаемым в ресурсы мк.

Это очень обнадёживает. По возможности попробую повторить сборку для ATmega2560. Было бы здорово использовать готовую IDE для простых программ.

П.С. Даже если получится использовать IDE Beremiz, нужно ещё провести работу по адаптации Arduino железа под runtime софтового ПЛК. Это непростая работа. Нужно сопоставить функции чтения входов и записи выходов, написать как минимум драйвер Modbus TCP (RTU) и подключить его в исходниках. Пока не ясно как это всё делать.
Россия навсегда!
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение uni » Пт сен 29, 2017 8:14 am

Новости. Получилось собрать обёртку над FatFs из Arduino Framework отдельно. Правда пока использую свой soft SPI, т.к. он у меня отлажен более менее. Подключил к плате логический анализатор, посмотрел на пакеты. Он очень помог в плане понимания работы с sd-картой. Даже с JTAG отладчиком часто не совсем понятно что и как работает. Буду использовать логический анализатор при одновременной работе httpd и драйвера sd-карты.

На очереди:

- тестирование обёртки драйвера FatFs (там много всяких методов для работы с папками, файлами и "диском");
- тестирование потоковой json библиотеки (работа с конфигурационными файлами);
- тестирование драйвера базы данных (библиотеки libdbf);
- дополнение httpd драйвером sd-карты;
- тестирование работы httpd;
- разбор post-запросов, работа с ajax;
- реализация загрузки файла на карту через web-интерфейс, используя ajax (это будет самым интересным);
- дополнение ftpd драйвером sd-карты;
- тестирование ftpd;
- совместная работа httpd и ftpd (поочерёдная и с параллельная при использовании ОС).

После всего этого останется добить modbus tcp и modbus rtu и я могу реализовать два устройства: modbus шлюз (TCP <-> RTU) и модуль ввода-вывода. Шлюз и МВВ будут конфигурируемые.
Россия навсегда!
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение uni » Ср окт 04, 2017 10:31 pm

Новости. Наконец-то удалось совместить мой httpd сервер с драйвером файловой системы FatFs (точнее с обёрткой, взятой из Arduino Framework'а). Пока использую софтовый SPI, но надо, видимо, переделать на аппаратный, т.к. иногда браузер уходит в ожидание. Думаю, что это либо из-за софтового SPI, т.к. передачу прерывает таймер millis иногда, либо это из-за драйвера сетевой платы, которую я не до конца ещё изучил.

Даже имея аппаратный JTAG отладчик, неплохой логический анализатор и терминал, отлавливать ошибки становится всё труднее из-за усложнения программы.

Изображение

Теперь нужно добавить ftpd и можно заливать сайты, тестировать libdbf и json. После добавим разбор ajax'а и в качестве примера можно будет, используя POST запросы, отображать в online состояние регистров мк.

Купил плату Ethernet 2 с W5500. Нужно будет настроить драйвер на работу с этой картой, иначе 4 сокетов мне явно не хватает уже: 1 - httpd, 2 - ftpd и остаётся 1 всего, а нужно ещё telnetd, modbus tcp. Они могут быть разнесены по времени, но лучше назначить каждому сервису по своему сокету.

Также пора задуматься об оптимизации, т.к. внутреннее ОЗУ мк уже забито неизвестно чем на 65%.

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

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

Сообщение uni » Сб окт 07, 2017 9:22 pm

Новости. Проверил работу с dbf файлом. Пришлось немного исправить исходный код libdbf, приведя его к реалиям мк и драйвера FatFs. В общем, драйвер работает, но... когда я наконец решил что-то записать так, как я бы это реально использовал, то выяснилось, что стандартный dbf не содержит типов для плавающей точки (float) и вообще бинарного представления чисел. Все данные имеют ASCII представление. Можно конечно ввести свой тип данных, но тогда его не смогут прочитать программы для работы с dbf.
Если я буду использовать стандартный dbf, то это мало чем будет отличаться от csv. Если же я введу свой тип данных, то нужно будет описать формат своего dbf и приложить конвертер в csv.

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

Изображение
Россия навсегда!
Ответить