Не путайте, скорость обмена по сети 115200кбит/с это не одно и тоже, что количество операций в секунду у процессора плк100. Выполнился Ваш код осталось время на комуникационные дела, вот за это время микросхема должна принать последовательно определенное количество байт, каждый пришедший разряд, сместить, чтоб освободить место для вновь пришедшего, таким образом превратив последовательный код в параллельный, с ним то уже и может работать основной процессор. И если этого времени не хватает, начинается новый цикл, то из-за низкой приоритетности принятые данные просто теряются и полноценного обмена не происходит
Но следую этой логике, имея минленцикл=1мs, и при этом тупо задерживая цикл эдак на 100..200мс - обмен будет невозможен вообще. Однако же этого нет. Обмен через порт - без проблем. Значит прерывания ?
прибдизительно можно расчитать, сколько тактов процессора требуется, чтоб наполнить буфер данными, преобразовать их в параллельный код, будь это за основным циклом или в прерываниях, совершенно одинаково, в любом случае это как то завязано на минимальный цикл, может в прошивке, но прошивка то одна на всю сотую серию, меняются только таргеты, а у разных плк свое время для UNM получается
Все-таки за циклом или прерывания - существенная разница. В 2 случае - на обмен длина цикла не имеет влияния.
мы все же имеем дело с плк, прерывания прерываниями, но в начале цикла грузится "образ" входных данных и если syslibcom асинхронно работает, то unm берет сразу и если на этот момент приемник порта не готов выдать информацию, например не хватило сдвинуть еще одну единицу,то и наступает сбой всей программы, возможно в более поздних версиях поднят приоритет прерывания для обращения к порту, поэтому там хватает 5мс, а на 100-ом у менея начинало работать только с 9мс
Не надо рассчитывать такты процессора, обмен на низком уровне осуществляется аппаратно, даже контроллеры предыдущего класса - AVR Atmega имеют по нескольку аппаратных UART
На память - в ПЛК стоит подобный процессор ARM9: http://www.atmel.com/devices/SAM9N12.aspx
UART помещает данные в буфер FIFO, а задача процессора - считывать время от времени, например по прерыванию и не допустить переполнения буфера.
однако все же интересна взаимосвязь увеличения длительности цикла и устранением ошибок в работе библиотеки СМС
Последний раз редактировалось Загнетов; 23.09.2012 в 22:28.
я Вам об этом с самого начала и толковал, вот это считывание время от времени происходит чаще чем того требуется микросхеме порта, а увеличив мин.время цикла плк в конце концов получает принятую корректную инфу, как уже ранее писал Валенок, в syslibcom этого не замечается, потому что в ней можно дождаться полноценных данных и через цикл
Какая жесть. У меня обмен работает с любым циклом - хоть 1мс...хватает 5мс, а на 100-ом.. начинало работать только с 9мс
А какая разница - как часто обращаться к буферу ? Нет данных - вернул 0 штук байт. В следующем цикле может что появится. Или имеется ввиду что обязательно нужно весь ответ получить за раз ?
Последний раз редактировалось Валенок; 23.09.2012 в 22:39.