Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 03.08.2009, 21:16  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от kos_ua
Что касается адаптации ПО под другие платформы то проблема остаётся в синтаксисе....
Пример: Прерывание таймера 8051 кристала
void TIMER1_INT(void) interrupt 1
{
MByte++;
if ((MByte & 0x01) && !(pFMByte & 0x01)) Time+=1;
if ((MByte & 0x02) && !(pFMByte & 0x02)) Int_T100ms();
if ((MByte & 0x0 && !(pFMByte & 0x0) Int_T1s();
pFMByte=MByte;
}
Заранее спасибо за коментарии.
Для IAR AVR
Код:
#pragma vector= TIMER0_OVF_vect
__interrupt void timer0_ovf(void)
	{
//обработчик прерывания
	}
Для HiTECH PICC 16 уточню и то же выложу
функции для задания разных периодов прерывания выложу попозже
Реклама:
picavr вне форума  
Непрочитано 03.08.2009, 21:25  
Mixer79
Частый гость
 
Регистрация: 22.08.2007
Сообщений: 43
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Mixer79 на пути к лучшему
По умолчанию

Кроме ограничения хода регулятора, можно добавить так же вход инверсии. Если обратную логику работы можно создать путем умножения коэффициента пропорциолналности на -1, то для работы с нормально закрытыми клапанами без инверсии не обойтись.

Про железо, я имел в виду преобразование выхода регулятора в аналоговый сигнал.

Прикрепленный файл: 6934615.zip
Mixer79 вне форума  
Непрочитано 28.08.2009, 12:12  
kos_ua
Прописка
 
Регистрация: 07.07.2005
Сообщений: 111
Сказал спасибо: 2
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
kos_ua на пути к лучшему
По умолчанию

Привет Всем....после небольшой паузы вкладываю продолжения софта ПЛК.
Появился у нас индикатор и кнопочки.
Кнопочки висят на адресах IB0, IB1 (Хинты подскажут).
Для работы с индикатором есть функции записи в буфер индикатора(строки реал интежер), и функция которая передаёт этот буфер в сам индикатор.

Так же попытался сделать что-то типа именованной связи между блоками(чтоб не было много линий)...к сетапу подкладываю демку...Заранее всем спасибо.

Прикрепленный файл: 3599150.rar
kos_ua вне форума  
Непрочитано 28.08.2009, 12:20  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от kos_ua
Привет Всем....после небольшой паузы вкладываю продолжения софта ПЛК.
Привет. А сколько прерываний таймеров и какие периоды для этих таймеров требуются для обслуживания программы. Какие ещё прерывания используются. Готов по свободе поработать над кодом вызова прерываний и програмирования периодов таймеров под IAR AVR & HiTECH PIC16.

Для ТАЙМЕРА 0 мной уже написаны функции:
Код:
/*
	setintovf_tmr0();//пуск прерывания переполнения таймера0
	clrintovf_tmr0();//стоп прерывания переполнения таймера0
	setrising_tmr0();//установка срабатывания таймера0 по фронту
	setfaling_tmr0();//установка срабатывания таймера0 по спаду
	setinternal_tmr0();//HiTECH установка срабатывание таймера0 от внутренненго источника
	setexternal_tmr0();//HiTECH установка срабатывание таймера0 по внешнего источника
	clrflagovf_tmr0();//HiTECH сброс флага переполнения таймера0 (AVR-сброс автоматически)
//загрузка пределителя таймера0 и таймера0 высчитаными, значениями вручную
	load_pretmr0 (unsigned char temp);			//пределителя таймера0 char
	load_tmr0 (unsigned char temp);				//загрузка таймера0 char
//работают быстро,занимают мало места,высчитывают и устанавливают период таймера0 по константе period0tmr0-period7tmr0
	period0_pretmr0 ();//определение и загрузка пределителя таймера0 по period0tmr0 и fclc
	period0_tmr0 ();//определение и загрузка таймера0 по period0tmr0 и fclc
	period1_pretmr0 ();//определение и загрузка пределителя таймера0 по period1tmr0 и fclc
	period1_tmr0 ();//определение и загрузка таймера0 по period1tmr0 и fclc
	period2_pretmr0 ();//определение и загрузка пределителя таймера0 по period2tmr0 и fclc
	period2_tmr0 ();//определение и загрузка таймера0 по period2tmr0 и fclc
	period3_pretmr0 ();//определение и загрузка пределителя таймера0 по period3tmr0 и fclc
	period3_tmr0 ();//определение и загрузка таймера0 по period3tmr0 и fclc
	period4_pretmr0 ();//определение и загрузка пределителя таймера0 по period4tmr0 и fclc
	period4_tmr0 ();//определение и загрузка таймера0 по period4tmr0 и fclc
	period5_pretmr0 ();//определение и загрузка пределителя таймера0 по period5tmr0 и fclc
	period5_tmr0 ();//определение и загрузка таймера0 по period5tmr0 и fclc
	period6_pretmr0 ();//определение и загрузка пределителя таймера0 по period6tmr0 и fclc
	period6_tmr0 ();//определение и загрузка таймера0 по period6tmr0 и fclc
	period7_pretmr0 ();//определение и загрузка пределителя таймера0 по period7tmr0 и fclc
	period7_tmr0 ();//определение и загрузка таймера0 по period7tmr0 и fclc
//работает медленнее,занимает больше места,расчитывает и устанавливать периоды таймера0 по переменной, если функция не вызываются, закоментируйте их для уменьшения места в FLASH
//unsigned char calc_int_pretmr0 (unsigned int period_tmr0);//вычисление и загрузка пределителя таймера0 по UNSIGNED INT period_tmr0 и fclc
//unsigned char calc_int_tmr0 (unsigned int period_tmr0);//вычисление таймера0 по UNSIGNED INT period_tmr0 и fclc
//unsigned char calc_long_pretmr0 (unsigned long period_tmr0);//вычисление и загрузка пределителя таймера0 по UNSIGNED LONG period_tmr0 и fclc
//unsigned char calc_long_tmr0 (unsigned long period_tmr0);//вычисление таймера0 по UNSIGNED LONG period_tmr0 и fclc
*/
picavr вне форума  
Непрочитано 28.08.2009, 12:26  
kos_ua
Прописка
 
Регистрация: 07.07.2005
Сообщений: 111
Сказал спасибо: 2
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
kos_ua на пути к лучшему
По умолчанию

Сообщение от picavr
Сообщение от kos_ua
Привет Всем....после небольшой паузы вкладываю продолжения софта ПЛК.
Привет. А сколько прерываний таймеров и какие периоды для этих таймеров, требуется для обслуживания программы. Какие ещё прерывания используются. Готов по свободе поработать над кодом вызова прерываний и програмирования таймеров под IAR AVR & HiTECH PIC16.
Я использую всего одно прерывание таймера.

void TIMER1_INT(void) interrupt 1
{
MByte++;
if ((MByte & 0x01) && !(pFMByte & 0x01))
Time+=1;

if ((MByte & 0x02) && !(pFMByte & 0x02)) Int_T100ms();
if ((MByte & 0x0 && !(pFMByte & 0x0) Int_T1s();
pFMByte=MByte;
}

В прерывании я увеличиваю переменную Time, она мне нужна как RTC, ей я пользуюсь когда вызываю функцию IEC Timer.

Так же в прерывании таймера вызываются IEC подпрограммы Int_T100ms() и Int_T1s().
Вот в принципе и всё)))

Теперь что касается самих IEC Timers.
Я думаю что вы найдёте легко на них описание в промышленном стандарте. В кратце: существует 4 вида таймеров SP(Формирователь импульса), SE(формирователь удлиненного импульса), SD(задержка на включение), SF(задержка на отключение).
Принцып работы следующий: на вход таймеру даём 1 он записывает по фронту этого сигнала значение RTC и потом берёт и вычитает текущее значение RTC с записанным и сравнивает с заданием на время.
А далее смотрит какой тип таймера(SP SD SE SF) и формирует сигнал на выходе(0 или 1)...вот так)

