 | |
Предыдущие результаты
Выдержка из Manual по этому поводу:
"If the Module OK indicator is: [b:4a3face02a]OK[/b:4a3face02a]
Module Status: [b:4a3face02a]In major fault[/b:4a3face02a]
Recommended Action: [b:4a3face02a]Reboot module. If red reoccurs, replace module[/b:4a3face02a]"
|
Рекомендации производителя следующие:
1) Don't touch the running system без необходимости
2) Ревизии firmware следует актуализировать, т.к. новая ревизия обычно лучше прежней
3) Лучше, чтобы однотипные модули имели идентичные ревизии.
4) Если сомневаетесь, см. п.1 :)
|
Дорогие специалисты
Покритикуйте мое видение в построении программ под pc совместимые контроллеры I-7000.
В данном случае I-7188EX + некоторые модули DI,DO.
Ниже буду описывать только те моменты которые правил руцями.
[b:0fdb64b409]Задачка такая:[/b:0fdb64b409]
- Написать программку управления очень примитивным технологическим процессом;
- Выдавать информацию наверх через ModBus TCP/IP;
[b:0fdb64b409]Мое решение[/b:0fdb64b409]
[b:0fdb64b409]1. Раз ModBus TCP/IP, то я взял скелет xserver подобной прошивки (один из примеров с диска);
2. Объявил чего то:[/b:0fdb64b409]
// Программа пользователя
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;
// и.т.д.
[b:0fdb64b409]3. Реализовал программки:[/b:0fdb64b409]
// Подпрограмма пользователя
void UserSubProg1(int* TBL0)
{
// Тут логика какая-то
}
// Основная программа пользователя
void UserProg(int IN0,int IN1,int* TBL0,int *TimerCounter)
{
// Тут всякие алгоритмы управления тех. процессом
}
[b:0fdb64b409]4. Инициализацию построил в функции UserInit():[/b:0fdb64b409]
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);
}
[b:0fdb64b409]5. В функции UserCount, организовал основной поток -
то что называется циклом выполнения программы пользователя.
В теле встречаются вызовы отдельных функций,
которые я реализовал в других си файлах[/b:0fdb64b409]
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.
ОГРОМНОЕ СПАСИБО !
|
Также из мануала:
[quote:0c5d3cf260]IMPORTANT In the ENI/ENIW, node addresses 45 through 49 are
dedicated for sending messages to any Logix
controllers with integral Ethernet ports. In addition,
when sending messages to a ControlLogix controller
via a 1756-ENBT, the controller MUST be in slot 0 of
the ControlLogix chassis for the message to be
delivered to it.[/quote:0c5d3cf260]
Если у меня в слоте №0 стоит 1756-CNB, а сам контроллер в 4-м, как же быть тогда?
|
Руководство пишет вот что:
[quote:7634072c6a]Error Codes Generated by the ENI
This table shows the error codes that may be generated by the ENI. A
full listing of error codes that may be generated by the Message
Instruction is shown below.
Target node cannot respond because of incorrect command parameters or unsupported command. Possible causes:
· The data size of the message is invalid.
· The data format is incorrect for any of the supported PCCC messages.
· Register parameters are not formatted correctly, or there is not enough data provided.
· RS-232 configuration packet data is not the correct size.
· The Node Address is invalid or out-of-range.
· The distant ENI, controller, or device may not be responding.
· There may be a break in the connection between the ENI devices or controllers.
· BOOTP/DF1 parameter is invalid[/quote:7634072c6a]
Проверили все причины?
|
[quote:69ff232f28="Vladimir_Putin"]...заказной номер панели 3711P-Q12C4A2, данных там немного, попробую угадать где что находится.[/quote:69ff232f28]
Панель Allen-Bradley или ошибка в каталожном номере?
Может панель (PanelViewPlus) 2711P-****, но вместо Q - K, T или B.
Исходный проект есть? Набор файлов или архивный файл (с раширением APA).
Если есть, тогда в RSView ME Studio увидите все данные - это существенное облегчение.
|
Здравствуйте!
Пользователей можно посмотреть в RSView Studio. Открываете проект, внизу будет папочка Users and Groups. Пароли посмотреть Вам не удастся. Изменить пароли можно.
Не понял, что значит "Откуда в панель затягиваются диагностические сообщения"? На русском языке вывести диагностические сообщения не получится.
Желаю удачи!
|
В системном меню панели делаете Load Aplication и выбираете курсором новый, нажимаете LOAD. Запускать проект не надо. Затем заходите в Terminal settings -> Startup Options -> RSvie ME Station Startup -> выбираете Run Current Applications.
Желаю удачи!
|
Панелька - PanelView Plus 700
Проект написан на RSView Studio
Добавил новый проект в панельку (до этого было три)
Теперь в системном меню панели при нажатии кнопки Load Aplication вижу бокс в котором есть 4 проекта (3 старых и новый)
если выбрать курсором новый на нажать RUN то он конечно запускается, но при загрузке панели автоматически стартует старый проект, а хотелось бы новый.
|
Софт дополнительно не нужен никакой, а функционально можно использовать любые из них.
Компания Westermo, вроде бы, больше на слуху.
|
Предыдущие результаты
Ещё результаты |
|
| |
|