想着自己做一个上位机,用labview的话还要装软件和驱动,用python装一个解释器就ok了比较省事,这个只是个dome!刚学python三个小时!若有错误请见谅,请指导,谢谢!代码如下!
import time
from socket import *
from threading import Thread
from tkinter import * # 导入tkinter文件库
from tkinter import Frame # 库文件入口
# UdpSocket = None
AddrIP = '192.168.0.10'
AddrPort = 50000
# ------------------------------ Send() ----------------------------- #
def SendData():
while True:
Data = "这是UDP发送数据!"
UdpSocket.sendto(Data.encode('gb2312'), (AddrIP, AddrPort))
# print(AddrIP, AddrPort)
time.sleep(1)
# ------------------------------ Recv() ----------------------------- #
def RecvfromData():
while True:
global text1
TempData = UdpSocket.recvfrom(1024)
# cur = datetime.datetime.now() # 获取当前系统时间
print("从[%s:%d]接收到了:%s" % (TempData[1][0], TempData[1][1], TempData[0].decode("GB2312")))
text1.insert(END, TempData)
# text1.insert(END, cur)
text1.insert(END, "\n") # INSERT索引表示插入光标当前的位置
text1.see(END) # 跟随Y轴滚动轴向下
time.sleep(0.1)
# ------------------------------ main() ----------------------------- #
def main():
init_window = Tk()
init_window.title('UDP收发检测-下位机控制') # 标题
init_window.geometry("730x400") # UI尺寸 长 * 宽
frame_root = Frame(init_window)
frame_left: Frame = Frame(frame_root)
frame_right = Frame(frame_root)
frame5 = Frame(frame_root)
frame5.pack(side=TOP)
frame6 = Frame(frame_root)
frame6.pack(side=TOP)
global text1, text2
# ------------------------------ 文本设置() ----------------------------- #
text1 = Text(frame5, width=100, height=10, bg='Pink') # 边框颜色
text1.grid(column=0, row=0)
s1 = Scrollbar(text1)
s1.pack(side=RIGHT, fill=Y)
text1 = Text(text1, yscrollcommand=s1.set, wrap='none', width=100, height=10, bg='LightSteelBlue',
font=("华文宋体", 10))
text1.pack(expand=YES, fill=BOTH)
s1.config(command=text1.yview)
text2 = Text(frame6, width=100, height=10, bg='Pink') # 边框颜色
text2.grid(column=0, row=0)
s2 = Scrollbar(text2)
s2.pack(side=RIGHT, fill=Y)
text2 = Text(text2, yscrollcommand=s2.set, wrap='none', width=100, height=10, bg='LightSteelBlue',
font=("华文宋体", 10))
text2.pack(expand=YES, fill=BOTH)
s2.config(command=text2.yview)
# ------------------------------ key() ----------------------------- #
button2 = Button(frame6, text="发送", width=14, height=1, bg='red', activebackground="SlateGray",
justify="left") # 按键2(发送按钮)属性
button2.bind("<Button-1>", lambda event:
UdpSocket.sendto(text2.get("0.0", "end").encode("GB2312"), (AddrIP, AddrPort))) # 给按键2绑定串口发送功能
button2.grid(column=0, row=1, sticky=E) # sticky=E 靠右放置
button3 = Button(frame6, text="自定义", width=14, height=1, bg='green', activebackground="SlateGray",
justify="left") # 按键2(发送按钮)属性
button3.bind("<Button-1>", lambda event:
UdpSocket.sendto("自定义的命令!".encode("GB2312"), (AddrIP, AddrPort))) # 给按键2绑定串口发送功能
button3.grid(column=0, row=2, sticky=E) # column列数 row行数 sticky=E 靠右放置
button3 = Button(frame6, text="清除接收", width=14, height=1, bg='blue', activebackground="SlateGray",
justify="left") # 按键2(发送按钮)属性
button3.bind("<Button-1>", lambda event:
text1.delete('1.0', 'end')) # 给按键2绑定串口发送功能
button3.grid(column=0, row=3, sticky=E) # sticky=E 靠右放置
button4 = Button(frame6, text="清除发送", width=14, height=1, bg='yellow', activebackground="SlateGray",
justify="left") # 按键2(发送按钮)属性
button4.bind("<Button-1>", lambda event:
text2.delete('1.0', 'end')) # 给按键2绑定串口发送功能
button4.grid(column=0, row=4, sticky=E) # sticky=E 靠右放置
global UdpSocket # 全局变量
global TempData # 全局变量
# ------------------------------ UDP配置() ----------------------------- #
UdpSocket = socket(AF_INET, SOCK_DGRAM)
UdpSocket.bind(('', 7788))
ts = Thread(target=SendData)
tr = Thread(target=RecvfromData)
ts.start()
tr.start()
frame_left.pack(side=LEFT)
frame_right.pack(side=RIGHT)
frame_root.pack()
init_window.mainloop()
if __name__ == "__main__":
main()
# ------------------------------ END() ----------------------------- #
# 运行PYTHON代码的这个电脑的IP是对方电脑的远程主机192.168.0.121 端口7788 对应:UdpSocket.bind(('', 7788))
# AddrIP = '192.168.0.10' AddrPort = 50000 为对方电脑的本地主机地址和本地主机端口
# label.grid(row=0, column=2, rowspan=2, columnspan=2,sticky = W + E + N + S, padx = 5, pady = 5) # 合并两行,两列,居中,四周外延5个长度