Показано с 1 по 10 из 10

Тема: Вопрос по примеру работы со счетчиком Меркурий

  1. #1

    По умолчанию Вопрос по примеру работы со счетчиком Меркурий

    Всем привет!

    Разобрался вроде со всем, но вот есть непонятный момент.
    Код:
    			IF rt.Q THEN
    				IF Error3=0 THEN
    					Q_f3:=WORD_TO_REAL(DD3.Out)/100;
    					IF DD3.znak6 THEN
    						Q_f3:=Q_f3*-1;
    					END_IF
    				END_IF
    	
    				DD3(
    				start:= FALSE);
    				Stat:=109;
    			END_IF
    Что конкретно не понятно:
    Код:
    					Q_f3:=WORD_TO_REAL(DD3.Out)/100;
    					IF DD3.znak6 THEN
    						Q_f3:=Q_f3*-1;
    					END_IF
    Выходу FB уже присвоили значение, а потом проверяем знак и меняем его в переменной, которую уже вывели? И так по всему примеру с подобными данными...

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    ничего страшного,это особенность всех ПЛК, входам и выходам значения присваиваются не мгновенно, а двумя словами: в конце цикла( выхода) и в начале цикла (входа)

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ничего страшного,это особенность всех ПЛК, входам и выходам значения присваиваются не мгновенно, а двумя словами: в конце цикла( выхода) и в начале цикла (входа)
    Блин, точно. Извиняюсь.

    Наконец то у меня сегодня появился счетчик. Естественно что сначала ничего не работало, но уже разобрался и данные "поперли".
    Почему не заработало сразу: ошибка в библиотеке mercury.lib и в частности в FB GetParam.
    Было:
    Код:
    	
    	2:
    			WAIT_M (IN := TRUE);
    			DD2(
    				start:=TRUE ,
    				DeviceAdr:= DA,
    				Level:= Level,
    				Code:= ADR(code) ,
    				DeviceNumber:= DN,
    				Timeout:= TM,
    				PollingTime:= TP,
    Стало:
    Код:
    	
    	2:
    			WAIT_M (IN := TRUE);
    			DD2(
    				start:=TRUE ,
    				DeviceAdr:= DA,
    				Level:= Level,
    				Code:= code ,
    				DeviceNumber:= DN,
    				Timeout:= TM,
    				PollingTime:= TP,
    Т.е. в Open_session (DD2) передавался не адрес массива с паролем, а адрес с переменной адреса массива. Ну вы поняли.

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Code: POINTER TO ARRAY [0..5] OF BYTE; здесь указатель на массив и комбинация ADR(code) верная в том случае, если code сам по себе не указатель на массив, а именно массив ARRAY [0..5] OF BYTE. Окно объявлений покажите, где объявлен code

  5. #5

    По умолчанию

    Это понятно. Посмотрите пример PLC110-M + Mercury.pro - там передается именно адрес. Я по нему делал.
    Код:
    	Code: ARRAY [0..5] OF BYTE := 6(1);
    А после Code перед FB GetParam стоит ADR.
    Т.е. по идее пример не рабочий.

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    все правильно там, в разделе объявлений массив, в ФБ GetParam он передается через блок ADR, внутри ФБ GetParam вход объявлен как указатель, так что ошибок в примере нет, что касаеется этой ситуации

  7. #7

    По умолчанию

    Я все это практически без изменений вставил в свой проект. Добавил только чтение даты и времени в GetParam - сделал еще одну функцию. Ну и добавил тайм-аут при тесте связи - выход, если нет ответа в течении 500мс.
    Сейчас попробовал завести ваш пример - не завелся. Только заменил в конфигурации контроллер и в плц_прг адрес счетчика.
    Последний раз редактировалось JIexa21; 07.03.2012 в 14:08.

  8. #8

    По умолчанию

    Нашел еще один косяк.
    В FB модуле Read_Energy_Mass:
    Код:
    	IF NumMass =6 THEN
    		p:=ADR(out4);
    		p^:=otvet[15];
    		p:=ADR(out4)+1;
    		p^:=otvet[16];
    	
    		IF out4=65535 THEN
    			out4:=0;
    		END_IF
    	
    	ELSE
    		out4:=0;
    	END_IF
    А должно быть:
    Код:
    	IF NumMass <> 6 THEN
    Если запрашиваем пофазные значения, то длина 12 байт, а не наоборот...
    Или я что-то где-то не понимаю?
    И еще вопрос: ответы энергий идут размером в DWORD, а у вас всего WORD, т.е. с учетом того что там в ват/час, то переход через ноль будет уже при 65 с копейками киловатт. Не маловато ли?

  9. #9

    По умолчанию

    Обновлена библиотека работы со счетчиками электроэнергии Меркурий.
    Новая версия 3.2.

    Скачать можно тут:
    http://www.owen.ru/forum/showthread.php?t=11279

  10. #10

    По умолчанию

    Цитата Сообщение от JIexa21 Посмотреть сообщение
    Я все это практически без изменений вставил в свой проект. Добавил только чтение даты и времени в GetParam - сделал еще одну функцию. Ну и добавил тайм-аут при тесте связи - выход, если нет ответа в течении 500мс.
    Сейчас попробовал завести ваш пример - не завелся. Только заменил в конфигурации контроллер и в плц_прг адрес счетчика.
    Добрый день, а не подскажите как вы сделали чтение даты и времени!?
    Если можно не скините свой проект по работе с меркурием, ну или часть проекта!?
    Заранее спасибо.

Похожие темы

  1. Проблема с счетчиком
    от kuguar в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 24.02.2011, 21:25
  2. задача с счетчиком си8
    от m01ot в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 26.11.2010, 09:58
  3. Ответов: 2
    Последнее сообщение: 17.02.2009, 15:05
  4. Ответов: 1
    Последнее сообщение: 21.03.2008, 14:17

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •