我知道代码不能工作,但它可以阻止我去解释我的问题。 目前,我正在尝试在Windows GUI和作为从机的linux之间建立通信。 Raspi应该控制一些步进电机。我希望他能把事情汇报回来。为此,我试图保持插座打开。任何关于更好的protokoll的想法都欢迎! 我打开一个到Rasberry Pi的tcp连接,并通过它发送一些数据
namespace WpfApp2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private TcpClient tcp;
private delegate void UpdateLogCallBack(string strMessage);
public MainWindow()
{
InitializeComponent();
}
private void _Write(string msg)
{
NetworkStream stream = tcp.GetStream();
Byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
stream.Write(data, 0, data.Length);
}
public void Button_Click(object sender, RoutedEventArgs e)
{
try
{
tcp = new TcpClient(ip_box.Text,Convert.ToInt32(port_box.Text));
Byte[] data = System.Text.Encoding.ASCII.GetBytes("Hallo");
NetworkStream stream = tcp.GetStream();
// Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length);
stream.Close();
tcp.Close();
}
catch(Exception ex)
{
MessageBox.Show("Error");
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
_Write(msg_box.Text);
}
private void ip_box_TextChanged(object sender, TextChangedEventArgs e)
{
}
private void msg_box_TextChanged(object sender, TextChangedEventArgs e)
{
}
}
}
当我按下按钮时,它就崩溃了。我如何设置连接并访问它。对服务器部分的一些帮助也会很有帮助。遗憾的是,我不得不用python编写。 以下是我目前的想法:
print"Pi is starting..."
import socket
print"Socket importet..."
import time
print"Time importet..."
import RPi.GPIO as GPIO
print"GPIO importet..."
import sys
import thread
print"-----------"
ip = "192.168.178.120"
port = 5335
print"Ip: "+ip
print"Port: "+str(port)
axis_1_to_deg=22
axis_2_to_deg=111
def moveaxis1(a):
x=0
mvstp1=int(a)
if(mvstp1<0):
GPIO.output(stepper1_dir,GPIO.HIGH)
mvstp1=int(mvstp1)* -1
elif(mvstp1>0):
GPIO.output(stepper1_dir,GPIO.LOW)
while x<int(mvstp1):
GPIO.output(stepper1_step,GPIO.LOW)
GPIO.output(stepper1_step,GPIO.HIGH)
x=x+1
time.sleep(0.002)
def moveaxis2(a):
x=0
mvstp2=int(a)
if(mvstp2<0):
GPIO.output(stepper2_dir,GPIO.HIGH)
mvstp2=int(mvstp2)* -1
elif(mvstp2>0):
GPIO.output(stepper2_dir,GPIO.LOW)
while x<int(mvstp2):
GPIO.output(stepper2_step,GPIO.LOW)
GPIO.output(stepper2_step,GPIO.HIGH)
x=x+1
time.sleep(0.00005)
def moveaxis3(a):
x=0
mvstp3=int(a)
if(mvstp3<0):
GPIO.output(stepper3_dir,GPIO.HIGH)
mvstp3=int(mvstp3)* -1
elif(mvstp3>0):
GPIO.output(stepper3_dir,GPIO.LOW)
while x<int(mvstp3):
GPIO.output(stepper3_step,GPIO.LOW)
GPIO.output(stepper3_step,GPIO.HIGH)
x=x+1
time.sleep(0.00005)
print"Thread 3 Declared"
print"Threads Declared"
x=0
stepper1_step=40
stepper2_step=36
stepper3_step=26
stepper1_dir=38
stepper2_dir=32
stepper3_dir=24
calib_1=8
calib_2=10
GPIO.setmode(GPIO.BOARD)
GPIO.setup(calib_1,GPIO.IN)
GPIO.setup(calib_2,GPIO.IN)
GPIO.setup(stepper1_step,GPIO.OUT)
GPIO.setup(stepper1_dir,GPIO.OUT)
GPIO.setup(stepper2_step,GPIO.OUT)
GPIO.setup(stepper2_dir,GPIO.OUT)
GPIO.setup(stepper3_step,GPIO.OUT)
GPIO.setup(stepper3_dir,GPIO.OUT)
GPIO.setmode(GPIO.BOARD)
pos_axis1 = 0
pos_axis2 = 0
pos_axis3 = 0
print " "
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((ip, port))
sock.listen(1)
print("RasPI Server up / awaiting connection...")
connection,client_addres =sock.accept() # buffer size is 1024 bytes
while True:
data = connection.recv(1024)
print "Received message:", data
if(data.startswith( 'stp')):
print "Commands for Steppers are being proccesed"
stp,move_stp1,move_stp2,move_stp3 = data.split(',')
print("Steps Axis 1"+move_stp1)
print("Steps Axis 2"+move_stp2)
print("Steps Axis 3"+move_stp3)
print"------------"
print"Threads are starting..."
in_pos_1=int(move_stp1)*axis_1_to_deg
in_pos_2=int(move_stp2)*axis_2_to_deg
in_pos_3=int(move_stp3)*axis_2_to_deg
z1 = pos_axis1 - in_pos_1
z2 = pos_axis2 - in_pos_2
z3 = pos_axis3 - in_pos_3
thread.start_new_thread(moveaxis1,(z1,))
thread.start_new_thread(moveaxis2,(z2,))
thread.start_new_thread(moveaxis3,(z3,))
pos_axis1 = in_pos_1
pos_axis2 = in_pos_2
pos_axis3 = in_pos_3
print"Position 1: " +str(pos_axis1)
print"Position 2: " +str(pos_axis2)
print"Position 3: " +str(pos_axis3)
elif(data =="calib"):
ready = False
while ready==False:
if(GPIO.input(calib_1)==True):
moveaxis1(1)
else:
ready=True
moveaxis1(-40*axis_1_to_deg)
ready = False
while ready==False:
if(GPIO.input(calib_2)==True):
moveaxis2(1)
else:
ready=True
moveaxis2(-85*axis_2_to_deg)
elif(data=="set_0"):
pos_axis1=0
pos_axis2=0
pos_axis3=0
elif(data=="exit"):
break
print" "
GPIO.cleanup()
sock.close()
print"Fertig"
哈哈,我明白了。。。。 我只是不得不搬走 stream.Close(); tcp.Close(); 这么愚蠢的事
相关问题 更多 >
编程相关推荐