Опрос ПЛК100 переменные типа float

Стартовая страница Форумы Взаимодействие с устройствами Опрос ПЛК100 переменные типа float

Просмотр 15 сообщений - с 1 по 15 (из 24 всего)
  • Автор
    Записи
  • #6070
    bvlbond
    Участник

    Настроил коммуникатор для опроса ПЛК100. В плк есть 3 переменных типа float.
    Для опроса в коммуникаторе задал адрес 4 для опроса первой переменной. Все замечательно, данные считались. Меняю адрес на 6, тоже читаю следующую переменную.
    Меняю адрес на 8- получаю ошибку недействительный адрес. Помогите разобраться с адресацией.

    http://s019.radikal.ru/i628/1706/b4/899ab182451a.png

    http://s011.radikal.ru/i317/1706/5a/401ede6de84a.png

    http://i053.radikal.ru/1706/df/40b15900ae9f.png

    #6071
    manjey73
    Участник

    неправильно указываете адреса.
    у Овен адресация с 0, в scada с 1 + выравнивание адресов в Овен.
    получаем
    0 — Word (один регистр) правильно указали 1 в SCADA
    2 — f1 (два регистра) — 3-4 в scada порядок байт 2301
    4 — f2 —————- 5-6 в scada порядок байт 2301
    6 — f3 —————- 7-8 в scada порядок байт 2301

    Вы просто считали пол регистра одной переменной, пол регистра второй и так как не меняли порядок байт получили вроде правильные значения.
    а добавив 3-й float вы перешагнули границу существующих регистров.

    Как-то так, если не ошибся в расчетах выравнивания

    #6083
    bvlbond
    Участник

    спасибо все работает.

    #6084
    bvlbond
    Участник

    читать научился теперь бы писать научиться. создал формулу
    public double fRevers (int rev)
    {
    float q = Convert.ToSingle(CmdVal);
    byte[] f = new byte[4];
    byte[] o = new byte[4];
    f = BitConverter.GetBytes(q);
    Array.Copy(f,0,o,0,4);
    if (rev == 1)
    {
    Array.Copy(f, 0, o, 1, 1);
    Array.Copy(f, 1, o, 0, 1);
    Array.Copy(f, 2, o, 3, 1);
    Array.Copy(f, 3, o, 2, 1);
    }
    Array.Resize(ref o, 8);
    Double ou = BitConverter.ToDouble(o,0);
    return ou;
    }

    в администраторе вызываю как fRevers(1). К коммуникаторе смотрю журнал линии связи в значении в данных регистра нули. . команда множественная количество элементов два. Таблица данных холдинг регистр.Что не так?

    #6085
    manjey73
    Участник

    на счет значения в Данных КП я не помню что должно быть из-за перестановки байт.
    у меня работало на ПР200 и ПЛК63. на ПР100 не проверял.
    Тип команды Стандартная в канале управления ?

    #6086
    bvlbond
    Участник

    да, старндартная. У меня ПЛК100. По идее должно быть аналогично пр200

    #6090
    manjey73
    Участник

    дайте скрины всех настроек, лучше на файлообменники для картинок а тут ссылки.

    #6091
    manjey73
    Участник

    Проверьте номер команды КП в шаблоне, могли забыть поменять. Ну и то, что в каналах управления указано ?

    #6093
    bvlbond
    Участник

    каналы управления
    https://cloud.mail.ru/public/Fe84/HR8vT5K3F
    настройки коммуникатора
    https://cloud.mail.ru/public/74Ph/uuaJWfH4g

    при просмотре линии связи вижу что в отправляемых регистрах 0

    #6095
    Mikhail
    Модератор

    Вы можете использовать бинарную команду. Это позволит избавиться от BitConverter.ToDouble, исключив возможную ошибку преобразования. С точки зрения UI будет отображаться то же самое.
    Бинарная команда в канале управления будет работать только для Множественной команды в шаблоне Модбас.

    • Ответ изменён 9 лет, 3 месяца назад пользователем Mikhail.
    #6098
    manjey73
    Участник

    Блин, проверю последнюю версию на ПР200 завтра.
    Вчера удаленно проверял на ПР200, все работает, но там не совсем последняя версия SCADA установлена.

    Откуда ошибка преобразования если на Visual Studio работает отлично ?

    з.ы. Зато вот в С# есть ошибка (ushort)Значение в Double — реальная ошибка, так как часть значений коверкает, убедился опытным путем. Теперь только Convert.ToUInt16(double) делаю и никак иначе.

    • Ответ изменён 9 лет, 3 месяца назад пользователем manjey73.
    #6101
    bvlbond
    Участник

    бинарная. это надо оператору вводить нолики и еденицы? Где про это можно почитать?

    #6108
    bvlbond
    Участник

    можно примерчик работы с бинарной командой?

    #6112
    manjey73
    Участник

    не совсем, надо сделать формулу, чтобы вводить стандартное значение, а сервер передавал бинарную. Если конечно прибор будет принимать.
    у меня сейчас платы с али лежат, бинарную команду вообще не принимают, хотя в чем разница для ноликов и единиц не понимаю…

    #6113
    bvlbond
    Участник

    что так формулу надо делать что этак. Мне бы любым способ проблему решить. Все сроки уходят

Просмотр 15 сообщений - с 1 по 15 (из 24 всего)
  • Для ответа в этой теме необходимо авторизоваться.