Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › Множественная команда
- В этой теме 12 ответов, 3 участника, последнее обновление 8 лет, 11 месяцев назад сделано
skoda_rapid2017.
-
АвторЗаписи
-
18.09.2017 в 13:05 #7308
skoda_rapid2017
УчастникЗдравствуйте! Есть вопрос по отправке команд управления на устройство через Web. Нужно отправить два значения 1 и 2. Значение 1 мы отправляем на первый регистр, а значение 2 — на 2 регистр. Пробовал отправить через коммуникатор бинарную команду
16-ричные данные 00020001, команда прошла успешна, далее в администраторе использовал формулу CmdData*00020001, и при перезапуске сервер ругался:
Ошибка при компилировании исходного кода формул:
Строка 537, колонка 101: error CS0019: Оператор «*» не может применяться к операндам типа «byte[]» и «int»
Для ознакомления с исходным кодом см. файл C:\SCADA\ScadaServer\Log\CalcEngine.cs
Попробовал перевести значение 20001 в 10-ую систему и использовал следующую формулу Cmd*131073 и сервер снова ругался: Ошибка при компилировании исходного кода формул:
Строка 537, колонка 101: error CS0029: Неявное преобразование типа «double» в «byte[]» невозможно
Для ознакомления с исходным кодом см. файл C:\SCADA\ScadaServer\Log\CalcEngine.cs
2017-09-18 13:02:32 <WS1980><система><ERR> Нормальная работа программы невозможна.Подскажите, пожалуйста, какую формулу использовать в моем случае?
18.09.2017 в 15:45 #7309
manjey73Участник00020001 такэто 16-ричные данные, а не 10-чные.
Преобразуйте свое в 10-ный вид и на него умножайте. На 8193-
Ответ изменён 8 лет, 11 месяцев назад пользователем
manjey73.
18.09.2017 в 16:42 #7311
MikhailМодераторCmdData — это массив элементов типа byte. Пока не ясно, что именно Вы хотите преобразовать.
19.09.2017 в 08:53 #7318skoda_rapid2017
УчастникТолько не 8193, а 131073.
Вот такие настройки у меня в АдминистратореТип команды: Бинарная
Значение команды: Выполнить
Формула:Cmd*131073И после перезапуска сервера следующая Ошибка при компилировании исходного кода формул:
Строка 537, колонка 101: error CS0029: Неявное преобразование типа «double» в «byte[]» невозможно
Для ознакомления с исходным кодом см. файл C:\SCADA\ScadaServer\Log\CalcEngine.cs
2017-09-18 13:02:32 <WS1980><система><ERR> Нормальная работа программы невозможна.Вот посылка, которую я отправил через коммуникатор:
Отправка (13): 01 10 25 00 00 02 04 00 02 00 01 35 3E
Мне нужно отправить такую же посылку через Скада-Веб.-
Ответ изменён 8 лет, 11 месяцев назад пользователем
skoda_rapid2017.
19.09.2017 в 08:55 #7320skoda_rapid2017
УчастникНо чтобы отправить посылку, нужно правильную формулу использовать в Администраторе. А это вопрос для меня?
-
Ответ изменён 8 лет, 11 месяцев назад пользователем
skoda_rapid2017.
19.09.2017 в 16:42 #7323
MikhailМодераторВ веб-приложении нужно, чтобы оператор вводил некоторое значение, выбирал из нескольких готовых значений или просто нажимал кнопку?
Значение, которое ввел оператор в веб, должно как-то преобразовываться? Если да, то как именно?20.09.2017 в 08:11 #7331skoda_rapid2017
УчастникМне нужно, чтобы оператор не вводил значение в веб, а сразу отправил команду выполнить
-
Ответ изменён 8 лет, 11 месяцев назад пользователем
skoda_rapid2017.
20.09.2017 в 08:21 #7333skoda_rapid2017
УчастникКогда оператор отправляет команду через веб(он не вводит значение), то на устройство должно идти такое сообщение:
Отправка (13): 01 10 25 00 00 02 04 00 02 00 01 35 3E
Надеюсь понятно так.20.09.2017 в 09:17 #7334skoda_rapid2017
УчастникИз сообщения видно, что это отправка множественной команды из двух регистров, на первый регистр записываем значение 1, а на второй регистр значение 2. Вот как это реализовать в Администраторе?
-
Ответ изменён 8 лет, 11 месяцев назад пользователем
skoda_rapid2017.
20.09.2017 в 16:39 #7343skoda_rapid2017
УчастникЕсли еще вопрос непонятен мой? может еще информация нужна?
20.09.2017 в 22:19 #7348
manjey73Участникпопробуйте добиться правильной команды отправки используя Cmd*значение ?
Чтобы отправка была стандартной командой. 2 регистра для стандартной команды это будет FloatЛибо как-то еще преобразовать формулой…
20.09.2017 в 23:41 #7350
MikhailМодераторДва варианта:
1. Использовать стандартную команду, которая отправляет значение типа double. Для канала управления выберите значение команды «Выполнить», а в формуле должно быть число double, примерно так: BitConverter.ToDouble(new byte[] { 0x00, 0x00, 0x01 и так 8 байт})Вам Cmd в формуле вообще не нужно, потому что Вы отправляете константу всё время.
2. Использовать Модуль автоматического управления. По триггеру на стандартную команду нужно отправить бинарную команду.
Для быстрого решения вопросов рекомендую подписаться на Расширенную поддержку.
21.09.2017 в 13:07 #7359skoda_rapid2017
УчастникСпасибо, попробую по варианту .
-
Ответ изменён 8 лет, 11 месяцев назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.