Я подключил следующим образом GUI (компьютер) -FPGA-PLC.Здесь FPGA работают как сервер для GUI и как клиент для PLC.Графический интерфейс и ПЛК данных отправляются и принимаются через посредник, который является FPGA (здесь FPGA программируется с использованием python) с использованием протокола TCP / IP
Код клиентского сервера, который я написал на той же странице.
sboard.listen() #(Fpga in listening mode)
while True:
print('waiting for connection')
connboard, addrboard = sboard.accept()
print('connecting to {} port {}'.format(*plcserver_address))
splc.connect(plcserver_address) #(Fpga conects with plc as a client)
print('Connected by', addrboard)
try:
while True:
datagui = connboard.recv(1024) #data received form gui tofpga
if datagui:
print('received data from gui{!r}'.format(datagui))
splc.sendall(datagui) #data send from fpga to plc
print('data send')
dataplc = splc.recv(1024)
print('received data from plc{!r}'.format(dataplc))
connboard.sendall(dataplc)
print('finally data is send back to gui')
else:
splc.close()
print('no data from gui')
break
finally:
splc.close()
sboard.close()
print('connection lost')
При первой попытке все работает гладко, но после закрытия соединения из графического интерфейса и повторной попытки соединения с fpga выдает ошибку:
OSError Traceback (most recent call last)
<ipython-input-11-7e789770a359> in <module>()
13 while True:
14 print('waiting for connection')
---> 15 connboard, addrboard = sboard.accept()
16 print('connecting to {} port {}'.format(*plcserver_address))
17 splc.connect(plcserver_address)
/usr/lib/python3.6/socket.py in accept(self)
203 For IP sockets, the address info is a pair (hostaddr, port).
204 """
--> 205 fd, addr = self._accept()
206 # If our type has the SOCK_NONBLOCK flag, we shouldn't pass it onto the
207 # new socket. We do not currently allow passing SOCK_NONBLOCK to
OSError: [Errno 9] Bad file descriptor