А что Вы ожидаете увидеть?
А что Вы ожидаете увидеть?
изменение времени опроса в ту или иную сторону.
Насколько мне известно, параметр MinCycleLength определяет минимальное время цикла. Более того он дополняет его до указанного значения, если реальное время цикла меньше. Т.е. если MInCycleLength = 1 и некая PLC_PRG исполняется за 0,6 мс, то еще 0,4 мс процессор будет спать. Во время 0,6 мс я включаю и его сервисные операции. Учитывая, что у тестовой программы цикл выполнения был меньше 1 мс, то установка любого MinCycleLength отличного от 0 должна увеличить время опроса.
Вы согласны? Или у Вас другое мнение?
Последний раз редактировалось Спорягин Кирилл; 17.09.2015 в 14:57.
Пока суд да дело, провел интересующие Вас эксперименты.
Привожу данные:
MinCycleLength = 0 СВО = 7
MinCycleLength = 1 СВО = 7
MinCycleLength = 2 СВО = 8
MinCycleLength = 5 СВО = 10
MinCycleLength = 10 СВО = 20
СВО (среднее время опроса 4 байт на 115 Кбод).
Время увеличивается и кратно MinCycleLength, чего и следовало ожидать.
Последний раз редактировалось Спорягин Кирилл; 17.09.2015 в 16:49.
опять же стоит Вам для нас уточнить, как считаете среднее время опроса, возможно на больших циклах добавляется некая паразитная составляющая. Потому что обмен совершенно ге зависит от цикла основной программв, только получение результата лпроса
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Проект опроса прикреплен к посту №46.
смешно, я еду в поезде и этот факт не дает мне предсьавления как организован опрос в Вашем проекте, потому что банально телефон не поддерживает КДС
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
SKV,
я просмотрел. навскидку: применяется CASE. не кавай. при переходе к следующему шагу, шаг выполняется в след цикле, насколько я помню... сейчас попробую разобраться детально. Увидел такие вещи как сканнинг и поллинг. Вы меня заинтересовали, буду изучать Ваш подход. Обратите внимание: в modbus.lib CASE не используются (видимо для ускорения). У меня тоже есть нечто подобное на стадии тестирования. Не могу довести до ума, тк нет контроллера. Могу я попросить попользоваться ПЛК через интернет?))
Последний раз редактировалось spectrum48k; 17.09.2015 в 17:08. Причина: добавил картинко. мои изыскания)
С позволения автора, могу в текстовом виде листинг прислать)))
Вот тут я уже ниасилил....
IF pDisp^.AdressForPooling = Base.Adress THEN
PoolingStat.SecondPoint();
IF GetData THEN AnswerStat.FirstPoint(); END_IF;
pDisp^.GetHoldRegs(
Enable:= GetData,
Mode:= MB_RTU,
DevAddr:= Base.Adress,
FirstAddr:= DataRegister,
Quantity:= RegisterCount,
ComHandle:= pDisp^.Settings.Port,
TimeOut:= TimeOut,
Buffer:= pDisp^.ReciveBuffer);
Указатели в VAR_INPUT можно заменить на внутренние переменные FB в разделе VAR_IN_OUT (это те же указатели в более удобоваримой для этих функций форме, не создают области памяти для себя и не происходит копирования переменных при вызове экземпляра. Поправьте меня, если ошибаюсь)
В принципе без детального изучения... разобрался. Вижу основную проблему быстродействия в CASE. Очередность вызовов диспетчером: диспетчер должен (имхо) не только устанавливать флаг, если время поллинга наступило, но и сразу же осуществлять вызов экземляров фб для записи чтения - для этого модули желательно унифицировать в массив из одноипных FB с массивами регистров внутрях. А массивы уже можно привязать к суказателям на структуры самих модулей в дальнейшем. Я пошел по такому пути.
Последний раз редактировалось spectrum48k; 17.09.2015 в 17:49.