Вход на форум 
В начало e-Mail

Форум

Ресурсы Rockwell

Product Directory

Essential Components

Literature Library

Knowledge Base

Electronic News&Magazines

Блог

Encompass Program

Product Certification

  
Smart Solutions VDT :: Просмотр темы - Способы построения программ под контроллеры ICP CON
 FAQFAQ   ПоискПоиск   ГруппыГруппы   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Способы построения программ под контроллеры ICP CON

 
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Программные средства систем автоматизации
Предыдущая тема :: Следующая тема  
Автор Сообщение
Sasha8111
Новичок
Новичок


Зарегистрирован: Jul 22, 2008
Сообщения: 1
Рейтинг: +0/-0

СообщениеДобавлено: Вт 22 Июл, 2008 13:38:39    Заголовок сообщения: Способы построения программ под контроллеры ICP CON Ответить с цитатой

Дорогие специалисты

Покритикуйте мое видение в построении программ под pc совместимые контроллеры I-7000.
В данном случае I-7188EX + некоторые модули DI,DO.
Ниже буду описывать только те моменты которые правил руцями.

Задачка такая:

- Написать программку управления очень примитивным технологическим процессом;
- Выдавать информацию наверх через ModBus TCP/IP;

Мое решение

1. Раз ModBus TCP/IP, то я взял скелет xserver подобной прошивки (один из примеров с диска);
2. Объявил чего то:


// Программа пользователя
void UserProg(int IN0,int IN1,int* TBL0,int *TimerCounter);
void UserSubProg1(int* TBL0);
// ModBus Таблица
unsigned char far iMemory_DI[100];
unsigned char far iMemory_DO[100];
int far iMemory_AI[100];
int far iMemory_AO[100];
int far iMemoryTemp[100];


int iCounter_Old; // Счетчик
int iUser_Old;
int iTimeSP_Old;
int TC;
int IN7063D_OLD = 0; // Определения фронта
int TBL13_OLD = 0; // Определения фронта
int iRet = 0;
// и.т.д.


3. Реализовал программки:


// Подпрограмма пользователя
void UserSubProg1(int* TBL0)
{
// Тут логика какая-то
}

// Основная программа пользователя
void UserProg(int IN0,int IN1,int* TBL0,int *TimerCounter)
{
// Тут всякие алгоритмы управления тех. процессом
}


4. Инициализацию построил в функции UserInit():


void UserInit(void)
{

int iRet;
int TC = 0;


//======= Begin of Modbus Kernel =======
iRet=InitModbus(iMemory_DI,iMemory_DO,iMemory_AI,iMemory_AO);

// В программе у меня есть данные которые нужно хранить при снятии питания с контроллера

iMemory_AO[9] = ReadNVRAM(0); // Читаем из 1-го байта энергонезависимой памяти
iMemory_AO[11] = ReadNVRAM(1); // Читаем из 2-го байта энергонезависимой памяти
iMemory_AO[13] = ReadNVRAM(2); // Читаем из 3-го байта энергонезависимой памяти


if(iRet==0)
{
// Initial Modbus configuration success.
}
else
{
// Initial Modbus configuration failure.
}
//======= End of Modbus Kernel=======

//Configure the COM port that links to the i-7000 modules.

// Сдесь эта функция нужна для работы монитора printCom
// При ее отсутствии в строку монитора ничего выводится не будет

SetBaudrate(1,115200L);
SetBaudrate(2,9600);
SetDataFormat(2,8,0,1);

Port9999=0; //Disable listening TCP port 9999 to speed up 7188E.

// Добавления таймера, реализующего поток
// Организовываю таймер, который будет вызывать мою програмку
// управления тех. процессом раз в TIMER_USERPROG_SP милисек.

AddUserTimerFunction(UserCount,TIMER_USERPROG_SP);

}



5. В функции UserCount, организовал основной поток -
то что называется циклом выполнения программы пользователя.
В теле встречаются вызовы отдельных функций,
которые я реализовал в других си файлах



void UserCount(void)
{
int IN7063D = 0; // Образ всех входов модуля 7063D
int IN7053_FG = 0; // Образ всех входов модуля 7053_FG
//-------------------------------------------------------------------
// Читаем входной образ
//-------------------------------------------------------------------
IN7063D = ReadDI(2, "02",6000L);
IN7053_FG = ReadDI(2, "04",6000L);
//-------------------------------------------------------------------
// Программа пользователя
//-------------------------------------------------------------------
UserProg(IN7063D,IN7053_FG,iMemory_AO,&TC); // Чего то там передали
//-------------------------------------------------------------------
// Пишем входной образ в таблицу
//-------------------------------------------------------------------
if (IN7063D !=-1) iMemory_AI[0]=IN7063D; // В 0-й элемент массива _АI (по IEC стандарту адрес будет 30001) пишем образ входов
if (IN7053_FG!=-1) iMemory_AI[2]=IN7053_FG; // В 2-й элемент массива _АO (по IEC стандарту адрес будет 30003) пишем образ входов
//-------------------------------------------------------------------
// Пишем выходы + пишем выходной образ в таблицу
//-------------------------------------------------------------------
iRet = WriteDO_6063(2,"02",iMemory_AO[0],6000);
iRet = WriteDO70_4242D4343D(2,"06",iMemory_AO[2],6000);
//-------------------------------------------------------------------
// Сохраняем что-нибудь в энергонезависимую память
//-------------------------------------------------------------------
if(OnChange(iMemory_AO[9], &iCounter_Old)) WriteNVRAM(0,iMemory_AO[9]);
if(OnChange(iMemory_AO[11],&iTimeSP_Old)) WriteNVRAM(1,iMemory_AO[11]);
if(OnChange(iMemory_AO[13],&iUser_Old)) WriteNVRAM(2,iMemory_AO[13]);
}


Вроде бы работает, но только в Demo примерах - существуют разные концепции
проектирования прошивох на основании xserver шаблонов.

Прошу покритиковать вышеприведенный подход: особенно на вызов функции, реализующую алгоритм управления тех. процессом в теле функции UserCount.


ОГРОМНОЕ СПАСИБО !
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Программные средства систем автоматизации Часовой пояс: GMT + 1
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах

Powered by phpBB © 2001, 2005 phpBB Group
Яндекс цитирования

Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany
Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de
Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна.
Открытие страницы: 0.129 секунды
/n