0

完了したら、一部のモーターの制御変数を変更する機能を有効にしようとしています。コマンドは、ソケットサーバーを介してwifi経由で着信します。コードは次のとおりです。

import SocketServer
import Tkinter as Tk
from Tkinter import *

class MyTCPHandler(SocketServer.BaseRequestHandler):
      def handle(self):
            self.DriveSend = self.request.recv(1024).strip()
            self.SteeringSend = self.request.recv(1024).strip()
            #print("{} wrote:".format(self.client_address[0]))
            #print(self.DriveSend)
            #print(self.SteeringSend)
            #self.request.sendall(self.DriveSend.upper())
            #self.request.sendall(self.SteeringSend.upper())
            return (self.DriveSend,self.SteeringSend)
            MotorControl()

def MotorControl():
      MotorVar = MyTCPHandler()
      MotorVar.handle()
      MotorVar.DriveSend
      MotorVar.SteeringSend
      print(MotorVar.DriveSend)
      print(MotorVar.SteeringSend)
      print('test')

if __name__ == "__main__":
      HOST, PORT = "192.168.2.12", 9999
      server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
      server.serve_forever()

サーバーが常に実行され、着信メッセージを監視していることがわかります。理想的には、クライアント プログラムから新しいメッセージを受信するたびに MotorControl 関数を実行したいと考えています。私はこれを試しましたが、値を出力しません(何かを試して制御する前に、基本的なものでテストする方法です)コメントアウトされたセクションはすべて、サーバー側をチェックするための元のテストからのコードの一部です。すべて正常に動作します。

4

1 に答える 1

0

ここにはいくつか問題があります。まず、関数を呼び出す前に MyTCPHandler メソッドが戻ります。関数のリターンがヒットすると、実行はすぐに戻り、その関数のコードはそれ以上実行されません。

2 番目に、MotorControl 関数を呼び出す MyTCPHandler メソッドがありますが、関数はクラスの新しいインスタンスをインスタンス化します。これには当然、情報セットはありません。代わりに、インスタンスを関数に渡す必要があります。

そう:

class MyTCPHandler(SocketServer.BaseRequestHandler):
      def handle(self):
            self.DriveSend = self.request.recv(1024).strip()
            self.SteeringSend = self.request.recv(1024).strip()
            MotorControl(self)
            return (self.DriveSend,self.SteeringSend)

def MotorControl(motor_var):
      print(motor_var.DriveSend)
      print(motor_var.SteeringSend)
      print('test')

振り返ってみると、とにかくスタンドアロン関数でこれが必要な理由は明確ではありません。おそらく、MotorControl を MyTCPHandler のメソッドにする必要があります。そうすれば、すでに にアクセスできますself

于 2013-08-23T12:49:33.173 に答える