Search
Write a publication
Pull to refresh
10
0
Владислав Бабин @grekeh

User

Send message

Два момента:

  • репозитории Redhat переехали на registry.redhat.io, то есть команда будет

    oc new-app registry.redhat.io/ubi8/openjdk-11:latest~https://github.com/gcolman/quarkus-hello-world.git

  • в статье не упомянут вопрос аутентификации в приватном image registry, которым является репозиторий redhat. По крайней мере в случае OKD для начинающих это ни разу не тривиально. Нужно

    1) отредактировать installation-pull-secret в пространстве openshift-image-registry (создавать новый бесполезно, тк OKD будет использовать первый попавшийся dockerconfig, то есть тот же installation-pull-secret);

    2) его же нужно пробросить в builder pod, для этого выполнить

    oc secrets link default installation-pull-secret --for=pull

и тогда да -- это будет "действительно легко"

Скетч (вдруг кому нужен) уехал сюда: bitbucket.org/babinvn/ac-current-meter/src/master/meter.ino

Репозиторий на Github это отродье мелкой мякоти заблокировало во время моей поездки в Крым и неосторожной попытки поработать из отпуска.
Сорри, что пишу в старую тему — не нашел на Хабре ничего другого по OpenFAST, а поделиться хотелось: для парсинга сообщений по протоколу FAST есть библиотека openfast.org. Пример ее использования для обработки фидов с биржи:

    public static void main(String[] args) throws IOException {
        InputStream templateSource = new FileInputStream("FIX50SP2-2015-Apr.xml");
        MessageTemplateLoader templateLoader = new XMLMessageTemplateLoader();
        MessageTemplate[] templates = templateLoader.load(templateSource);
        final Context context = new Context();
        Arrays.asList(templates).stream().forEach((t) -> {
            context.registerTemplate(Integer.parseInt(t.getId()), t);
        });

        int port = Integer.parseInt(args[0]);

        NetworkInterface networkInterface = NetworkInterface.getByName("ppp0");
        try (DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
                .setOption(StandardSocketOptions.SO_REUSEADDR, true)
                .bind(new InetSocketAddress(port))
                .setOption(StandardSocketOptions.IP_MULTICAST_IF, networkInterface)) {
            InetAddress group = InetAddress.getByName(args[1]);
            InetAddress source = InetAddress.getByName(args[2]);
            MembershipKey key = dc.join(group, networkInterface, source);

            Thread t = new Thread(() -> {
                while (true) {
                    try {
                        while (true) {
                            ByteBuffer buf = ByteBuffer.allocate(4096);
                            dc.receive(buf);
                            //System.out.println(String.format("%d bytes received", buf.position()));
                            buf.position(4);
                            ByteBufferBackedInputStream in = new ByteBufferBackedInputStream(buf);
                            FastDecoder decoder = new FastDecoder(context, in);
                            Message message = decoder.readMessage();
                            if (message != null) {
                                System.out.println(String.format("Message template %s %s", message.getTemplate().getId(), message.getTemplate().getName()));
                            } else {
                                System.out.println("Null message, exiting...");
                                break;
                            }
                        }
                    } catch (IOException ex) {
                        ex.printStackTrace();
                        break;
                    }
                }
            });
            t.start();

            while (t.isAlive()) {
                try {
                    Thread.sleep(10);
                } catch(InterruptedException ignore) {
                    t.interrupt();
                }
            }

            key.drop();
        }
        System.exit(0);
    }


Пример вызова:

[root@vpn tmp]# java -jar FAST-Test-0.1.1.jar 9017 239.192.111.7 10.50.129.200
Message template 2423 X-MSR-FOND
Message template 2423 X-MSR-FOND
...
Я решил попробовать с другим датчиком и собрал конструкцию как здесь: openenergymonitor.org/emon/buildingblocks/measuring-voltage-with-an-acac-power-adapter Выглядит так:



Под напряжением дает такую картинку:



Лепота. Амплитуда вдвое шире, чем у авторов OpenEnergyMonitor, но это потому, что я взял трансформатор 12V/24V (какой оказался в принесенном в жертву БП). Без напряжения картинка получается в пределах (± 1 бит):









