Просмотр полной версии : СПК107 - Не открывается порт
Друзья, не могу открыть порт Rs485 для связи с ТРМ210.
COM_SERVICE_COM.Opened всегда false.
Ничего не получается, помогите, пожалуйста.
Евгений Кислов
22.08.2018, 15:41
Добрый день. Попробуйте открыть порт именно так, как это демонстрируется в примере.
COM_SERVICE не выполняется синхронно - т.е. вы взводите свой RsComplete до того как порт фактически будет открыт. Можно ориентироваться на выход COM_SERVICE_COM.Ready, но лучше просто скопировать свой код из примера.
Ого, как долго открывается порт!..
Я правильно понимаю, что блок кода с инициализацией и открытием порта в примере будет выполняться каждый цикл программы? Это так и должно быть? Отвечаю сам себе - иначе вроде бы не работает (по крайней мере устал ждать). При инициализации порта сначалачерез полминуты поднимается Opened, далее через десяток секунд Ready.
Ого, какое короткое условие, чтоб сделать запрос, дождаться ответа и закрыть функцию
Евгений Кислов
22.08.2018, 17:18
При инициализации порта сначалачерез полминуты поднимается Opened, далее через десяток секунд Ready.
Какое у вас время цикла задачи, в которой вызывается этот код?
Какое у вас время цикла задачи, в которой вызывается этот код?
300мс. Время инициализации порта привязано к периоду цикла?
Евгений Кислов
22.08.2018, 18:04
Время всего выполняемого в программе привязано к времени цикла. Поставьте 10 мс - и, думаю, все станет работать нормально.
Ого, какое короткое условие, чтоб сделать запрос, дождаться ответа и закрыть функцию
Надо подождать? А как правильно делать задержку (до поднятия TRM_GetReal.Complete)?
UPD: в TRM_GetReal есть же TimeOut. ФБ не ждет его и сразу выходит?
как минимум делать Enable:=FALSE в теле условия TRM_GetReal.Complete
как минимум делать Enable:=FALSE в теле условия TRM_GetReal.Complete
Спасибо!
Приведу рабочий кусок кода здесь:
IF TRM_GetReal.Complete AND TRM_GetReal.Error=0 THEN
T:=TRM_GetReal.Value; // ...и ошибки отсутствуют, то забираем считанное значение
TRM_GetReal(Enable:=FALSE); // завершаем работу блока
END_IF
По примеру из руководства программа не работала, там TRM_GetReal(Enable:=FALSE) после проверки.
Евгений Кислов
22.08.2018, 19:13
В актуальном руководстве такой же код. Возможно, вы смотрели какую-то раннюю версию.
https://ftp.owen.ru/CoDeSys3/11_Documentation/01_SPK/SPK_TRM212owen_v.1.2.pdf
Код в руководстве не такой.
Но после вдумчивого прочтения понял, что надо писать код как в руководстве :) Спасибо!
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot