Связь со мной: 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
Связь со мной: 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
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 экземпляров в рамках одного цикла работы контроллера.
Поэтому достаточно объявить один экземпляр ФБ и последовательно вызывать его с разными аргументами (адресами слэйвов, адресами регистров и т.д.).
Связь со мной: 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