This is topic Склеивание Double Word ModBus in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Есть 2 регистра WORD, получаемые по ModBus. Склеенные значения представляют собой количество секунд, прошедшее с 1970 г. Склейку осуществляет канал типа программа, в кот. создано 3 аргумента: 1 и 2 - значения регистров, а 3 - результат, привязаный к каналу Time. Естесственно, значения младшего слова меняются каждую секунду, но программа не пересчитывается, (видимо т.к. значение старшего слова не изменяется в течение долгого времени). Если поставить в качестве старшего слова любое изменяемое значение (то же самое младшее слово), то вызов программы проиходит успешно и знечение изменяется. Как заставить программу пересчитывать значения каждый раз? При привязке к каналу Time к его значению прибавляется 4 часа (видимо часовой пояс). Как отобразить переданное значение?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1) Как у Вас вызывается программа?
Если каналом Call, то ее вызов никак не связан с динамикой изменения аргументов.
2) Поставьте в ГЭ "Календарь" отображать как "Время по Гринвичу"
Posted by Aspect (Участник № / Member № 2995) on :
Программа вызывается именно чере Call. Вот и я думаю что не должен быть связан, однако наблюдаю, что результат вызова не меняется в случае постоянного значения одного из аргументов. Ещё раз. Канал1 читает значение старшего слова, Канал2 читает значение младшего слова. Канал Call-программа принимает Канал1 и Канал2 в качестве аргументов и выдаёт аргумент(результат), например на экран.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Пришлите пожалуйста тестовый примерчик данной ситуации на адрес hotline3@adastra.ru
Posted by Aspect (Участник № / Member № 2995) on :
Отправил
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1) Для обработки дискретных значений в программе необходимо использовать целочисленные аргументы. В Вашем случае для входных аргументов поставьте тип UINT, а для выходного UDINT.
2) Выходное значение канала Call - это не выходной аргумент программы.
Posted by Aspect (Участник № / Member № 2995) on :
Спасибо, действительно помогло.
1)В моём случае я имею два канала HEX16. Как я одному из них сделаю побитовый сдвиг на 16, если размерность этого канала будет 2 байта (UINT)? Поставил UDINT. 2) Я это и не упоминал. Но почему не работало с real? На мой взгляд нужно или сделать приведение типов или защиту от дурака в виде ошибки пользователю.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Предусмотреть все ошибки пользователей невозможно.