Страница 63 из 94 ПерваяПервая ... 1353616263646573 ... ПоследняяПоследняя
Показано с 621 по 630 из 931

Тема: Панели оператора СП270. Вопросы и ответы

  1. #621
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от Kip_i_a Посмотреть сообщение
    Сделаю по вашему образцу
    В моем примере из поста 693, последняя ф.область "Счетчик =0" нестандартная, http://www.owen.ru/forum/showthread....l=1#post163913
    Она нужна только для обнуления индикатора оставшегося времени если кнопка с реверсом бита, и в принципе эта ф.область не нужна
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  2. #622
    Пользователь
    Регистрация
    26.02.2012
    Адрес
    Республика Беларусь, г. Гомель
    Сообщений
    3

    По умолчанию

    Уважаемый, Petera!
    В примере (окно 693) на панели имеются комментарии- как это делается ?
    Заранее спасибо
    В. Д.

  3. #623
    Пользователь
    Регистрация
    26.02.2012
    Адрес
    Республика Беларусь, г. Гомель
    Сообщений
    3

    По умолчанию

    Petera, спасибо за подробный ответ. Теперь все понятно.

  4. #624

    По умолчанию

    немного стыдно признаваться, но вот ответ на мои мучения с MOXA Uport 1150 - цитата из FAQ-ов панели СП270:
    Вопрос:

    При загрузке проекта в панель на экране появляется соответствующая пиктограмма, но строка загрузки не бежит. Через некоторое время конфигуратор выдает ошибку Time-Out. Подключение произвожу через преобразователь Usb-Com специально купленным кабелем КС4 «без переходника». Что я не так делаю?



    Ответ:

    Если версия конфигуратора соответствует (см.выше), причина в системе защиты MS Windows.

    Для работы через преобразователь Usb-Com, необходимо отключить Брандмауэр Windows или другой установленный на данном компьютере файрвол.

    Отключение Брандмауэр: Пуск/Настройка/Панель управления/Брандмауэр Windows.
    Надеюсь, кому-то поможет, мне вот помогло)

  5. #625

    По умолчанию

    Цитата Сообщение от SokolovS Посмотреть сообщение
    Насколько я понимаю, соответствие RS-485 будет обеспечено терминалом при передаче (если порт правильно настроен), а соответствие стандарту Modbus и правильность ответа проверяет уже скрипт.
    Вот новая функция, проверить по-прежнему нет возможности
    Код:
    Код:
    const BYTES_PER_REG = 2;
    const N_RETRIES = 3;
    const RETRY_TIMEOUT = 1000; //ms
    BOOL MWrites(int comID, int staID, int objType, int add1, int regs, void* pRegs) {
    	BYTE bSend[256], bRecieve[256], i;
    	WORD bBytesToSend = 0, bBytesRecieved = 65535;
    	BYTE nRetry = N_RETRIES; //Количество попыток повтора
    	BYTE offset_PSW_log;
    	int CrcSum;
    	
    	switch (comID) {
    	case DOWNLOAD:
    		offset_PSW_log = 60;
    		break;
    	case PLC:
    		offset_PSW_log = 70;
    		break;
    	default:
    		return Writes(comID, staID, objType, add1, regs, pRegs); //don't know what to do
    	}
    	
    	bSend[0] = staID;
    	switch (objType) {
    	case MODBUS_RTU_REGS_4X:
    		bSend[1] = 0x10;
    		break;
    	default:
    		return Writes(comID, staID, objType, add1, regs, pRegs); //don't know what to do
    	}
    	bSend[2] = HIBYTE(add1);
    	bSend[3] = LOBYTE(add1);
    	bSend[4] = HIBYTE(regs);
    	bSend[5] = LOBYTE(regs);
    	bSend[6] = regs * BYTES_PER_REG;
    	bBytesToSend = 7;
    	
    	for (i=0; i<regs*2; i++) {
    		bSend[bBytesToSend] = ((BYTE*)pRegs)[i];
    		bBytesToSend++;
    	}
    	
    	CrcSum = Crc(bSend, bBytesToSend);
    	bSend[bBytesToSend] = LOBYTE(CrcSum);
    	bSend[bBytesToSend + 1] = HIBYTE(CrcSum);
    	bBytesToSend += 2;
    	
    	if (bBytesToSend > 256)
    		return FALSE;
    	
    	Enter(comID);//Захватить порт PLC
    	do {
    		if (bBytesRecieved != 65535) { //Была ошибка связи
    			PSW[offset_PSW_log+1]++;
    			if (bBytesRecieved != 0) // Ошибка данных
    				PSW[offset_PSW_log+3]++;
    			//else //Таймаут
    			//	PSW[offset_PSW_log+2]++;
    		}
    		
    		Send(comID, bSend, bBytesToSend);//Отправить команду
    		bBytesRecieved = Receive(comID, bRecieve, 256, RETRY_TIMEOUT, 6);//Получить ответ (тайм-аут 1000мс)
    	} while ((bBytesRecieved == 0 || //Если данные получены
    		bRecieve[0] != staID || //От правильного устройства
    		bRecieve[1] != bSend[1] || //Правильной функцией
    		MAKEWORD(bRecieve[3], bRecieve[2]) != add1 || // По правильному адресу
    		MAKEWORD(bRecieve[5], bRecieve[4]) != regs || // Правильное количество регистров
    		Crc(bRecieve, bBytesRecieved) != 0 //Контрольная сумма в порядке 
    	) && (nRetry--)>0); //... то всё ок, иначе отнимаем попытку и, если они остались, пытаемся ещё
    	Leave(comID);//Освободить порт
    	
    	if (nRetry>0) { //Если попытки остались, значит, последняя попытка связи была успешной
    		PSW[offset_PSW_log]++;
    		return TRUE;
    	} else
    		return FALSE;
    }
    Добрался потестить. Отправляет запрос с неправильным порядком байт
    Исправил, вот эта штука работоспособна (полный цикл тестирования не проводился):
    Код:
    const BYTES_PER_REG = 2;
    const N_RETRIES = 3;
    const RETRY_TIMEOUT = 1000; //ms
    BOOL MWrites(int comID, int staID, int objType, int add1, int regs, void* pRegs) {
    	BYTE bSend[256], bRecieve[256], i;
    	WORD bBytesToSend = 0, bBytesRecieved = 65535;
    	BYTE nRetry = N_RETRIES; //Количество попыток повтора
    	BYTE offset_PSW_log;
    	int CrcSum;
    	
    	switch (comID) {
    	case DOWNLOAD:
    		offset_PSW_log = 60;
    		break;
    	case PLC:
    		offset_PSW_log = 70;
    		break;
    	default:
    		return Writes(comID, staID, objType, add1, regs, pRegs); //don't know what to do
    	}
    	
    	bSend[0] = staID;
    	switch (objType) {
    	case MODBUS_RTU_REGS_4X:
    		bSend[1] = 0x10;
    		break;
    	default:
    		return Writes(comID, staID, objType, add1, regs, pRegs); //don't know what to do
    	}
    	bSend[2] = HIBYTE(add1);
    	bSend[3] = LOBYTE(add1);
    	bSend[4] = HIBYTE(regs);
    	bSend[5] = LOBYTE(regs);
    	bSend[6] = regs * BYTES_PER_REG;
    	bBytesToSend = 7;
    	
    	for (i=0; i<regs; i++) {
    		bSend[bBytesToSend] = HIBYTE(((WORD*)pRegs)[i]);
    		bBytesToSend++;
    		bSend[bBytesToSend] = LOBYTE(((WORD*)pRegs)[i]);
    		bBytesToSend++;
    	}
    	
    	CrcSum = Crc(bSend, bBytesToSend);
    	bSend[bBytesToSend] = HIBYTE(CrcSum);
    	bSend[bBytesToSend + 1] = LOBYTE(CrcSum);
    	bBytesToSend += 2;
    	
    	if (bBytesToSend > 256)
    		return FALSE;
    	
    	Enter(comID);//Захватить порт PLC
    	do {
    		if (bBytesRecieved != 65535) { //Была ошибка связи
    			PSW[offset_PSW_log+1]++;
    			if (bBytesRecieved != 0) // Ошибка данных
    				PSW[offset_PSW_log+2]++;
    			//else //Таймаут
    			//	PSW[offset_PSW_log+3]++;
    		}
    		
    		Send(comID, bSend, bBytesToSend);//Отправить команду
    		bBytesRecieved = Receive(comID, bRecieve, 256, RETRY_TIMEOUT, 6);//Получить ответ (тайм-аут 1000мс)
    	} while ((bBytesRecieved == 0 || //Если данные получены
    		bRecieve[0] != staID || //От правильного устройства
    		bRecieve[1] != bSend[1] || //Правильной функцией
    		MAKEWORD(bRecieve[3], bRecieve[2]) != add1 || // По правильному адресу
    		MAKEWORD(bRecieve[5], bRecieve[4]) != regs || // Правильное количество регистров
    		Crc(bRecieve, bBytesRecieved) != 0 //Контрольная сумма в порядке 
    	) && (--nRetry)>0); //... то всё ок, иначе отнимаем попытку и, если они остались, пытаемся ещё
    	Leave(comID);//Освободить порт
    	
    	if (nRetry>0) { //Если попытки остались, значит, последняя попытка связи была успешной
    		PSW[offset_PSW_log]++;
    		return TRUE;
    	} else
    		return FALSE;
    }
    Последний раз редактировалось SokolovS; 13.04.2015 в 12:11. Причина: порядок байт контрольной суммы тоже поправил и ещё одну ошибочку тоже

  6. #626
    Пользователь
    Регистрация
    12.03.2014
    Адрес
    Тверь
    Сообщений
    8

    По умолчанию

    Коллеги. Возник такой вопрос:

    Необходимо проверить введенное значение в числовое поле по нажатии кнопки "ENT" на цифровой клавиатуре определенному условию.
    К примеру: Есть несколько цифровых полей ввода, их сумма не должна превышать определенного значения. При превышении должно выдаваться предупреждение.

  7. #627
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от susanin Посмотреть сообщение
    Коллеги. Возник такой вопрос:

    Необходимо проверить введенное значение в числовое поле по нажатии кнопки "ENT" на цифровой клавиатуре определенному условию.
    К примеру: Есть несколько цифровых полей ввода, их сумма не должна превышать определенного значения. При превышении должно выдаваться предупреждение.
    Легко, но чур не на Си, я в нем не силен.
    Сколько переменных в сумме и где предел хранится будет или он константа? Предупреждение какое хотите, окно или лампа или звук?

    ЗЫ. Могу сделать на основе этих наработок
    http://www.owen.ru/forum/showthread....l=1#post146080

    http://www.owen.ru/forum/showthread....l=1#post146061 и посты ниже в той же теме
    Последний раз редактировалось petera; 12.03.2015 в 14:49.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #628
    Пользователь
    Регистрация
    12.03.2014
    Адрес
    Тверь
    Сообщений
    8

    По умолчанию

    Предел константа, храниться в энергонезависимой памяти, к примеру PFW[256]. Количество переменных в сумме 7 (7 полей ввода).

  9. #629
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от susanin Посмотреть сообщение
    Предел константа, храниться в энергонезависимой памяти, к примеру PFW[256]. Количество переменных в сумме 7 (7 полей ввода).
    В общем пока столкнулся с проблемой.
    Если вводить значения с нуля, то работает вот так
    :


    Но когда пытаюсь редактировать значения, то нельзя ввести значения меньше расчетного, даже меньше того, что было в поле ввода
    :

    Только если редактируемое поле вначале обнулить, тогда можно вводить новые значения. Если так устраивает, то могу проект предъявить, если нет, тогда буду думать дальше
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #630
    Пользователь
    Регистрация
    12.03.2014
    Адрес
    Тверь
    Сообщений
    8

    По умолчанию

    Интересное решение. ))
    В принципе приемлемо. Только хотел несколько иного - попробую тоже что нибудь придумать.

    Так как программирование под ОВЕН не основное занятие то все делается медленно ((

Страница 63 из 94 ПерваяПервая ... 1353616263646573 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3197
    Последнее сообщение: 23.04.2024, 13:45
  2. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  3. СПК 110 в качестве Панели оператора
    от GSM73 в разделе СПК1хх
    Ответов: 3
    Последнее сообщение: 14.03.2017, 00:42
  4. СПК 107 в качестве панели оператора
    от Леонид в разделе СПК1хх
    Ответов: 15
    Последнее сообщение: 20.11.2015, 08:17
  5. Ответов: 4
    Последнее сообщение: 27.10.2012, 23:12

Метки этой темы

Ваши права

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