Помогите разобраться с контроллером Beckhoff

Стартовая страница Форумы Взаимодействие с устройствами Modbus Помогите разобраться с контроллером Beckhoff

Просмотр 15 сообщений - с 16 по 30 (из 90 всего)
  • Автор
    Сообщения
  • #19460
    manjey73
    Участник

    Для нулевого бита соответственно.

    Если нужно другим битом управлять то для 6-ого например
    SetBit(Val(100), 6, Cmd) и так далее

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

    Добрый день!
    Нужно начать с того, что в шаблоне Модбас добавить свою команду. Выбрать для неё необходимый тип функции Модбас и адрес.

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

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

    Журналы можно найти в виде файлов в C:\SCADA\ScadaComm\Log

    #19563
    sakhalin_Cat
    Участник

    Доброго дня.
    Просидел сегодня всю ночь и толку не добился. Где-то что-то не так делаю.
    Если не сложно обьясните где именно.
    Если включаю формулу то ядро и вебсервер не перезапускаются ну или тупят не знаю.
    Без включеной формулы все работает, только команда в никуда улетает.

    http://argon.pw/1/1.jpg
    http://argon.pw/1/2.jpg
    http://argon.pw/1/3.jpg
    http://argon.pw/1/4.jpg

    • Этот ответ был изменен 2 года, 10 месяцев назад от sakhalin_Cat.
    • Этот ответ был изменен 2 года, 10 месяцев назад от sakhalin_Cat.
    #19567
    sakhalin_Cat
    Участник

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




    #19568
    Romiros
    Участник

    Если включаю формулу то ядро и вебсервер не перезапускаются ну или тупят не знаю.

    В статистике сервера ошибку не пишет? Типа несовпадение типов bool и double ?

    • Этот ответ был изменен 2 года, 10 месяцев назад от Romiros.
    #19570
    sakhalin_Cat
    Участник

    Да вроде есть такое.
    Чего сделать нужно?

    #19571
    sakhalin_Cat
    Участник

    Формула эта, как написано выше-

    public double SetBit(double n, int index, bool value)
    {
    long nn = Convert.ToInt64(n);
    return value ? nn | (1 << index) : nn & ~(1 << index);
    }

    Сохранена в справочнике как SetBit

    #19573
    manjey73
    Участник

    Если формулу не привязываете к каналу, она есть только в справочнике — сервер перезапускается и работает нормально ?

    #19574
    sakhalin_Cat
    Участник

    Да, если отключить формулу в канале то все работает. В справочнике я её не трогаю

    #19575
    sakhalin_Cat
    Участник

    И еще один вопрос который меня смущает:
    Основной канал «103» имеет тип WORD состоящий из 2х BYTE соответственно из 16bit, если мы меняем один бит, то по идее нужно прочитать полностью WORD изменить в нем нужный бит и отправит полностью WORD с изменениями обратно иначе все остальные биты слетят в FALSE. Мы же не можем изменить один бит не затронув состояния всех остальных.
    Тогда почему мы берем для изменения дорасчетный канал с выделенным по формуле битом?
    .
    Я просто не программист и плаваю в этих вопросах. Потому вопросы могут быть глупыми.

    #19576
    manjey73
    Участник

    SetVal(9, SetBit(Val(9), Convert.ToInt32(Val(10)), Convert.ToBoolean(Cmd)))

    Канал управления битом, где

    9 — это канал, в котором мы меняем бит, у вас это номер L-10_S3_Word

    Convert.ToInt32(Val(10)) — на эту фигню не смотрите 🙂 это я в другом канале задаю бит, который нужно поменять, либо просто укажите 0, либо Convert.ToInt32(0)

    То есть формула в канале управления будет такая, если номер канала L-10_S3_Word = 9

    SetVal(9, SetBit(Val(9), Convert.ToInt32(0), Convert.ToBoolean(Cmd)))

    или

    SetVal(9, SetBit(Val(9), 0, Convert.ToBoolean(Cmd)))

    или так

    SetVal(9, SetBit(Val(9), 0, (bool)Cmd))

    • Этот ответ был изменен 2 года, 10 месяцев назад от manjey73.
    #19578
    manjey73
    Участник

    Тут надо запомнить простую вещь — ВСЕ каналы в базе имеют формат double

    Если вы делаете формулу для себя и возвращаете из нее Boolean (bool) то системой она будет преобразована в double и записана в БД.

    Тут вроде бы все ничего, но есть одно НО. Вы не сможете подобную формулу использовать внутри другой формулы, так как преобразований внутри формул или нет, или они не доступны вам. По этому надо стараться самому возвращать double и иногда приходится писать внутри формул Convert.To’ЧТОТО’ чтобы это правильно заработало. Тут только опытным путем. Скан формул как из справочника, так и из всех каналов происходит при каждом перезапуске сервера, и если он выдает ошибку со ссылкой на формулы, надо понять, что ему не нравится.

    #19579
    manjey73
    Участник

    На счет изменения одного бита в числе. Тут и есть сама суть, что мы поменяли (выставили) один бит в существующем числе, не трогая другие биты.

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

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

    #19583
    sakhalin_Cat
    Участник

    Какой-то разговор на Китайском. Я еще раз говорю я не пргорамист и мне эти слова которые вы пишете ни о чем не говорят.
    Я же по Русски сказал, что не могу написать формулу так как не знаю языка на котором она пишется.
    Какой мне смысл задавать вопросы и просить помощи если бы я знал как сделать?.
    .
    Если кто может реально помочь то помогите пожалуйста, а метод перебора букв и слов в формуле человеком который не понимает за что отвечают какие слова результата не принесут.
    .
    Еще раз опишу задачу:
    Есть адрес 16387 по которому находится 2х байтовое слово. Этот адрес и пишется и читается.
    На чтение этот адрес привязан к каналу — 103 — см фото —
    .

    .
    На канале висит 15 дорасчетных формул которые включают и выключают лампочки на панели в веб-морде — см фото —
    .

    .
    На запись этот адрес привязан к каналу управления- 10499 — см фото —
    .

    .
    И отображается в списке каналов как — см фото—
    .

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

    • Этот ответ был изменен 2 года, 10 месяцев назад от sakhalin_Cat.
Просмотр 15 сообщений - с 16 по 30 (из 90 всего)
  • Вы должны авторизироваться для ответа в этой теме.