Я использую библиотеку под названием BACpypes для связи по сети с ПЛК. Краткая версия здесь заключается в том, что мне нужно запустить приложение BACpypes в своем собственном потоке, а затем выполнить чтение/запись в plc в этом отдельном потоке.Обработчик сигналов принимает (* args), как мне их предоставить?
Для множественного ПЛК, существует цикл обработки, который создает приложение (предоставление адреса PLC IP), выполняет чтения записывает на ПЛК с помощью приложения, убивает приложения, вызвав BACpypes стоп (* арг) из модуля ядра, вызывает соединение в потоке, а затем переходит к следующему ip-адресу в списке, пока мы не начнем заново. Это работает как многие IP-адреса (ПЛК), как у нас, но как только мы вернулись в первый IP-адрес (PLC) снова, я получаю ошибку:
socket.error: [Errno 98] Address already in use
Вот короткий код для моего класс thread, который использует функции stop() и run() из ядра BACpypes.
class BACpypeThread(Thread):
def __init__(self, name):
Thread.__init__(self)
Thread.name = name
def run(self):
run()
def stop(self):
stop()
Похоже, что я неправильно убиваю приложение. Итак, я знаю, что stop (* args) зарегистрирован как обработчик сигналов в соответствии с документами BACpypes. Вот отрывок я вытащил из этой ссылки http://bacpypes.sourceforge.net/modules/core.html
core.stop(*args)
Parameters: args – optional signal handler arguments
This function is called to stop a BACpypes application. It resets the running boolean value. This function also installed as a signal handler responding to the TERM signal so you can stop a background (deamon) process:
$ kill -TERM 12345
Я чувствую, что мне нужно, чтобы обеспечить убийство -ной сигнал, чтобы сделать адрес IP снова доступен. Я не знаю, как это сделать. Вот мой вопрос ...
1) В этом примере 12345 - это номер процесса, который я считаю. Как мне определить этот номер для моего потока?
2) Как только у меня есть номер, как я могу передать сигнал kill -TERM функции остановки? Я просто не знаю, как на самом деле написать эту строку кода. Так что, если кто-то может это объяснить, это будет здорово.
Спасибо за помощь!