2013-11-13 2 views
1

Я установил соединение с ПЛК Siemens S7-300 (моделируется через PlcSIM) с использованием библиотеки libnodave. Нет проблем с подключением и записью данных в ПЛК. Однако я не могу изменить статус ПЛК с момента запуска/остановки. Я пытаюсь использовать следующие Libnodave методов для таких действий:Libnodave - daveStart() Ошибка при использовании TCP-соединения

int daveStatus = daveStart(dc); 
int daveStatus = daveStop(dc); 

Обе функции вызовов возвращает одинаковую Ошибки: 33794

nodave.c CITES ошибки как следующий:

случае 0x8402 : вернуть «CPU уже в RUN или уже в STOP?»;

Использование функций daveStart() и daveStop() можно рассматривать в примере testS7online.c:

if(doStop) { 
    daveStop(dc); 
} 
if(doRun) { 
    daveStart(dc); 
} 

В примерах старт/стоп функции вызываются только тогда, когда MPI соединения с ПЛК сделаны. Кто-нибудь знает, поддерживаются ли функции запуска/остановки для использования с TCP-соединениями? Если да, то какие-либо предложения относительно того, что может вызвать мою ошибку?

+1

Вы пробовали его с помощью реального ПЛК? Является ли PLCSIM в режиме RUN-P? Иногда симуляция - это просто симуляция ... Вот альтернатива S7 lib: http://snap7.sourceforge.net – avra

+0

Возможно, что в PLCSim не поддерживается изменение состояния ПЛК от запуска до остановки через libnodave. Вы можете определенно изменить статус PLCSim в окне Step7. Но я проведу вашу проблему и ответю более информативно в течение недели. – user3062807

ответ

0

Я только что попробовал dc.start() и dc.stop() с помощью инструмента libnodave 8.4 и NetToPlcSim. Он отлично работал. Возможно, вы не используете инструмент NetToPlcSim, который делает соединение с PLCSim через TCP/IP (это, очевидно, 127.0.0.1 порт 102), следовательно, dc не может даже подключиться. Поэтому, если ваши строки не работают, значит, вы должны делать что-то неправильно.

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