Последний раз редактировалось mike-y-k; 14.04.2022 в 23:04. Причина: 6.6
kos_ua вне форума  
Непрочитано 28.08.2009, 12:38  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от kos_ua
Я использую всего одно прерывание таймера.
А каков период срабатывания прерывания таймера?
Я имею в виду МОДУЛЬ ТАЙМЕРА в самом микроконтроллере, а не програмные таймеры в вашей прорамме. Что б написать функции задания периода вызова прерываний TIMER1 под AVR и PIC.

Сообщение от kos_ua
Так же в прерывании таймера вызываются IEC подпрограммы Int_T100ms() и Int_T1s().
Вот в принципе и всё)))
Пооонняяяяяяяяялллл.... это ваши внутрение функции обрабатываемые в прерывани таймера.
picavr вне форума  
Непрочитано 28.08.2009, 12:44  
kos_ua
Прописка
 
Регистрация: 07.07.2005
Сообщений: 111
Сказал спасибо: 2
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
kos_ua на пути к лучшему
По умолчанию

Сообщение от picavr
Сообщение от kos_ua
Я использую всего одно прерывание таймера.
Период срабатывания прерывания таймера?

Сообщение от kos_ua
Так же в прерывании таймера вызываются IEC подпрограммы Int_T100ms() и Int_T1s().
Вот в принципе и всё)))
Я так понял это просто задержки програмными циклами на 100 миллисекунд и 1 секунду?
Или задержки отрабатываются по таймеру?
Int_T100ms() и Int_T1s() это простые подпрограммы.
Прерывание по системному таймеру я настроил на 50мс.
То есть каждые 50мс вызывается этот обработчик.
Каждые 50 мс увеличивается RTC.
подпрограмма Int_T100ms() вызывается каждые 100мс
подпрограмма Int_T1s() вызывается каждые 1с.

