owen.pngсо справки начинайте всегда искать причины
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Добрый день знатокам!
Работаю над реализацией функционального блока для взаимодействия с сервоприводом. Сервоприводов будет несколько но не суть.
В проекте использую OwenCommunication обмен данными идет по шине Modbus RS485
На данный момент обмен реализовал через стек, в стек загружаются данные. примерно так:
fbComControl : OCL.COM_Control;
fbSerialRequest : OCL.MB_SerialRequest;
hCom : OCL.CAA.HANDLE;
fbComControl
(
xEnable := TRUE,
udiComPort := 1,
udiBaudRate := 115200,
udiByteSize := 8,
eParity := OCL.COM_PARITY.NONE,
eStopBit := OCL.COM_STOPBIT.ONE,
hCom => hCom
);
fbSerialRequest
(
xExecute := TRUE,
hCom := hCom,
tTimeout := T#100MS,
usiRetry := 3,
xIsAsciiMode:= FALSE,
usiSlaveId := fbAxisDrives[iAxisIndex].usiSlaveId,
eFuncCode := fbAxisDrives[iAxisIndex].stStack.eFuncCode,
uiDataAddr := fbAxisDrives[iAxisIndex].stStack.uiDataAddr,
uiDataCount := fbAxisDrives[iAxisIndex].stStack.uiDataCount,
pData := fbAxisDrives[iAxisIndex].stStack.pData,
szSize := fbAxisDrives[iAxisIndex].stStack.szSize
);
Все в таком виде вполне работоспособно, но!!! Не очень эстетично. Я бы хотел инкапсулировать OCL.MB_SerialRequest; в функциональный блок взаимодействия с устройством. Но в таком случае получается что будет запущено несколько экземпляров OCL.MB_SerialRequest; используя один и тот-же OCL.CAA.HANDLE; для Com-порта.
Допустимо ли такое?
В документации указано что можно запускать до 20 экземпляров в рамках одного цикла работы контроллера. Меня это вполне устроило бы
Заранее признателен за консультацию
Каждый в меру своего понимания работает на себя, а в меру непонимания на того, кто понимает больше!
Добрый день.
Если вы напишите арбитр, который будет контролировать, что в каждый момент времени вызывается только один из экземпляров вашего ФБ - то да.Допустимо ли такое?
RS-485 - это последовательный интерфейс. В каждый момент времени на шине должна осуществляться передача только одной посылки.В документации указано что можно запускать до 20 экземпляров в рамках одного цикла работы контроллера.
Поэтому достаточно объявить один экземпляр ФБ и последовательно вызывать его с разными аргументами (адресами слэйвов, адресами регистров и т.д.).
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Ну вобщем я так и думал что так не будет работать, а жаль. Было бы гораздо красивееЕсли вы напишите арбитр, который будет контролировать, что в каждый момент времени вызывается только один из экземпляров вашего ФБ - то да.
Я же могу в своем ФБ выставлять флаг Com занят/свободен. если свободен, другой экземпляр моего ФБ может начать передачу и выставить флаг Занят до окончатия приема/передачи. Ведь так?
Но все-же как же это в документации правильно интерпретировать?
8.2 Ограничения, связанные с библиотекой CAA AsyncManager
Библиотеки, включающие в себя асинхронно выполняемые функциональные блоки (к таким
библиотекам, например, относятся CAA SerialCom, CAA NetBaseServices, CAA File и др.),
используют в своей реализации библиотеку CAA AsyncManager.
Данная библиотека имеет следующее ограничение: в каждый момент времени (в пределах
одного цикла контроллера) в программе может вызываться не более 20 экземпляров
асинхронно выполняемых функциональных блоков.
Каждый в меру своего понимания работает на себя, а в меру непонимания на того, кто понимает больше!
Безусловно, в своем коде вы можете делать всё, что считаете нужным.Я же могу в своем ФБ выставлять флаг Com занят/свободен. если свободен, другой экземпляр моего ФБ может начать передачу и выставить флаг Занят до окончатия приема/передачи. Ведь так?
Именно так, как написано. В документации этому моменту посвящена целая страница, на которой приведены конкретные примеры.Но все-же как же это в документации правильно интерпретировать?
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Подскажите, с чем может быть связана ошибка? Скриншот делался без подключения к ПЧ, также эта ошибка высвечивается если виртуальным контроллером подключиться к реальному ПЧ и связь установлена (зеленые стрелочки).
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk