Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 44

Тема: ПЛК110.60-М + МУ110-6У. Ступеньки на выходе МУ110-6У.

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

    По умолчанию

    Цитата Сообщение от Daedal Посмотреть сообщение
    Сам совет немного выше есть
    смысл был в том, чтоб в ФБ на вход, enable подавать положительный импульс а не держать постоянно TRUE.
    С таймером или без, не так важно, просто он бы давал постоянство в изменении сигнала, если единичные изменения проходят, значит дело не в передаче данных, а в блоке, который формирует пилу, где то там видимо проблема, поставте счетчик, который будет отлавливать знак из разницы текущей отправки от предыдущей, если счетчик начнет прибавлять на спаде или подъеме пилы, значит не верно пила формируется
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  2. #22

    По умолчанию

    Заменил способ работы с портом - сделал через конфигуратор задач - всё хорошо, пила без ступенек!

    Прошу всё-таки подсказать, как работать с портом на языке ST? Или все делают через конфигуратор?
    Может ли работы на ST иметь баг в этой части?

    Спасибо.

  3. #23

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    смысл был в том, чтоб в ФБ на вход, enable подавать положительный импульс а не держать постоянно TRUE.
    С таймером или без, не так важно, просто он бы давал постоянство в изменении сигнала, если единичные изменения проходят, значит дело не в передаче данных, а в блоке, который формирует пилу, где то там видимо проблема, поставте счетчик, который будет отлавливать знак из разницы текущей отправки от предыдущей, если счетчик начнет прибавлять на спаде или подъеме пилы, значит не верно пила формируется
    Пила формируется верно, её я сразу проверил.

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

    По умолчанию

    На картинке я вижу что в модуль приходит пила и к ней плюсом генерация прямоугольных импульсов
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #25

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    На картинке я вижу что в модуль приходит пила и к ней плюсом генерация прямоугольных импульсов
    Это и была проблема. Сейчас прямоугольников нет. Пост №22 не пропустили?

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

    По умолчанию

    Цитата Сообщение от Daedal Посмотреть сообщение
    Это и была проблема. Сейчас прямоугольников нет. Пост №22 не пропустили?
    а я повторяю, разбирайтесь, что подаете на вход функции записи. Через библиотеку всё работает. Научитесь выполнять действия по таймеру, изучите представленные генераторы сигналов в оскат бибке и возможно в util что то есть
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  7. #27

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    а я повторяю, разбирайтесь, что подаете на вход функции записи.
    Я с удовольствием разберусь, если Вы мне поможете.

    Я подаю на вход функции записи чистую пилу - это проверено, в коде это можно увидеть.

    Цитата Сообщение от capzap Посмотреть сообщение
    Через библиотеку всё работает. Научитесь выполнять действия по таймеру
    Таймер работает по прерыванию, его вызов не должен никак влиять на работу основной программы.
    В примерах и документации я нигде не встречал иного.
    В теле прерывания простая вычислительная операция - приращение счётчика.
    Что я тут упускаю?

    Цитата Сообщение от capzap Посмотреть сообщение
    изучите представленные генераторы сигналов в оскат бибке и возможно в util что то есть
    Если делать пилу без библиотек, то обязательно будет баг?

    У меня пример-то простой, счётчик и всё. Зачем тут библиотека?

    Может быть Вы выложите пример куска кода, где реализована работа через библиотеку?

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

    По умолчанию

    Все что передал контроллер в модуль, Вы увидели на своей осциллограмме, если бы не было обмена полностью или частично, не было бы и пилы вовсе
    Выполняя ПОУ в разных задачах, надо усвоить правило, что общую глобальную переменную в одном месте только читают, в другом только записывают
    Библиотека Вам нужна чтоб приобрести опыт, Ваш генератор может себя прекрасно показывать, когда Вы его отдельно тестируете, но в режиме многозадачности могут быть проблемы
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  9. #29

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Все что передал контроллер в модуль, Вы увидели на своей осциллограмме, если бы не было обмена полностью или частично, не было бы и пилы вовсе
    В реальном проекте я значения пилы передаю на ModbusTCP сервер и далее в БД. Оттуда строю график и вижу, что пила чистая.
    Я ведь выложил тестовый проект - в нём нет формирования прямоугольных импульсов.
    Цитата Сообщение от capzap Посмотреть сообщение
    Выполняя ПОУ в разных задачах, надо усвоить правило, что общую глобальную переменную в одном месте только читают, в другом только записывают
    Это мне известно и мною выполняется.
    Цитата Сообщение от capzap Посмотреть сообщение
    Библиотека Вам нужна чтоб приобрести опыт, Ваш генератор может себя прекрасно показывать, когда Вы его отдельно тестируете, но в режиме многозадачности могут быть проблемы
    Я бы не сказал, что у меня нет опыта.

    Я предлагаю всем, у кого опыт есть, посмотреть проект, прикреплённый в первом посте и доработать его до нормальной работы.
    Или выложить правильную настройку из любого другого, своего проекта.

  10. #30

    По умолчанию

    Например, вот, если интересует механизм работы с бибкой
    Код:
    PROGRAM ExModbus
    VAR
    	SendModbus2: MB_WR_SNG_REG;
    	SendModbus4: MB_RD_HOLD_REGS;
    	SendModbus5: MB_WR_REGS;
    	ES: BOOL:= TRUE;
    	TimeOut: TIME:= T#100ms;
    	Buffer: ARRAY[0..255] OF BYTE;
    	ErrorSend2: ARRAY[1..5] OF BYTE;
    	ErrorSend4: ARRAY[1..5] OF BYTE;
    	ErrorSend5: ARRAY[1..5] OF BYTE;
    	Stage: BYTE:= 1;
    	EndSendStored: BOOL;
    	EndSendError: BOOL:= FALSE;
    	HavePause:TON;
    	SpeedPtr: POINTER TO BYTE;
    
    	StartTRV1: BOOL;
    	SetupTRV1: WORD;
    	SuperHeat: WORD;
    	END_VAR
    
    IF ComPortState = 2 THEN
    	IF NOT EndSendStored THEN
    		CASE Stage OF
    			1:	SendModbus4(
    				Enable:= ES,
    				Mode:= MB_RTU,
    				DevAddr:= 1,
    				FirstAddr:= 2530,
    				Quantity:= 1,
    				ComHandle:= Settings.Port,
    				TimeOut:= Timeout,
    				Buffer:= Buffer);
    				IF SendModbus4.Complete THEN
    					EndSendStored:=TRUE;
    					ErrorSend4[1]:= SendModbus4.Exception;
    					IF ErrorSend4[1] = 0 THEN
    						EvpTemp1:= Buffer[0]*256 + Buffer[1];
    						TRV1Alarm:= FALSE;
    					ELSE
    						EvpTemp1:= 16#FFFF;
    						TRV1Alarm:= TRUE;
    						EndSendError:= TRUE;
    						Stage:= 1;
    					END_IF;
    				END_IF;
    			2:	SendModbus4(
    				Enable:= ES,
    				Mode:= MB_RTU,
    				DevAddr:= 1,
    				FirstAddr:= 116,
    				Quantity:= 1,
    				ComHandle:= Settings.Port,
    				TimeOut:= Timeout,
    				Buffer:= Buffer);
    				IF SendModbus4.Complete THEN
    					EndSendStored:=TRUE;
    					ErrorSend4[2]:= SendModbus4.Exception;
    					IF ErrorSend4[2] = 0 THEN
    						StartTRV1:= BYTE_TO_BOOL(Buffer[1] AND 1);
    						TRV1Alarm:= FALSE;
    					ELSE
    						TRV1Alarm:= TRUE;
    						EndSendError:= TRUE;
    						Stage:= 1;
    					END_IF;
    				END_IF;
    			3:	SendModbus4(
    				Enable:= ES,
    				Mode:= MB_RTU,
    				DevAddr:= 1,
    				FirstAddr:= 99,
    				Quantity:= 1,
    				ComHandle:= Settings.Port,
    				TimeOut:= Timeout,
    				Buffer:= Buffer);
    				IF SendModbus4.Complete THEN
    					EndSendStored:=TRUE;
    					ErrorSend4[3]:= SendModbus4.Exception;
    					IF ErrorSend4[3] = 0 THEN
    						SetupTRV1:= Buffer[0]*256 + Buffer[1];
    						TRV1Alarm:= FALSE;
    					ELSE
    						TRV1Alarm:= TRUE;
    						EndSendError:= TRUE;
    						Stage:= 1;
    					END_IF;
    				END_IF;
    			4:	IF StartTRV1 <> StartTRV THEN
    					SendModbus2(
    					Enable:= ES,
    					Mode:= MB_RTU,
    					DevAddr:= 1,
    					RegAddr:= 116,
    					Value:= BOOL_TO_WORD(StartTRV),
    					ComHandle:= Settings.Port,
    					TimeOut:= TimeOut);
    					IF SendModbus2.Complete THEN
    						EndSendStored:=TRUE;
    						ErrorSend2[1]:= SendModbus2.Exception;
    					END_IF;
    				ELSE
    					EndSendStored:= TRUE;
    				END_IF;
    			5:	IF SetupTRV1 <> SetupTRV THEN
    					SendModbus2(
    					Enable:= ES,
    					Mode:= MB_RTU,
    					DevAddr:= 1,
    					RegAddr:= 99,
    					Value:= SetupTRV,
    					ComHandle:= Settings.Port,
    					TimeOut:= TimeOut);
    					IF SendModbus2.Complete THEN
    						EndSendStored:=TRUE;
    						ErrorSend2[2]:= SendModbus2.Exception;
    					END_IF;
    				ELSE
    					EndSendStored:= TRUE;
    				END_IF;
    			6:	SendModbus4(
    				Enable:= ES,
    				Mode:= MB_RTU,
    				DevAddr:= 1,
    				FirstAddr:= 2535,
    				Quantity:= 1,
    				ComHandle:= Settings.Port,
    				TimeOut:= Timeout,
    				Buffer:= Buffer);
    				IF SendModbus4.Complete THEN
    					EndSendStored:=TRUE;
    					ErrorSend4[4]:= SendModbus4.Exception;
    					IF ErrorSend4[4] = 0 THEN
    						SuperHeat:= Buffer[1];
    						TRV1Alarm:= FALSE;
    					ELSE
    						SuperHeat1:= 16#FFFF;
    						EndSendError:= TRUE;
    						Stage:= 1;
    					END_IF;
    				END_IF;
    			7:	SendModbus4(
    				Enable:= ES,
    				Mode:= MB_RTU,
    				DevAddr:= 1,
    				FirstAddr:= 2527,
    				Quantity:= 1,
    				ComHandle:= Settings.Port,
    				TimeOut:= Timeout,
    				Buffer:= Buffer);
    				IF SendModbus4.Complete THEN
    					EndSendStored:=TRUE;
    					ErrorSend4[5]:= SendModbus4.Exception;
    					IF ErrorSend4[5] = 0 THEN
    						SuperHeat1:= SuperHeat*100 + Buffer[1];
    						TRV1Alarm:= FALSE;
    					ELSE
    						SuperHeat1:= 16#FFFF;
    						EndSendError:= TRUE;
    						Stage:= 8;
    					END_IF;
    				END_IF;
    		END_CASE;
    		ES:= FALSE;
    	ELSE
    		IF EndSendError THEN
    			EndSendError:= FALSE;
    			ES:= TRUE;
    			EndSendStored:= FALSE;
    		ELSE
    			HavePause(IN:= EndSendStored,PT:=T#40ms);
    			IF HavePause.Q THEN
    				ES:= TRUE;
    				EndSendStored:= FALSE;
    				IF Stage >= 7 THEN
    					Stage:= 1;
    				ELSE
    					Stage:= Stage+1;
    				END_IF;
    			END_IF;
    		END_IF;
    	END_IF;
    	HavePause(IN:= EndSendStored,PT:=T#40ms);
    END_IF;

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Похожие темы

  1. Ответов: 10
    Последнее сообщение: 05.06.2017, 21:03
  2. ПЛК110 + МУ110-8И
    от PotokU в разделе ПЛК1хх
    Ответов: 17
    Последнее сообщение: 06.02.2017, 22:26
  3. ПЛК110-60 + МУ110-6У
    от kosmas в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 24.02.2015, 14:28
  4. Ответов: 5
    Последнее сообщение: 29.06.2013, 23:04
  5. ПЛК110+МУ110-32Р
    от mayak в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 09.04.2012, 09:05

Ваши права

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