Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Задержка при открытии портов в ПЛК100

  1. #1

    По умолчанию Задержка при открытии портов в ПЛК100

    Использую ПЛК100.
    В самом начале программы прописано открытие двух COM-портов при помощи ФБ из библиотеки ComService.lib.
    Открытие же портов и выдача сигнала готовности происходит через 100-150 сек. после запуска программы.
    Хотелось бы понять, из-за чего происходит эта задержка?

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

    По умолчанию

    как минимум в неправильном написании кода, без проекта разбираться бессмысленно
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  3. #3

    По умолчанию

    В ComService.lib порты открываются приблизительно так:

    Delay := Delay + 1;
    IF (Delay MOD 100) = 0 THEN
    IF Task = OPEN_TSK THEN
    /* открываем
    END_IF
    IF Task = RESET_TSK THEN
    /* настраиваем
    END_IF
    IF Task = CLOSE_TSK THEN
    /* закрываем
    END_IF
    END_IF

    Поэтому порт открывается несколько сот циклов. Два (при условии, что открываются по очереди) это где то 400 циклов (но они могут сначала и закрываться итого 600). И еще, раз в библиотеке написано именно так, то несколько портов все таки стоит открывать по очереди, а не два одновременно (вполне возможно что два сразу будут открывацо дольше).

  4. #4

    По умолчанию

    Проект - во вложении.
    Вложения Вложения

  5. #5

    По умолчанию

    на вскидку как то так:

    (************************************************* ******
    Открываем порт
    ************************************************** *****)

    (*Открываем первый порт - для чтения*)

    (*
    Номер порта (com_number):
    0 - RS-485
    1 - RS-232
    4 - RS-232 DEBUG
    *)
    com_num1:=0;
    (*
    Настройки порта (com_settings):
    byParity - Режим проверки четности 0 = нет, 1 = нечет, 2 = чет
    byStopBits - Кол-во стоповых бит 0 =один, 1=полтора , 2=два
    dwBaudRate - Скорость обмена 4800, 9600, 19200, 38400, 57600, 115200 бит/с.
    dwBufferSize - Не используется должно быть =0
    dwScan - Не используется должно быть =0
    dwTimeout - Не используется должно быть =0
    Port - Номер порта в формате перечисления PORTS (com_number)
    *)
    Settings1.Port:=com_num1;
    Settings1.dwBaudRate:=19200;
    Settings1.byParity:=0;
    Settings1.dwTimeout:=1;
    Settings1.byStopBits:=0;
    Settings1.dwBufferSize:=0;
    Settings1.dwScan:=0;
    (*
    Настройка и открытие порта (COM_SERVICE)
    Пока на выходе Ready не будет сигнал TRUE, стучимся в порт
    Порт открывается с настройками, указанными в com_settings,
    а на вход Task подаются следующие значения:

    0 - Открытие и настройка порта в соответствии с настройками в структуре Settings
    1 - Изменение настроек уже открытого порта на настройки указанные в Settings
    2 - Закрытие порта, номер порта берется из Settings.Port
    *)
    COM_SERVICE1(Enable:= NOT COM_SERVICE1.ready, Settings:=Settings1 , Task:=OPEN_TSK );
    com_ready1 := COM_SERVICE1.ready; (* думаю это лишнее *)


    (*Открываем второй порт - для записи*)
    IF COM_SERVICE1.ready THEN
    (*
    Номер порта (com_number):
    0 - RS-485
    1 - RS-232
    4 - RS-232 DEBUG
    *)
    com_num2:=1;
    (*
    Настройки порта (com_settings):
    byParity - Режим проверки четности 0 = нет, 1 = нечет, 2 = чет
    byStopBits - Кол-во стоповых бит 0 =один, 1=полтора , 2=два
    dwBaudRate - Скорость обмена 4800, 9600, 19200, 38400, 57600, 115200 бит/с.
    dwBufferSize - Не используется должно быть =0
    dwScan - Не используется должно быть =0
    dwTimeout - Не используется должно быть =0
    Port - Номер порта в формате перечисления PORTS (com_number)
    *)
    Settings2.Port:=com_num2;
    Settings2.dwBaudRate:=19200;
    Settings2.byParity:=0;
    Settings2.dwTimeout:=1;
    Settings2.byStopBits:=0;
    Settings2.dwBufferSize:=0;
    Settings2.dwScan:=0;
    (*
    Настройка и открытие порта (COM_SERVICE)
    Пока на выходе Ready не будет сигнал TRUE, стучимся в порт
    Порт открывается с настройками, указанными в com_settings,
    а на вход Task подаются следующие значения:

    0 - Открытие и настройка порта в соответствии с настройками в структуре Settings
    1 - Изменение настроек уже открытого порта на настройки указанные в Settings
    2 - Закрытие порта, номер порта берется из Settings.Port
    *)
    COM_SERVICE2(Enable:= NOT COM_SERVICE2.ready , Settings:=Settings2 , Task:=OPEN_TSK );
    com_ready2 := COM_SERVICE2.ready; (* думаю это лишнее *)

    END_IF

    Trans1 := COM_SERVICE1.ready AND COM_SERVICE2.ready;

  6. #6

    По умолчанию

    Спасибо, lazy! Теперь открытие портов происходит примерно через 30 секунд.

    Хотелось бы понимать, для чего в библиотеке ComService.lib сделана такая задержка?
    Может быть, лучше использовать стандартную библиотеку SysLibCom.lib непосредственно?

  7. #7

    По умолчанию

    Ну это к разработчикам, вероятно, накладные расходы... Еще... У вас минимальное время цикла 50ms. Его можно уменьшить но так чтобы бит %IX8.4 "CPU is overloaded, optimize your programm or increase PLC cycle" в модуле статистики не загорался в TRUE. Вполне возможно порты станут открывацо еще быстрее. Это можно сделать здесь: Конфигурация ПЛК -> PLC100.R -> параметры модуля -> MinCycleLenght ms -> столбец "Значение".
    Последний раз редактировалось lazy; 17.11.2014 в 16:18.

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

    По умолчанию

    ComService.lib это всего лишь тюнинг для SysLibCom.lib, пробуйте на прямую если разумения хватит
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  9. #9

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    Ну это к разработчикам, вероятно, накладные расходы... Еще... У вас минимальное время цикла 50ms. Его можно уменьшить но так чтобы бит %IX8.4 "CPU is overloaded, optimize your programm or increase PLC cycle" в модуле статистики не загорался в TRUE. Вполне возможно порты станут открывацо еще быстрее. Это можно сделать здесь: Конфигурация ПЛК -> PLC100.R -> параметры модуля -> MinCycleLenght ms -> столбец "Значение".
    Да, уже было такое. Увеличил время цикла.

  10. #10

    По умолчанию

    Я думаю 5-10ms вполне, для такой задачи. Открывацо станут за 3-6 сек )

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ошибка при открытии проекта
    от Сергей Ерёмин в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 15.05.2014, 18:44
  2. Ответов: 5
    Последнее сообщение: 20.12.2011, 13:19
  3. Права доступа при открытии тренда
    от mkv в разделе Master SCADA
    Ответов: 7
    Последнее сообщение: 01.12.2011, 20:31
  4. CoDeSys HMI ругается при открытии проэкта
    от niklud19511 в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 11.10.2011, 08:27
  5. Сброс часов при открытии plc-browser
    от Антон в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 21.01.2008, 13:29

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

Ваши права

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