Исходные данные:

1) Имеется промышленный контроллер. В нем 50кБ рабочей памяти (аналог RAM) и 4Мб внешней памяти (аналог ROM).

2) К контроллеру подключен некий аналоговый датчик, данные с которого должны сохраняться каждых 100мс в ячейку памяти в массиве находящемся в рабочей памяти, при достижении конца массива запись начинается с начала массива (при условиях о которых дальше). Размер одной записи 14 байт (значение сигнала - 4 байта, значение доп. - 4 байта, таймстамп - 6 байт)

3) Приложение на компьютере должно читать данные с рабочей памяти контроллера пачками не более PDU 190 байт и складывать в свою базу данных, также строить график. После вычитывания контроллер должен путем записи в рабочую память контроллера сигнализировать какие записи он уже вычитал.

4) В идеальном случае указатель чтения контроллером бежит рывками за указателем логирования. В случае же когда связь между контроллером и приложением обрывается, указатель чтения останавливается и при достижении определенного расстояния между указателями программа контроллера должна начать сохранять данные во внешнюю память, но на так как писать прямо во внешнюю память сразу нельзя, необходимо использовать функцию перемещения области памяти из рабочей памяти во внешнюю. Область которая подлежит перемещению во внешнюю память не должна поддаваться записи на время перемещения. Таким образом запись ведется до окончания всей памяти (и внешней и внутренней), после чего прекращается, пока не будет восстановлена связь с ПК.

5) Когда связь с ПК восстановлена необходимо начать процесс чтения данных в порядке в котором они были сохранены. Обратный алгоритм перемещения соответственно - копировать область памяти из внешней памяти в рабочую а оттуда вычитать приложением. Параллельно может начаться процесс записи в рабочую область новых значений.

Что необходимо:

Для вышеописанного процесса нужен алгоритм и/или псевдокод. Особенно важно подробно описать процессы "жонглирования" памятью и структуры указателей чтения/записи.

В дальнейшем, возможно, и программу для ПК закажу (предварительно C#). Библиотеки для связи с пром контроллером есть. Но это это уже смотря как пойдет первая часть с контроллером.

10 лет назад
Rebornavt
36 лет
14 лет в сервисе
Был
10 лет назад

Заявки фрилансеров

Нет заявок фрилансеров