Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Вот пример. Каналы с 69 по 74.
Я пытался по всякому ловить xDone. И по триггеру и по состоянию. Никак не получилось. Но через 30 мс. переменнная обновляется
См. выделенную строку.Код:IF xRdPosReg THEN xSuccess := FALSE; wIntPosPOld := GVL.stServo[1].stRdServo.wP700_IntPosP; GVL.stServo[1].stWrServo.wP700_IntPosP := 4610; GVL.stServo[1].stWrServo.wP765_IntPosDZT := 1000; fbModbusRol(slave := ROL_DORNA, xExecute := xRdPosReg (*!*), iChannelIndex := iCurrentCh); ltTimeOfStart := TargetVars.stRtc.ltSystemTick; xRdPosReg := FALSE; xCount := TRUE; iCntr := iCntr + 1; END_IF
Вы, видимо, считаете, что fbModbusRol выполняется синхронно за один цикл контроллера - поэтому сразу после вызова прерываете его работу.
Но это не так - блок работает асинхронно.
Поэтому нужно дождаться сигнала на выходе xDone и только потом прекращать его работу.
См. демонстрацию:
https://dropmefiles.com/G7YW7
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
я делал и так, и асинхронно. Это остался последний вариант, в котором я считал кол-во циклов, через которое данные запишутся в переменную из канала.
Происходит так - подымаешь флаг execute , xbusy поднимается в true. Данные записываются в переменную (примерно 30мс), a xbusy висит, xdone не поднимается. Пока опять не запишешь в xexecute TRUE. Могу видео записать
Вот как-то так выходит
Я грешу на конфликт каналов с разными параметрами обмена. Или слишком высокая скорость обмена. У Вас в видео 9600, для моих задач этого мало
Пол дня вчера на исследование этой темы ухлопал, и остался на месте.
Сначала я сделал по рекомендации, Ваше видео посмотрел. Неа, ниче не работает
Последний раз редактировалось RomeoVar; 05.07.2021 в 13:03.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk