Pull to refresh
51
0
Александр Сурков@AlexandrSurkov

Cloud, DevOps, Project Management.

Send message
Установщик netmf 4.3 есть даже на сайте ST. Просто версия 4.4 не так давно вышла :)
Реально, но трудно. Современные технологии машинного обучения могут справиться с такой задачей.
Чтобы сделать какую-нибудь визуализацию процесса.
Скриншоты в конце статьи добавляют наглядности результату. Что-то такое хотелось сделать и на Raspberry
По моему сталкивался. Эта ошибка говорит о том, что не удается подписать файл ...bin\tinyclr.bin\ER_DAT
Проблема была в том, что его размер равен 0. В моем случае эта ошибка никак не влияла на дальнейшие действия. Вы можете использовать и не подписанные файлы при прошивке платы.

А еще попробуйте сделать «чистую компиляцию»: сотрите всю папку BuildOutput. Мне помогало, так как ошибка возникала, если сначала собрать SDK, а потом уже собирать прошивки для плат.

И еще, можно попробовать получить свежую версию репозитория с GitHub. Я где то видел на форуме ветку про эту ошибку, по этому эта проблема может быть уже исправлена.
Мы делали все. Начиная с разворачивания Windows IoT, заканчивая поиском причины и ее устранением. Ушло на это часа два.
Естественно, мы сразу нашли много форумов, где люди обсуждают такие же проблемы. Там были и списки параметров. Но HDMI-VGA переходник, который мы использовали, никак не хотел работать. По сути, параметры пришлось подбирать перебором. В итоге, родное для монитора разрешение так и не удалось поставить.
Вообще это странно. Я никогда не слышал про EtherCAT, тем более вы говорите что это полевая шина… Наверное этому есть какие-то причины. Но, к технологии мы присмотримся. На первый взгляд она мне показалась очень интересной. Еще раз спасибо за совет.
Спасибо за совет!

Насколько я понял, EtherCAT это некоторая альтернатива CAN. Тут требуется изучение технической стороны этого вопроса.
Я не нашел на вскидку данных о пропускной способности и длине сети. Как дело обстоит с питанием?

Мгновенный апгрейд софта в датчиках и так есть. Это вопрос написания бутлоадера для микроконтроллера. А там хоть CAN, хоть UART, хоть USB — что захотите :)

Ну а по поводу интернета… Во первых гнать много данных в интернет — сразу встанет вопрос масштабируемости и надежности канала. Уж очень много узких мест в системе.

Во вторых облачные анализаторы работает не всегда быстро. На моей практике Запрос-ответ к веб сервису Azure Machine Learning занимает около 3х секунд при хорошем интернете для одной выборки в 2048 значений (2 секунды работы датчика). То есть реального времени скорее всего не получится.

Ну и в третьих ни один заказчик в здравом уме не даст вам выводить инженерные системы безопастности в интернет :) Особенно это касается гос. структур.

Но, как технология для организации сетей датчиков для анализа инженерных конструкций, EtherCAT очень интересен.
Согласен с вами. Но вся фантастика впереди. Сейчас связка IoT + Machine Learning дает очень интересные результаты. правда пока на инженерных образцах. Пройдет пара лет и на рынке появятся действительно фантастические вещи! :)
Спасибо, будем иметь ввиду!
Ну хотя бы по тому, что мы про него просто не знали, когда принимались ключевые решения.
Его можно было бы использовать при обмене со шлюзами. Думаю он действительно сэкономил бы силы и время.
Это вопрос терминолонии.

Интернет вещей (англ. Internet of Things, IoT) — концепция вычислительной сети физических объектов («вещей»), оснащённых встроенными технологиями для взаимодействия друг с другом или с внешней средой


В самой концепции IoT нет ни слова про глобальную сеть, web, облака и т.д. Речь идет именно об объединении мнжества устройств в единое инфориационное пространство.
А то, что ассоциируется с IoT сейчас — это уже развитие идей и технологий.

Да и само понятие интернета вещей существует уже 16 лет. И придумано оно было как раз людьми, занимающимися промышленной автоматизацией.
Mqtt — хорошая штука, но предназначена для другого. Она организует горизонтальную передачу информации, от устройства к устройству. А message broker — это центральная часть топологии данных «звезда».

В нашей системе потоки данных строго вертикальные, и топология потоков данных — «дерево». Каждое устройство знает кто у него сверху и снизу, но понятия не имеет о других таких же устройствах. Датчикам не нужно общаться друг с другом.
Возможно частота другая и оптимизация, но сути это не меняет.

Я думаю стоит ориентироваться на то, что .Net Micro Framework работает на 2-3 порядка медленнее, в зависимости от оптимизации. Но он и не ориентирован на вычисления.

Для примера вот тут сравнивается C# и C++ на обычном компьютере.
«Самая медленная(из рассмотренных конечно) реализация на С#, медленнее самой медленной С++ реализации примерно в 4 раза»
Я так понимаю там средняя разница примерно в 10 раз.
Соответственно, можно сделать вывод, что сам код примерно на порядок (12 раз) быстрее исполняется в native чем на .Net MicroFraimwork.
В Keil замерил вот такой код:

#define NCoef 10
#define DCgain 8192

#define __int16 short
#define __int32 int

__int16 iir(__int16 NewSample) {
    __int16 ACoef[NCoef+1] = {
           93,
          930,
         4186,
        11163,
        19536,
        23443,
        19536,
        11163,
         4186,
          930,
           93
    };

    __int16 BCoef[NCoef+1] = {
         1024,
        -5106,
        12222,
        -18168,
        18404,
        -13195,
         6751,
        -2425,
          584,
          -85,
            5
    };

    static __int32 y[NCoef+1]; //output samples
    //Warning!!!!!! This variable should be signed (input sample width + Coefs width + 10 )-bit width to avoid saturation.

    static __int16 x[NCoef+1]; //input samples
    int n;

    //shift the old samples
    for(n=NCoef; n>0; n--) {
       x[n] = x[n-1];
       y[n] = y[n-1];
    }

    //Calculate the new output
    x[0] = NewSample;
    y[0] = ACoef[0] * x[0];
    for(n=1; n<=NCoef; n++)
        y[0] += ACoef[n] * x[n] - BCoef[n] * y[n];

    y[0] /= BCoef[0];
    
    return y[0] / DCgain;
}

short input[8000];
short output[8000];

int main(void)
{
 int i,j;
	for (j = 0; j < 10; j++)
	{		

			for (i = 0; i < 8000; i++)
			{
					input[i] = (short) i;
			}

			for (i = 0; i < 8000; i++)
			{
					output[i] = iir(input[i]);
			}		
	}
  
  /* Infinite loop */
  while (1)
  {
  }
}


Результат одного блока на 8000 выборок примерно 0.55 секунды.
Это общее время на вот это:

for (int i = 0; i < 8000; i++)
{
      output[i] = WinFilterеTest.iir(input[i]);
}


То есть на каждый блок по 8000 выборок
Замерил на .NET Micro Framework.

Использовал вот такой код:

public static class WinFilterеTest
    {
        private const int NCoef = 10;
        private const int DCgain = 8192;

        //__int16 iir(__int16 NewSample)
        public static short iir(short NewSample)
        {
            short[] ACoef = new short[NCoef + 1] {
               93,
              930,
             4186,
            11163,
            19536,
            23443,
            19536,
            11163,
             4186,
              930,
               93
            };

            short[] BCoef = new short[NCoef + 1] {
             1024,
            -5106,
            12222,
            -18168,
            18404,
            -13195,
             6751,
            -2425,
              584,
              -85,
                5
            };

            int[] y = new int[NCoef + 1]; //output samples
                                          //Warning!!!!!! This variable should be signed (input sample width + Coefs width + 10 )-bit width to avoid saturation.

            int[] x = new int[NCoef + 1]; //input samples
            int n;

            //shift the old samples
            for (n = NCoef; n > 0; n--)
            {
                x[n] = x[n - 1];
                y[n] = y[n - 1];
            }

            //Calculate the new output
            x[0] = NewSample;
            y[0] = ACoef[0] * x[0];
            for (n = 1; n <= NCoef; n++)
                y[0] += ACoef[n] * x[n] - BCoef[n] * y[n];

            y[0] /= BCoef[0];

            return (short)(y[0] / DCgain);
        }
    }


Вызов кода:

    public class Program
    {
        public static void Main()
        {

            for (int j = 0; j < 10; j++)
            {
                short[] input = new short[8000];
                short[] output = new short[8000];

                for (int i = 0; i < 8000; i++)
                {
                    input[i] = (short) i;
                }

                var start = DateTime.Now;
                for (int i = 0; i < 8000; i++)
                {
                    output[i] = WinFilterеTest.iir(input[i]);
                }
                var stop = DateTime.Now;

                var delta = stop - start;

                Debug.Print(delta.ToString());
            }
}


Время выполнения на эмуляторе под Windows (i5-3317U 1,7GHz) около 2.2 секунд.
Время выполнения на STN32F4Discovery около 6.2 секунд.

Скоро замеряю через Keil. С GCC мне сейчас сложно замерять. Буду рад, если кто-то поможет. Код выложу.
Отлично! Рад что мои труды пошли на пользу!
У всех своя дорога.
Наверное, лет 30-40 назад вы бы встретили единомышленников практически в любом техническом вузе, но мир слишком быстро меняется.
Я в свои 17 лет писал только бейсике и ни о каких схемах и контроллерах не знал и в помине. Шел в ВУЗ скорее интуитивно. Лично мне с самого первого курса не хватало понимания схемы образования. Нас просто пихали знаниями, не объясняя зачем. Понятно стало уже потом…

Мне кажется что 90% студентов не очень понимают куда именно они попали и чему конкретно их будут учить. И так было всегда.

Наверное вы правы, насчет того, что это серьезная проблема образования. Но уровни вузов везде разные. Я не знаю, что вы закончили, но наверное в МГУ или в Бауманке вы бы нашли единомышленников, не говоря уж о зарубежных вузах…

Но все таки ВУЗ это далеко не только учеба. В какой-то из статей известной когда-то «Компьютерры» я прочитал интервью, в котором была высказана идея, что «высшее образование делает человека сложнее и именно в этом его цель». ВУЗ должен развивать, причем в разных направлениях. Это и музыка, и КВН, и посиделки в общаге, и спорт, и самое главное, конечно, само образование. Но все это единое целое, неделимое.

ВУЗ дает возможность понять кто ты и дает выбрать свою дорогу. А уж кто и как воспользуется этим выбором, зависит только от самого человека.
А каким именно способом репозиторий скачивали?

Information

Rating
Does not participate
Location
Lyon, Rhône, Франция
Registered
Activity

Specialization

Директор проекта
Ведущий
Git
C#
Управление проектами
Управление людьми
Ведение переговоров
Построение команды