Можно уменьшить прерывание по таймеру до 10 мс...точнее будет всё работать...но мне пока что это не надо)))...

[quote="picavr"]
Сообщение от kos_ua

Пооонняяяяяяяяялллл.... это ваши внутрение функции обрабатываемые в прерывани таймера.
Да это вызов функций....есть еще функция FreeScan...так вот она вызывается не в теле прерывания таймера а в теле main.

Последний раз редактировалось mike-y-k; 14.04.2022 в 23:05. Причина: 6.6
kos_ua вне форума  
Непрочитано 28.08.2009, 14:27  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от kos_ua
Прерывание по системному таймеру я настроил на 50мс.
Ок. Напишу функции для таймера1 для задания периода и настройки прерывания таймера1 по переполнению.
И вызов прерывания таймера1. Под AVR и PIC/

А порты вы опрашиваете весь сразу.. или побитно?
Т.Е. читаете порт в регист и там отбрабатываете.. то же самое с выводом в порт?
Как это обрабатывается?

Интересуют те функции которые работают с модулями самого МК.

FreeScan... это обработка модулей контролера?
picavr вне форума  
Непрочитано 28.08.2009, 14:57  
kos_ua
Прописка
 
Регистрация: 07.07.2005
Сообщений: 111
Сказал спасибо: 2
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
kos_ua на пути к лучшему
По умолчанию

Сообщение от picavr
Сообщение от kos_ua
Прерывание по системному таймеру я настроил на 50мс.
Ок. Напишу функции для таймера1 для задания периода и настройки прерывания таймера1 по переполнению.
И вызов прерывания таймера1. Под AVR и PIC/

А порты вы опрашиваете весь сразу.. или побитно?
Т.Е. читаете порт в регист и там отбрабатываете.. то же самое с выводом в порт?
Как это обрабатывается?

Интересуют те функции которые работают с модулями самого МК.

FreeScan... это обработка модулей контролера?
FreeScan это подпрограмма.

//-------Функцию main------
void main(void)
{
initialize_system();
Int_OnStart(); // OnStartUp function
while(1)
{
IO_Input(); // Read from input
FreeCycle(); // Free Scan
IO_Output(); // Write to output
}
}

Теперь о функциях IO_Input() и IO_Output()
На данный момент они выглядят вот так:


void IO_Input(void) // Read Data from all modules
{
iI[0]=P1;
}


void IO_Output(void) // Write Data to all modules
{
P3=iQ[0];
}

Для того чтоб их написать надо знать железку к чему пишем
Если смотреть например CoDeSys то у них первое есть конфигуратор железа и второе на основе этого конфигуратора они вызывают функции IO_Output и в параметрах подставляют указатель на область памяти и размер в этой области...
Так что тут наверное надо отдельно вынести в ini фаил код данных функций чтобы каждый мог их для себя модифицировать....а программа просто тупо подключит эти функции как external.
Вот что я думаю по этому поводу.

И еще...если кто знает Делфи то могу скинуть исходник программы...может тогда дела пойдут быстрее)))

ЗЫ....Конечно всем не дам...только тем кто в теме)))

Я тут оптимизировал(подготовил) си код для разных процов...8051 АВР ПИК.

Поэтому выкладываю новую версию.

В итоге что получилось:
1. В теле основной программы находятся только вызовы функций которые мы нарисовали в редакторе.
2. В основной программе подключены два модуля(io.h, function.h).
3. io.h это модуль который надо менять в зависимости от применяемого контроллера и железа. function.h это модуль где лежат все функции которые мы можем использовать в нашем проекте(ПИД таймер счётчик тригер И ИЛИ и тд)
В прикреплённом файле setup.exe и эти два модуля.

Прикрепленный файл: 3715809.rar

Последний раз редактировалось mike-y-k; 14.04.2022 в 23:05. Причина: 6.6
kos_ua вне форума  
Непрочитано 01.09.2009, 14:23  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Создаем ПЛК на базе IEC 61131

Сообщение от kos_ua Посмотреть сообщение
)))
Посмотрите почту, написал вам...
picavr вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Языки программирования IEC-6113-3(FBD, LD, IL и т.) VladG Информация по радиокомпонентам 0 18.08.2009 08:57
Ищу ПЛК (промышленный контроллер) c RS-232 и RS-485... LazarenkoAS2 Делимся опытом 44 19.10.2008 20:27
Графический ЖК индикатор на базе LC7981 Bear-ku Микроконтроллеры, АЦП, память и т.д 1 24.07.2008 08:29
Создаем лабораторный БП с цифровым управлением masterpc Источники питания и свет 60 02.04.2007 06:24
осциллограф на базе ПК SlavaS Измерительное оборудование 61 09.06.2005 20:04


Часовой пояс GMT +4, время: 16:22.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot