PDA

Просмотр полной версии : Передача REAL из СПК107 в lectus через ADAM-4520



Jimmo
31.03.2015, 14:59
Приветствую всех!

Коротко суть:
имею на руках контроллер СПК107, ПО для него написано в украине. Использовался структурированный текст (ST).

Через разъем COM1 СПК подключен к первичному устройству и считывает с него данные посредством протокола MODBUS RTU. Поставлена задача подключить СПК через COM2 с помощью преобразователя ADAM-4520 к COM порту компьютера для передачи переменных в Lectus OPC.

Переменные INT передать понял как настроить, а вот с REAL не пойму как справиться. На форуме есть похожие темы, и там этот вопрос разбирали, в частности предлагается импортировать в проект конвертер, но он в мою версию CDS 3.5 SP4 Patch 4 не импортируется. Почитав несколько тем на форуме я понял, что не хватает опыта понять суть предлагаемых альтернативных решений (просто нет понятной разжеванной инструкции или работающего примера) и поэтому решился поднять этот вопрос еще раз.

Значит, собственно, вопрос, как поделить REAL на два ворда и в Lectus собрать обратно? Нужен конкретный пример или внятное описание. Буду премного благодарен!!!

P.S. Варианты умножать на 100, 1000 не подходят, ибо количество знаков после запятой варьируется на некоторых переменных, также не годится вариант резать до INT, ибо просто не хватает байт чтоб уместить число в 6-7 знаков до запятой.

petera
31.03.2015, 16:14
Значит, собственно, вопрос, как поделить REAL на два ворда и в Lectus собрать обратно? Нужен конкретный пример или внятное описание. Буду премного благодарен!!!

P.S. Варианты умножать на 100, 1000 не подходят, ибо количество знаков после запятой варьируется на некоторых переменных, также не годится вариант резать до INT, ибо просто не хватает байт чтоб уместить число в 6-7 знаков до запятой.
поделить REAL на два ворда:

VAR
pt: POINTER TO WORD;
a:REAL;
W1: WORD;
W2: WORD;
END_VAR
pt:=ADR(a);
W1:=pt^;
pt:=pt+2;
W2:=pt^;


Порядок WORD по вкусу

Jimmo
01.04.2015, 14:44
Адаптировал алгоритм в украинский проект, все скомпилировалось и трансляция данных на COM порт идет, НО! Lectus ни с какими настройками не читает их. Провозившись с настройками полдня плюнул и сымитировал все то же самое в чистом проекте и, О ЧУДО!, побежали данные в OPC. Огромное спасибо petеra за подсказку.

Теперь остается понять, кроме настроек порта что еще мешать может в украинском проекте передаче данных. Ведь настройки абсолютно идентичные, соединения не меняются, только сам проект перезаливаю.

Знающие люди, подскажите, что может мешать передаче данных?

Кстати, меня удивило то обстоятельство, что Lectus читает данные функцией 04, ведь в инструкции ModBus_VS_CODESYS_V35.pdf написано, что с входными регистрами работает ф-я 03 для чтения и 16 для записи, кстати писать пока не пробовал, тут ведь тоже наверняка будут ньюансы...