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

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

Просмотр 15 сообщений - с 31 по 45 (из 87 всего)
  • Автор
    Сообщения
  • #19585
    Romiros
    Участник

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

    Попробуйте так. Задавайте в команде 0 или 1

    #19586
    sakhalin_Cat
    Участник

    Ответьте чайнику куда сохранить этот код? В формулы? Как его обозвать и куда подставлять значения?
    Обьясните на пальцах, как ребенку который никогда этого не делал.

    #19587
    Romiros
    Участник

    Да у Вас формула готова. Замените ее код на этот. И используйте как и делали

    #19588
    sakhalin_Cat
    Участник

    То есть я создал формулу — SetBit2 с содержимым
    ————————- Begin —————-
    public double SetBit(double n, int index, double value)
    {
    long nn = Convert.ToInt64(n);
    return value > 0 ? nn | (1 << index) : nn & ~(1 << index);
    }
    ———————— End ———————

    Куда подставлять значения где единичка стоит?
    Так-же
    SetBit2(Val(????), 1, Cmd)
    И что писать вместо вопросительных знаков?

    #19589
    sakhalin_Cat
    Участник

    Так-же вопрос в какой канал управления её прописывать? Тот который на запись модбас идет или в отдельную команду вкл\выкл?
    Какой тип команды использовать «Стандартная» или «Бинарная»
    Какое значение команды «вкл\выкл» «вкл» «Выполнить»???

    #19590
    sakhalin_Cat
    Участник

    И куда писать какой из 16ти нужных битов менять?

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

    Добрый день!
    В функции SetBit в таблице формул:
    — вместо long напишите ulong
    — вместо ToInt64 напишите ToUInt64

    Кроме того, скорее всего, ошибка в том месте, где Вы используете эту функцию. Сделайте скриншот вызова SetBit.

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

    Команда ТУ стандартного типа. Бинарная используется для строк.

    #19598
    sakhalin_Cat
    Участник

    Написал как вы сказали, скада валит ошибку —
    .

    /
    Да скорее всего не верно использую. Я на предыдущей странице внизу подробно расписывал что нужно получить в результате.
    .
    Скрины как и просили
    .


    #19608
    sakhalin_Cat
    Участник

    Народ ну помогите ктонить, чего сделать то? Три варианта формул и все не пашут.

    #19609
    sakhalin_Cat
    Участник

    Давайте упростим задачу.
    Пусть будет канал управления №10499 он привязан к модбасу «двухбайтовое слово». Нужно изменить 1бит.
    Что мне нужно вписать в формулы и как заполнить параметры канала управления?
    Например менять состояние бита-3 с нуля на единицу. можно в режиме вкл-выкл, можно в режиме кнопки. Дальше я уже костылей PLC насую.

    • Этот ответ был изменен 6 месяцев назад от sakhalin_Cat.
    • Этот ответ был изменен 6 месяцев назад от sakhalin_Cat.
    #19612
    sakhalin_Cat
    Участник

    Вроде добился чтобы менялся бит.
    Только в режиме выключателя не работает.
    Как сделать чтобы вкл\выкл было?
    формула
    SetBit(Val(103), 0, 1) — включает
    SetBit(Val(103), 0, 0) — выключает
    SetBit(Val(103), 0, Cmd) — выключает

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

    Если по отдельности работает, то для переключения на противоположный попробуйте
    SetBit(Val(103), 0, GetBit(Val(103),0) > 0 ? 0 : 1)

    #19618
    sakhalin_Cat
    Участник

    Огромное спасибо. Всё заработало.

    #19619
    sakhalin_Cat
    Участник

    А как можно мигнуть битом? Типа как звонковая кнопка 🙂
    Например включить на 0,1сек
    И как сменить состояние на 0,1сек?
    Я так понимаю надо использовать таймер Tol но куда его привязать не совсем понимаю.

    • Этот ответ был изменен 6 месяцев назад от sakhalin_Cat.
    • Этот ответ был изменен 6 месяцев назад от sakhalin_Cat.
    • Этот ответ был изменен 6 месяцев назад от sakhalin_Cat.
Просмотр 15 сообщений - с 31 по 45 (из 87 всего)
  • Вы должны авторизироваться для ответа в этой теме.