Python-Wie Sie eine struct.pack-Wert, um eine Ganzzahl, würde werden gesendet über die serielle Schnittstelle

Ich bin ein Neuling in python und vor kurzem habe ich eine ähnliche Frage, wie die Konvertierung eines decimal-Werts an eine integer low-byte zuerst, dann high-byte ist hier und ist gelöst aber jetzt habe ich ein problem, da will ich python nehmen einen decimal-Wert aus einer raw_input konvertieren es in ein integer low-byte zuerst, dann high-byte und stecken Sie es in eine 16-bit-Ganzzahl senden Sie es an den seriellen Anschluss an einen servo-controller (devantech sd84). Ich habe enthalten die raw_input in eine Wert-und dann die Ordnung.pack in den anderen Wert dann legte ich den zweiten Wert in das 16-bit-integer-aber bevor das geschieht, python gibt diesen Fehler zurück:

    Traceback (most recent call last):
    File "C:/Users/Pablo/Desktop/kdfkldkfgv", line 28, in <module>
    POS_SERVO = struct.pack('<h', 'posicion')
    error: cannot convert argument to integer

Hier ist der vollständige code:

    # -*- coding: utf-8 -*-
  import serial
  import time
  import struct
  # Para cambiar de Sistema Operativo cambiar puerto 
  #en la siguiente línea: Win COM# linux /dev/ttyS# /dev/ttyUSB#
  # #=un número asignado por tu sistema.
  port='COM3'
  sync='\xAA\xA0\x55'
  SET_SERVO='\x01'
  GET_SERVO='\x02'
  SET_SPEED='\x03'
  SET_MODE='\x04'
  GET_MODE='\x05'
  SET_AD_CNT='\x06' #Controla el número de canales analógicos.
  GET_AD_CNT='\x07' #Devuelve el número de canales analógicos actuales.
  GET_INPUT='\X08' # Devuelve el estado de una entrada.
  GET_ADC='\X09' #Devuelve el valor de un canal analógico.
  GET_VERSION='\x0A' #Devuelve la versión del procesador seleccionado.
  GET_BULK='\x15' #Usado para test en fábriica.
  TEST='\X16' #Usado para test en fábrica.
  ser = serial.Serial(port, baudrate=115200, bytesize=8, parity='N', stopbits=2,timeout=1)

  if ser.isOpen():
print "Estado del puerto: Correcto."
print "Procedo a enviar modo del canal 1 y posiciones del mismo."
posicion = raw_input('Inserta un numero entre 400 y 2200:')
POS_SERVO = struct.pack('<h', 'posicion')
ser.write(sync+SET_MODE+'\x01\x01\x19')
ser.write(sync+SET_SERVO+'\x01\x02'+POS_SERVO)
time.sleep(1.6) 
ser.close
print "Todo el proceso completado correctamente."

   else:
print "El puertito está cerrado"

   print "Hasta Luego :D"

Für das Interesse von Menschen, die den gleichen controler werde ich erklären, dass 16-bit-Ganzzahl, die ersten drei bytes sind sync (\xAA\xA0\x55), dann wird der Typ des Befehls SET_SERVO (position) (\x01), dann wird der Kanal 1-84 für 1 (\x01), dann ein byte-count in diesem Fall 2 (\x02) und die servo-position low-byte und dann das high-byte (POS_SERVO) (z.B. für 1500 \xDC\x05)

Ich weiß nicht, wie es zu lösen, weil es nicht ein argument, in der Tat, es ist ein Wert, und ich weiß nicht, wie zu sagen, dass python.

InformationsquelleAutor Pablo P. | 2012-08-19
Schreibe einen Kommentar