实时绘制传入的TCP数据(过滤出字符串?)

时间:2018-08-22 21:57:30

标签: python matplotlib plot tkinter tcp

我正在尝试绘制通过TCP通过仪器输入的数据值对。 我可以成功接收这些值并将其打印到我的UI,但是似乎无法弄清楚如何在接收到这些值时动态地绘制它们。我已经使用了几个图形库和动画,但是主要的问题似乎是过滤掉字符串标签和不需要的字符,因此我只能绘制接收到的浮点值。

这是我的代码:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #s.settimeout(10)
    s.connect((TCP_IP, TCP_PORT))
    s.sendall(MESSAGE)
    #s.shutdown(socket.SHUT_WR)

    s.setblocking(0) # set port to nonblocking

    begin=time.time()     


    while(1):
      if loop == 15:
        text1.insert(END, "Stopped Recieving Continious Data... Press SEND to continue recieving data \n")
        text1.insert(END, " To Stop Continious Transimisson, SEND *** 0")
        text1.see("end")
        break;
    if logData and time.time()-begin > timeout:
        #print("in if 1")
        break
    elif time.time()-begin > timeout*2:
        #print("in if 2")
        break
    try:    
        logData = s.recv(BUFFER_SIZE).strip('\t\r\n')
        f.write(logData)
        f.write('\n')
        if logData:
            udpData(logData) #prints to UI
            print(repr(logData))
            begin=time.time()
            loop = loop + 1
        else:
            time.sleep(0.1)
    except:
        pass

    # perform filtering of strings here or within while loop try?
    # x = logData

    #plt.plot(x, color = 'red', marker = 'o', linestyle = 'dashed', linewidth = 2)
    #plt.show()

通过在用户界面中按下发送消息按钮可激活此功能,并成功接收数据并打印并写入文件。当我发送一条命令给我这样的一对值时,我将如何解释数据和绘图:

    CCT 1
    Conc1: 1004.5    Conc2: 3003.2
    Conc1: 567.4     Conc2: 4034.2
    ...              ...

在Conc1 :、值和Conc2之后,似乎还有一个\ t字符。

感谢您的任何输入或帮助:)

也已经编写了使用文本文件数据的绘图功能,但是字符串在上面的文件中,并且我的动画函数无法正确解析它们,但是主要问题是这样做,因为我释放数据而不是从文本文件中释放数据写给。 :

    def animate(i):
       xs = []
       ys = []
      with open("C:\\Users\\aeros\\Desktop\\output6.txt") as graph_data:
          for line in graph_data:
                x, y = line.split(" ")
                xs.append(x)
                ys.append(y)

 ax1.clear()
 ax1.plot(xs, ys)

1 个答案:

答案 0 :(得分:0)

由于您不会向我们展示完整的示例,因此我所能做的就是向您展示我身边有一个示例,希望您可以适应它。

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import requests

URL = 'https://poloniex.com/public?command=returnTicker'

def poloapi():
    """get a single datapoint
    replace this with your code that returns a single datapoint"""
    data = requests.get(URL).json()
    return float(data['ETH_BCH']['highestBid'])

def animate(i):
    ydata.append(poloapi())
    line.set_data(range(len(ydata)), ydata)
    plt.ylim(min(ydata), max(ydata))
    plt.xlim(0, len(ydata))
    return line,

ydata = [poloapi()]
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
line, = ax1.plot(ydata, marker='o', markersize=10, markerfacecolor='green')
ani = animation.FuncAnimation(fig, animate, interval=30000)
plt.show()