次の 16 進コード 0x01 0x03 0x00 0x00 0x00 0x01 0x0a 0x84 を、Python と pyserial を使用して現在の電圧の int を返すシリアル デバイス (電圧センサー) に送信する際に問題が発生しています。私のコードは次のとおりです。
import serial
import time
ser = serial.Serial(
port=1,
baudrate=38400,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.EIGHTBITS,
timeout=0,
xonxoff=0,
rtscts=0)
ByteStringToSend = "\x01\x03\x00\x00\x00\x01\x0a\x84"
ser.write(ByteStringToSend)
time.sleep(1)
RecievedData = ""
while ser.inWaiting() > 0:
RecievedData = ser.read(1)
return RecievedData
問題は、Python が各バイトを個別のパケットとして送信しているように見えることです。シリアル モニターからの以下の画像を参照してください。
http://www.centralinfo.com.au/images/SerialOutput.pngで画像を参照してください。
最初の 8 バイト (00 - 07) は、python アプリからのものです (異なるパケットの代替色に注意してください)。次の 8 バイト (08 - 0f) は、動作する同じデータを送信する VB.net アプリです。
私の質問は、上記の 16 進数の 8 バイトを送信して、vb.net アプリに従って 1 つのパケット (Modbus プロトコル) にする方法です。
比較のための VB コード:
' open the serial port if it is closed
If Me.SerialPort1.IsOpen = False Then
Me.SerialPort1.PortName = ComPort
Me.SerialPort1.BaudRate = "38400" 'Set Baud rate
Me.SerialPort1.RtsEnable = False ' Set RTS
Me.SerialPort1.DtrEnable = False ' Set DTR
Me.SerialPort1.Parity = IO.Ports.Parity.None
Me.SerialPort1.StopBits = IO.Ports.StopBits.Two
Me.SerialPort1.DataBits = 8 ' Set data length
Me.SerialPort1.Handshake = Handshake.XOnXOff
Me.SerialPort1.ReadTimeout = 10000
Me.SerialPort1.WriteTimeout = 10000
Me.SerialPort1.Open()
End If
Try
Dim CommandBlock(7) As Byte
CommandBlock(0) = &H1
CommandBlock(1) = &H3
CommandBlock(2) = &H0
CommandBlock(3) = &H0
CommandBlock(4) = &H0
CommandBlock(5) = &H1
CommandBlock(6) = &HA
CommandBlock(7) = &H84
Me.SerialPort1.Write(CommandBlock, 0, CommandBlock.Length)
Thread.Sleep(100)
Return True
Catch ex As Exception
Return False
End Try
お時間をいただきありがとうございますクリス