2015-11-09 34 views
0

Я снова здесь с новым вопросом; на этот раз о ПЛК.Чтение данных с PLC с библиотекой Delphi и libnodave

Начну с того, что я новичок в ПЛК, и я не видел ни одного из них до тех пор, пока пару месяцев назад. Прошу написать программу, которая считывает из Delphi некоторые данные из PLC Siemens S7-300, чтобы архивировать их в базе данных SQL Server. Я использую библиотеку libnodave.

Программа довольно проста. Я должен проверить немного, и когда он включен, я должен прочитать данные из ПЛК и установить бит. С библиотекой, которую я рассказал о том, что я могу читать и писать без проблем, но данные, которые я должен читать, хранятся в группе байтов (около 60 байт), поэтому я должен прочитать несколько байтов, пропустить некоторые другие и прочитать другие байты. Кроме того, бит, который я должен проверить, находится в конце этой группы байтов.

Итак, я прочитал всю группу байтов. Я поместил данные в группу переменных, а затем проверил бит и, если он включен, я храню данные в базе данных. Для того, чтобы пропустить байты я не должен читать я использую этот вид утверждений:

for i := 1 to 14 do 
    daveGetU8(dc); 
for i := 1 to 6 do 
    daveGetU16(dc); 

Мои вопросы таковы:

  • Существует лучшим способ чтения данных пропуска у меня нет читать?
  • Удобно ли читать всю группу байтов и после проверить бит или лучше сделать два чтения разделенными?

Я говорю об этом, потому что я нашел в Интернете, что для операций чтения требуется некоторое время, поэтому лучше сделать минимальные числа чтения возможными.

Эрос

ответ

1

Связь с ПЛК включает в себя некоторые накладные расходы.

Вы отправляете запрос и через некоторое время получаете ответ. Часто связь осуществляется через последовательную линию с ограниченной пропускной способностью.

Время затем включает в себя:

  • Время отправки запроса
  • Время для PLC реагировать
  • время для передачи ответ

трудно дать определенный ответьте на ваши вопросы, так как мы не знаем, насколько важно время.

В любом случае, опрос байт-флага кажется только разумным путем.

Когда флаг установлен, прочитайте весь блок в одной команде, а затем очистите флаг. Чтение данных на небольших деталях во избежание зазоров, вероятно, занимает больше времени, чем чтение всего блока за раз.

Вы можете сделать математику самостоятельно, так как вы знаете спецификации.

Пример: Допустим, что скорость передачи данных составляет 9600 бод. Это означает примерно 1 байт за миллисекунду времени передачи. Команда для чтения составляет около 10 байтов, а ответ блока - около 70 байтов (при условии, что протокол двоичный). Время задержки ПЛК около 50 мс. Это добавляет 130 мс, тогда как чтение флага добавляет только около 70 мс.

Только вы можете сказать, допустимо ли дополнительное время опроса 70 мс.


Редактировать: В комментарии говорится, что связь через локальные сети на 100+ Мбит/с линии. В этом случае я предлагаю прочитать все данные в одной команде и обработать ее на ПК. С такой пропускной способностью очень мало внимания.

+0

Thanks LU RD. Я закончил ethernet, возможно, 1 Гбит/с и минус со скоростью 100 Мбит/с. – Eros

+0

S7-300 не может обрабатывать 1 Гбит/с. S7-300 имеет порт Profinet (Industrial Ethernet), но это не его основная задача. Вы найдете в S7-1500 гораздо больше возможностей для более высокой нагрузки на связь. Скорость связи зависит от конфигурации ПЛК. Был ли инженер ПЛК зарезервировать достаточные ресурсы в резерве связи в PN-интерфейсе? Каково время цикла OB1 в ПЛК? Это сообщение сделано во время PI/PQ ПЛК или ациклическим. И т.д. и т. Д. – CJD

Смежные вопросы