Aspect
Forum Haunter / Завсегдатай форума
Участник № / Member № 2995
отправлено / posted
Есть 2 регистра WORD, получаемые по ModBus. Склеенные значения представляют собой количество секунд, прошедшее с 1970 г. Склейку осуществляет канал типа программа, в кот. создано 3 аргумента: 1 и 2 - значения регистров, а 3 - результат, привязаный к каналу Time. Естесственно, значения младшего слова меняются каждую секунду, но программа не пересчитывается, (видимо т.к. значение старшего слова не изменяется в течение долгого времени). Если поставить в качестве старшего слова любое изменяемое значение (то же самое младшее слово), то вызов программы проиходит успешно и знечение изменяется. Как заставить программу пересчитывать значения каждый раз? При привязке к каналу Time к его значению прибавляется 4 часа (видимо часовой пояс). Как отобразить переданное значение?
Сообщения / Posts 101 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Aspect
Forum Haunter / Завсегдатай форума
Участник № / Member № 2995
отправлено / posted
Программа вызывается именно чере Call. Вот и я думаю что не должен быть связан, однако наблюдаю, что результат вызова не меняется в случае постоянного значения одного из аргументов. Ещё раз. Канал1 читает значение старшего слова, Канал2 читает значение младшего слова. Канал Call-программа принимает Канал1 и Канал2 в качестве аргументов и выдаёт аргумент(результат), например на экран.
Сообщения / Posts 101 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Пришлите пожалуйста тестовый примерчик данной ситуации на адрес hotline3@adastra.ru
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Aspect
Forum Haunter / Завсегдатай форума
Участник № / Member № 2995
отправлено / posted
1) Для обработки дискретных значений в программе необходимо использовать целочисленные аргументы. В Вашем случае для входных аргументов поставьте тип UINT, а для выходного UDINT.
Aspect
Forum Haunter / Завсегдатай форума
Участник № / Member № 2995
отправлено / posted
Спасибо, действительно помогло.
1)В моём случае я имею два канала HEX16. Как я одному из них сделаю побитовый сдвиг на 16, если размерность этого канала будет 2 байта (UINT)? Поставил UDINT. 2) Я это и не упоминал. Но почему не работало с real? На мой взгляд нужно или сделать приведение типов или защиту от дурака в виде ошибки пользователю.
Сообщения / Posts 101 | Из / From: Россия
| IP / IP: IP адрес / IP address |