То есть единственный вариант победить это - работа с портом напрямую
Спасибо большое
Ничего не поделаешь, буду пробовать реализовать
Вид для печати
То есть единственный вариант победить это - работа с портом напрямую
Спасибо большое
Ничего не поделаешь, буду пробовать реализовать
После создания своих функций в секции "Глобальная функция", а в этой секции глобальных функций может быть несколько, обращение к ним из скриптов ничем не отличается от обращения к встроенным функциям.
Для MY_16WRITE(BYTE Adres, WORD Mask)
Аргументы Adres и Mask могут быть константами, регистрами панели или результатом вычислений в текущем скрипте.
Что очень круто наваяли.:)
Изначально ведь нужно было записать всего один регистр командой 0х10. И в этом, частном случае нужно формировать посылку всего из 11 байт. Зачем своя функция для записи больше чем один регистр? По тому, что если регистров больше чем один, то и Writes() будет использовать команду 0х10.
А уж групповая посылка 124 регистров за раз это наверно через чур много.
А в этом фрагменте
Для ссылки 3х команда 0x0f не применимаКод:switch (objType) {
case MODBUS_RTU_REGS_3X:
bSend[1] = 0x0f;
case MODBUS_RTU_REGS_4X:
bSend[1] = 0x10;
default:
return Writes(comID, staID, objType, add1, regs, pRegs); //don't know what to do
}
http://www.owen.ru/forum/attachment....1&d=1397777586
Проще слепить свою универсальную функцию и не мучиться потом
Забавно, что панель записать позволяет в 3х регистры... Убрал досадную оплошность, спасибо.
В панели вроде работает, только не могу проверить обработку ошибок. Использую симулятор слейва PeakHMI http://www.hmisys.com/
Сейчас доведём до идеала :)
Чтобы не ошибиться, в первом регистре успешные попытки связи, во втором все безуспешные, в третьем все таймауты, в четвёртом все ошибки данных, причём второй равен сумме третьего и четвёртого, всё верно?
Увеличить таймаут до десяти секунд, подключить вместо нормального устройства просто терминал и любой ответ заслать
Любой ответ нельзя.
Вложение 14968
ЗЫ. Во вложении описание протокола