Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › Помогите разобраться с контроллером Beckhoff
- В этой теме 89 ответов, 4 участника, последнее обновление 1 год, 10 месяцев назад сделано sakhalin_Cat.
-
АвторСообщения
-
26.05.2021 в 16:49 #19585RomirosУчастник
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
26.05.2021 в 16:51 #19586sakhalin_CatУчастникОтветьте чайнику куда сохранить этот код? В формулы? Как его обозвать и куда подставлять значения?
Обьясните на пальцах, как ребенку который никогда этого не делал.26.05.2021 в 16:54 #19587RomirosУчастникДа у Вас формула готова. Замените ее код на этот. И используйте как и делали
26.05.2021 в 16:58 #19588sakhalin_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)
И что писать вместо вопросительных знаков?26.05.2021 в 17:01 #19589sakhalin_CatУчастникТак-же вопрос в какой канал управления её прописывать? Тот который на запись модбас идет или в отдельную команду вкл\выкл?
Какой тип команды использовать «Стандартная» или «Бинарная»
Какое значение команды «вкл\выкл» «вкл» «Выполнить»???26.05.2021 в 17:04 #19590sakhalin_CatУчастникИ куда писать какой из 16ти нужных битов менять?
26.05.2021 в 17:19 #19591MikhailМодераторДобрый день!
В функции SetBit в таблице формул:
— вместо long напишите ulong
— вместо ToInt64 напишите ToUInt64Кроме того, скорее всего, ошибка в том месте, где Вы используете эту функцию. Сделайте скриншот вызова SetBit.
26.05.2021 в 17:19 #19592MikhailМодераторКоманда ТУ стандартного типа. Бинарная используется для строк.
26.05.2021 в 17:30 #19598sakhalin_CatУчастникНаписал как вы сказали, скада валит ошибку —
.
/
Да скорее всего не верно использую. Я на предыдущей странице внизу подробно расписывал что нужно получить в результате.
.
Скрины как и просили
.
27.05.2021 в 14:40 #19608sakhalin_CatУчастникНарод ну помогите ктонить, чего сделать то? Три варианта формул и все не пашут.
27.05.2021 в 14:45 #19609sakhalin_CatУчастникДавайте упростим задачу.
Пусть будет канал управления №10499 он привязан к модбасу «двухбайтовое слово». Нужно изменить 1бит.
Что мне нужно вписать в формулы и как заполнить параметры канала управления?
Например менять состояние бита-3 с нуля на единицу. можно в режиме вкл-выкл, можно в режиме кнопки. Дальше я уже костылей PLC насую.- Этот ответ был изменен 2 года, 10 месяцев назад от sakhalin_Cat.
- Этот ответ был изменен 2 года, 10 месяцев назад от sakhalin_Cat.
27.05.2021 в 15:41 #19612sakhalin_CatУчастникВроде добился чтобы менялся бит.
Только в режиме выключателя не работает.
Как сделать чтобы вкл\выкл было?
формула
SetBit(Val(103), 0, 1) — включает
SetBit(Val(103), 0, 0) — выключает
SetBit(Val(103), 0, Cmd) — выключает27.05.2021 в 16:12 #19614MikhailМодераторЕсли по отдельности работает, то для переключения на противоположный попробуйте
SetBit(Val(103), 0, GetBit(Val(103),0) > 0 ? 0 : 1)
27.05.2021 в 16:32 #19618sakhalin_CatУчастникОгромное спасибо. Всё заработало.
27.05.2021 в 16:57 #19619sakhalin_CatУчастникА как можно мигнуть битом? Типа как звонковая кнопка 🙂
Например включить на 0,1сек
И как сменить состояние на 0,1сек?
Я так понимаю надо использовать таймер Tol но куда его привязать не совсем понимаю.- Этот ответ был изменен 2 года, 10 месяцев назад от sakhalin_Cat.
- Этот ответ был изменен 2 года, 10 месяцев назад от sakhalin_Cat.
- Этот ответ был изменен 2 года, 10 месяцев назад от sakhalin_Cat.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.