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

Тема: Помогите начинающему пользователю среды програмированния CoDeSys 2.3

  1. #1
    Пользователь Аватар для Fudz
    Регистрация
    03.04.2012
    Адрес
    Харьков
    Сообщений
    63

    По умолчанию Помогите начинающему пользователю среды програмированния CoDeSys 2.3

    Здравствуйте. Возникли трудности с написанием программы. Задача в следующем. есть массив данных количество элементов 52 типа байт. Этот массив отправляется по UDP. Нужно сохранить 200 предыдущих состояний этого пакета данных и сделать так что бы самый старый пакет удалялся когда отправляется самый новый. С формированием массива и отправкой по UDP вроде как бы разобрался, а вот с листингом даже не знаю с какой стороны подойти.

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

    По умолчанию

    ищите библиотеку oscat и в ней посмотрите реализация stack

  3. #3
    Пользователь Аватар для Fudz
    Регистрация
    03.04.2012
    Адрес
    Харьков
    Сообщений
    63

    По умолчанию

    да прикольная идея но там максимальный стек в 32 ячейки в каждую ячейку можно записать данные типа DWORD => на 32 ячейки 128 байт у меня UDP пакет 52байта => я смогу записать всего лишь 2 пакета, а множить стек еще сто раз не хочется. Или можно увеличить количество ячеек???

  4. #4
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Нужен всего-навсего кольцевой буфер, состоящий из двухмерного массива (ARRAY [0..199] OF ARRAY [0..51] OF BYTE), индекса головы и переменной размера.

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

    По умолчанию

    Цитата Сообщение от Fudz Посмотреть сообщение
    да прикольная идея но там максимальный стек в 32 ячейки в каждую ячейку можно записать данные типа DWORD => на 32 ячейки 128 байт у меня UDP пакет 52байта => я смогу записать всего лишь 2 пакета, а множить стек еще сто раз не хочется. Или можно увеличить количество ячеек???
    Я предложил не готовый пример, а посмотреть сам принцип. Размер стека можно увеличить, вместо DWORD использовать структуру из 52 байт. Сложно конечно, но зато отработано. А с массивами, один неверный шаг и плк уйдет в стоп из-за "злой собаки"

  6. #6
    Пользователь Аватар для Fudz
    Регистрация
    03.04.2012
    Адрес
    Харьков
    Сообщений
    63

    По умолчанию

    А не могли бы вы примерно показать как это сделать???

  7. #7
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Что, кольцевой буфер? Пфф...
    Код:
    VAR
    	crbuf, plainbuf: ARRAY[0..199] OF TIME;
    	count, i: DINT;
    END_VAR
    
    (* Запись *)
    crbuf[count MOD 200] := TIME();
    count := count + 1;
    
    (* Чтение *)
    FOR i := 0 TO 199 DO
    	plainbuf[i] := crbuf[(count + i) MOD 200];
    END_FOR

  8. #8
    Пользователь Аватар для Fudz
    Регистрация
    03.04.2012
    Адрес
    Харьков
    Сообщений
    63

    По умолчанию

    Спс за пример )) ноя не о кольцевом буфере, а о ..

    Цитата Сообщение от capzap Посмотреть сообщение
    Размер стека можно увеличить, вместо DWORD использовать структуру из 52 байт.

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

    По умолчанию

    у меня на телефоне не установлена КДС, да если бы была то размер экраны "выбесил" бы
    Пока попытайтесь воссоздать вариант с массивом, единственно надо поправить, чтоб сам DINT обнулился раньше чем закончиться его нумерация, примерно при 2147483599 чтоб следущее стало равно нулю. А то неувязочка выйдет с пропажей данных

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

    По умолчанию

    http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf ищите пункт Пользовательские типы данных, там расписано как создается структура, в FIFO меняете константу на 200, а вместо переменной
    fifo : ARRAY[0..n] OF DWORD;
    пишите
    fifo : ARRAY[0..n] OF STRUC;
    где STRUC это созданная структура из 52 байт, причем каждому байту можно дать запоминающееся имя, а не безликий индекс массива

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

Похожие темы

  1. Помогите начинающему!!!
    от mihej в разделе Трёп (Курилка)
    Ответов: 2
    Последнее сообщение: 25.01.2011, 11:03
  2. помогите начинающему!
    от PASA2010 в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 17.01.2011, 22:02
  3. помогите начинающему
    от Литрович в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 03.03.2010, 15:16
  4. Помогите начинающему!!!
    от Юрий Андреевич в разделе ПЛК1хх
    Ответов: 32
    Последнее сообщение: 14.08.2008, 18:00
  5. помогите начинающему
    от Evghenii в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 12.03.2007, 14:45

Ваши права

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