Связь со мной: 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
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Не могу прокомментировать, и у меня в данный момент нет цели тестировать этот функционал.
Вы можете задать этот вопрос в разделе ТРМ или написать запрос на support@owen.ru
Последний раз редактировалось Евгений Кислов; 16.03.2021 в 14:55.
Связь со мной: 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
Для параметров P.min, P.max, P.nom, i.upr, i.min чтение можно осуществлять через формат с фиксированной точкой REAL_FRM.FIX_BIN, а вот запись необходимо осуществлять используя формат для целых чисел INT_FRM.UINT_FRM.
Структура формата REAL_FRM.FIX_BIN 16 битная:
0-11 - значение без точки.
12-14 бит - десятичный сдвиг точки
15 бит - знак, если 0 - то плюс, 1 - значит минуc
Примеры:
3.1=2#0001_0000_0001_1111
-3.1=2#1001_0000_0001_1111
0,300=2#0011_0001_0010_1100
Проблема крылась в том, что при записи целых положительных чисел биты 12-14 равны 0, тогда в битах 0-11 храниться целое значение. Но алгоритм работает с ошибкой, а при записи с десятичной точкой в битах 12-14 есть значения, т.е. все свелось к принудительной установке хотя бы одной точки после запятой.
Соответственно, для параметров P.min, P.max, P.nom, i.upr, i.min достаточно одной цифры после запятой, и необходимо знать знак числа.
Всем успехов
Код проверен на ТРМ251 v1.10.
Мой пример реализации ниже.
Код:GetReal:OWEN_GET_REAL; SetDint:OWEN_SET_DINT; i_min: // Огр. мин. интеграла IF pribor^[prib_name].oper.StateTask[state].isRead THEN GetReal( Enable:= com_active, Addr:= com_prib.addr[prib_name], AddrLen:=com_prib.addrlen, Name:='i.min' , Index:= 16#FFFF, RealType:= REAL_FRM.FIX_BIN, ComHandle:= hComTrm, TimeOut:=com_prib.TimeOut*T#1MS , Complete=>, Value=> , wTime=> , Error=> ); IF GetReal.Complete OR GetReal.Error<>0 THEN pribor^[prib_name].oper.StateTask[state].error:=SetReal.Error; CASE GetReal.Error OF NoError: pribor^[prib_name].pid.i_min:=GetReal.Value; pribor^[prib_name].oper.StateTask[state].ValReal:=GetReal.Value; state:=StateNoError(state:=state,StateTaskPt:=ADR(pribor^[prib_name].oper.StateTask)); NACK: state:=end_pooling; ELSE state:=StateNoError(state:=state,StateTaskPt:=ADR(pribor^[prib_name].oper.StateTask)); END_CASE GetReal(Enable:=FALSE); END_IF ELSE IF pribor^[prib_name].pid.i_min >-0.001 THEN SetDint.Value:=2#0001_0000_0000_0000; // Положительное число, одна цифра после запятой ELSE SetDint.Value:=2#1001_0000_0000_0000; // Отрицательное число, одна цифра после запятой END_IF SetDint( Enable:= com_active, Addr:= com_prib.addr[prib_name], AddrLen:= com_prib.addrlen, Name:= 'i.min', Index:= 16#FFFF, IntType:=INT_FRM.UINT_FRM, Value:=REAL_TO_DINT(ABS(pribor^[prib_name].pid.i_min*10)) + SetDint.Value, // Сдвиг запятой на 1 знак в право. ComHandle:= hComTrm, TimeOut:= com_prib.TimeOut*T#1MS, Complete=> , Error=> ); IF SetDint.Complete OR SetDint.Error<>0 THEN pribor^[prib_name].oper.StateTask[state].error:=GetDint.Error; CASE SetReal.Error OF NoError: state:=StateNoError(state:=state,StateTaskPt:=ADR(pribor^[prib_name].oper.StateTask)); NACK: state:=end_pooling; ELSE state:=StateNoError(state:=state,StateTaskPt:=ADR(pribor^[prib_name].oper.StateTask)); END_CASE SetDint(Enable:=FALSE); END_IF END_IF
Большое спасибо вам за пример.
Связь со мной: 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
Здравствуйте, коллеги, подскажите, пожалуйста, у меня СПК107, CS3.5.14, модули подхватились отлично по шаблонам, а кастомное модбас ТСР устройство, которое я добавил, валится в ошибку постоянно (восклицательный знак мигает), вроде всё настроил нормально, но открывается соединение, тут же ошибка сокета и дисконект, судя по логам. Есть предположение, что это из-за несоответствия версий устройств кодсиса таргету ПЛК. Где скачать и как правильно установить устройства модбас тср мастер, слэйв и т.д соответствующих версий?соответствующих версий?
Связь со мной: 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
Добрый день. Столкнулся со следующей проблемой: Для обмена по ModBus использую библиотеку OwenCommunication, при перезагрузке ПЛК функциональный блок MB_SerialRequest завершается с ошибкой 12 (WRONG_PARAMETER). Однако, если не перезагружать ПЛК, а только перезалить софт и запустить программу, то все работает корректно, никаких ошибок не возникает. Куда можно копать, чтобы понять в чем проблема?
Связь со мной: 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