ORSSerialPort.send不发送任何内容

我是新手(非常新!!),我很快就开始使自己的UI通过串行端口发送字符串。我设法打开端口并读取/解析传入的流量,但是当发送字符串时,什么也没有发送。

我需要做的是输入sendTextField,然后按SendButton将字符串发送到串行端口。另外,当我打印data(这是我要通过串行端口发送的内容)时,它会打印我尝试发送的字节数(即5个字节)。这不应该是我尝试发送到串行端口的字符串“ Hello”吗?

我正在使用Xcode版本11.2(11B52)和Swift 5。

任何帮助将不胜感激。先感谢您!

这就是我所谓的“发送”功能:

   @IBaction func SendButton(_ sender: Any) {
      let TxData = sendTextField.stringValue
      SFSerialIn.SendSerialData(TxData)      
   }

我的主程序如下:

import ORSSerial
import IOKit
import IOKit.serial


let SFSerialRegexp =
    "(?<SFmode>[A-Z]+),\\s*" + "(?<prox>[0-1]),\\s*"

class SFSerialIn: NSObject,ORSSerialPortDelegate {


    let path = "/dev/cu.usbserial-AI0484S9" 
    let baudRate: Nsnumber = 115200

    var serialPort: ORSSerialPort?
    var delegate: SFSerialDelegate?

    var stringBuffer = ""
    var regex: NSRegularExpression!
    var receivedBufferStart = false

    override init() {
        regex = try! NSRegularExpression(pattern: SFSerialRegexp)
    }

    deinit {
        disconnect()
    }

    func SendSerialData(_ TxData: String){
       let data = Data(TxData.utf8)
       serialPort?.send(data)
       print(TxData)
       print(data)
    }  

    func connect() {
        if let serialPort = ORSSerialPort(path: path) {
            serialPort.baudRate = baudRate
            serialPort.delegate = self
            serialPort.open()
        } else {
            print("Failed to open serial port")
        }
    }

    func disconnect() {
        serialPort?.close()
        print("closing port...")
    }


    func serialPort(_ serialPort: ORSSerialPort,didReceive data: Data) {
        guard let string = String(data: data,encoding: .utf8)
            else {
            return
        }

        stringBuffer += string

        parseBuffer()
    }

    func parseBuffer() {
        let lines = stringBuffer.split { $0.isnewline }

        guard lines.count > 1 else {
            return
        }

        let nextLines = lines[1...].joined()

        if !receivedBufferStart {
            stringBuffer = nextLines
            receivedBufferStart = true
            return
        }

        let line = String(lines[0])
        if let matchResult = regex.firstMatch(in: line,range: NSRange(..<line.endIndex,in: line)) {
            let sensorFrame = SFFrame(matchResult: matchResult,string: line)
            delegate?.receive(sensorFrame: sensorFrame)
            stringBuffer = nextLines
            return
        }

        print("Failed to parse line :(")
        stringBuffer = nextLines
    }

    func serialPort(_ serialPort: ORSSerialPort,didEncounterError error: Error) {
        print("Serial port encountered error",error)
    }

    func serialPortWasOpened(_ serialPort: ORSSerialPort) {
        print("Serial port opened")
    }

    func serialPortWasClosed(_ serialPort: ORSSerialPort) {
        print("Serial port closed")
    }

    func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) {
        print("Serial port was removed from system")
    }
  }

protocol SFSerialDelegate {
    func receive(sensorFrame: SFFrame)
}

extension StringProtocol {
    var data: Data { .init(utf8) }
}
vc2005_liu 回答:ORSSerialPort.send不发送任何内容

在我看来,您似乎并没有将打开的串行端口存储在serialPort实例属性中。因此,当您执行serialPort?.send(data)时,serialPort为nil,而?(可选链接)运算符意味着未调用send()

尝试在打开串行端口后将其存储在您的媒体资源中:

func connect() {
    if let serialPort = ORSSerialPort(path: path) {
        serialPort.baudRate = baudRate
        serialPort.delegate = self
        serialPort.open()
        self.serialPort = serialPort
    } else {
        print("Failed to open serial port")
    }
}
本文链接:https://www.f2er.com/3120573.html

大家都在问