Python Как разделить последовательный порт с двумя разными процессами, используя многопроцессорность - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь использовать многопроцессорность для чтения записи на последовательный порт, используя python 3.6 в Windows и Anaconda Prompt. Процесс 'Logger' открывает первый последовательный порт и отправляет / получает некоторые пакеты данных. после того, как 'Logger' сделан с COM_PORT, я хочу, чтобы он пропустил доступ к процессу Steering для записи его в данные на COM_PORT. Я пробовал Pipe и очередь, но оба из-за одной и той же ошибки,

это мой код:

import sys
sys.path.append('./lib')
import binascii
import numpy   # lib that is used to read .txt file as numerical data
import configparser
import time
import configobj as cf
from multiprocessing import Process, Value, Array,Pipe
import Tools as T
import pandas as pd
import serial    # install pyserial



 # this process will create the Mesh network and start logging process
 def Logger(Pipe,RecievedMsg,Steering_Enable):
 p_output,p_input=Pipe
 COM_Port = serial.Serial(baudrate=115200,parity='N',stopbits=1, 
 bytesize=8,port='COM15',timeout=0.6)# open the COM port
 Status,State=T.Coordinator_Config(COM_Port)
 if Status!=0:
       print("Coordinaator Configuration was not succesfull due to : 
 ",T.StatusCheck(Status),"on",State,"State")
       Steering_Enable.value=-1
 else :
       print("Coordinaator Configuration was...",T.StatusCheck(Status))
       p_output.send(COM_Port)
       Conn.close()
       Steering_Enable.value=1  
return 0



 def Steering(Pipe,Steering_Enable,ShortNetAdd):
     p_output,p_input=Pipe
     while Steering_Enable.value==0:
         if Steering_Enable.value==-1:
            print("Network steering Failed!!")
            return 0
         elif Steering_Enable.value==1:
            print("Network steering started!!")
            COM_Port=p_input.recv()
            print(type(COM_Port))
            print("every 2min network steering is beeing enabled for new d 
            evices to join the network")
            return 0
    return 0    
 #Main part of program, configuring COORDINATOR and than waiting for responds 
 if __name__ == '__main__':
     RecievedMsg= Value('i',0)
     Steering_Enable=Value('i',0)
     ShortNetAdd = Array('i', range(1))
     Conn_in,Conn_out =Pipe()

     Pr1=Process(target=Logger,args= 
     ((Conn_in,Conn_out),RecievedMsg,Steering_Enable))
     Pr2=Process(target=Steering,args= 
     ((Conn_in,Conn_out),Steering_Enable,ShortNetAdd))
     Pr1.start()
     time.sleep(0.1)
     Pr2.start()
     time.sleep(0.1)

ошибка:

ValueError: ctypes objects containing pointers cannot be pickled

как я могу решить это? Спасибо

...