Скорее всего совершенствуя схему можно добиться чистого нуля (спаять, а не собирать на макете; подобрать емкость конденсатора; провода убрать...). Продолжение в следующей серии

У меня Arduino такое: freeduino.ru/arduino/freeduino-2013.html

На нем 22 нога припаяна к общей земле. AVCC не выведен никуда. AREF на другой стороне от A0-A5 и никаких конденсаторов я там не разглядел. Я попробую как-нибудь завязать датчик на него вместо VCC. Посмотрим, станет ли лучше.
Если под анализатором качества подразумевается нечто подобное www.zetlab.ru/catalog/analyzers/a17_e8.php, то на Arduino его не сделать.

На Arduino можно добавить повесить датчик напряжения, например, как здесь habrahabr.ru/post/193022/. Но я бы скорее не отлавливал ноль, как автор, а сделал аналогично измерению тока и в цикле собирал данные и по току и по напряжению. Тогда можно было бы вычислять фазовое напряжение и ток, а также фазовый угол между током и напряжением.

Если же с Arduino брать только статистику, а анализ делать уже на Raspberry, тогда, скорее всего, можно вычислить все, что делает анализатор ZETLAB, включая частоту и гармоники.
ACS712 — это не шунт, а дачик Холла. И я не знаю, какая из ног ATMEGA328P есть AGND. В даташите на него про отдельный AGND ничего не нашел, поэтому воткнул в ближайшую к блоку A0-A5 землю. Не думаю, чтобы это было принципиально. Мне все-таки кажется, что шумы на датчике. Залью на гит еще проект и назову ГСЧ на эффекте Холла… :)
Эта интересно. Я немного «упростил» схему, убрав «сопли»:



Правда это мало на что повлияло (график без нагрузки):



Есть еще какие-нибудь соображения, как избавиться от шума?
Только на Arduino — вряд ли. В связке с Raspberry — думаю да. Показания с Arduino можно снимать несколько (2 или 3) раз в секунду. Если такая дискретность удовлетворяет требованиям ГОСТа, то можно. Сделать сервер на PHP или Java, который будет генерить отчет легко. В выходные почитаю ГОСТ и отпишусь сюда же.
Нет, НЧ фильтр на цепь нагрузки я не ставил. Просто сглаживал по окну и смотрел, на каком объеме выборки графики будут достаточно гладкими.
Честно говоря, дальше экспериментировать я не планировал: результат меня вполне устраивает как по точности, так и по быстродействию.
Приемлемое сглаживание получается на отрезке около 1/2 периода синусоиды. Понятно, что при этом амплитуда сильно проседает. Скорее всего с приемлемой точностью можно получить фактическую амплитуду, просто умножив сглаженную на заранее подобранную константу. Но я не проверял.
Переход через ноль, по идее, должен соответствовать 1024 / 2, но в реальности довольно сильно от него отличается. Датчик действительно шумит на нуле, свою ошибку добавляет АЦП. Ноль также может плавать со временем. Не могу сказать почему, но результаты усреднения по 512 измерениям на нуле в разное время довольно сильно отличались.

Кроме того, я бы не сказал, что второй вариант сильно сложный. По-моему наоборот все довольно просто. Не универсально, конечно, потому что не будет работать, скажем, для сети 60 Гц. Но можно заложить в скетч инициализацию и указывать частоту тока при подключении устройства в Raspberry.
Спасибо за ссылку на SCT-013, интересно.
Вообще прототип предназначается для управления отдельно стоящим телевизором, чтобы дети днем делали уроки, а не пялились в ящик, пока родителей нет дома. Отсюда — реле. Измерялка же позволяет точно определить, «а не пялились ли дети в телевизор, вместо того чтобы делать уроки? (не играли ли в компьютер и т.д.)».
Собственно, реализовать это как устройство — вариантов много. Мне показалось, что будет интересно рассказать про применение Mathematica для Raspberry Pi и напомнить про алгебру тем, кто ее подзабыл. На реально работающее устройство этот прототип, конечно, не тянет.

Information

Rating
Does not participate
Location
Балашиха, Москва и Московская обл., Россия
Date of birth
Registered
Activity