This is topic Склеивание Double Word ModBus in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/000409.html

Posted by Aspect (Участник № / Member № 2995) on :
 
Есть 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 :
 
Предусмотреть все ошибки пользователей невозможно.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2