无法从 ORSSerialPort 接收数据

Posted

技术标签:

【中文标题】无法从 ORSSerialPort 接收数据【英文标题】:Cannot receive data from ORSSerialPort 【发布时间】:2021-05-31 21:34:00 【问题描述】:

我正在尝试使用 ORSSerialPort 向串行端口发送和接收数据。

我在这里按照示例进行操作,但我使用的是命令行应用程序: https://github.com/armadsen/ORSSerialPort/tree/master/Examples/ORSSerialPortDemo

我相信我复制/实现了所有必需的方法,但问题是虽然我可以将数据发送到我的串口(我从串口日志中双重确认并且发送成功),但我什么也收不到。

我的代码很简单,如下所示——它只是一个原型,所以代码可能设计得不好。

那么我是否遗漏了无法从串口接收数据的任何内容?任何建议表示赞赏。

import ORSSerial


class SerialController : NSObject, ORSSerialPortDelegate 
        var port : ORSSerialPort?

        init(path: String)
            port = ORSSerialPort(path: path)
            port?.close()
        

        func open()
            port?.baudRate=115200
            port?.delegate=self
            port?.open()
        

        func close()
            port?.delegate=nil
            port?.close()
        

        func SendString(data: String)
            let dataa = Data(data.utf8)
            port?.send(dataa)
        

    func serialPortWasOpened(_ serialPort: ORSSerialPort) 
            print("PORT IS OPEN....")
        

    func serialPortWasClosed(_ serialPort: ORSSerialPort) 
            print("PORT IS CLOSE")
        

    func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) 
        print(NSString(data: data as Data, encoding: String.Encoding.utf8.rawValue)!)
        

    func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) 
            print("PORT REMOVED")
        

    private func serialPort(serialPort: ORSSerialPort!, didEncounterError error: NSError!) 
        print("PORT ERR \(String(describing: error))")
        
    



var mySerial = SerialController(path: "/dev/myserialport")

mySerial.open()

mySerial.SendString(data: "test")

【问题讨论】:

【参考方案1】:

假设您包含的代码是完整的程序源代码(即您将其编译为命令行应用程序),问题是程序在调用sendString() 后立即终止,因此端口没有有机会收到任何东西。你需要让程序保持活力和运行。有多种方法可以做到这一点,但最简单的方法是调用RunLoop.main.run() 作为程序的最后一行。这将导致运行循环无限期地运行,处理来自所有来源的输入,并且将保持程序处于活动状态并运行 ORSSerialPort 所依赖的系统机制。

// SerialController class you has looks good, and goes here

let mySerial = SerialController(path: "/dev/myserialport")
mySerial.open()
mySerial.SendString(data: "test")

RunLoop.main.run()

【讨论】:

谢谢安德鲁。你拯救了我的一天!

以上是关于无法从 ORSSerialPort 接收数据的主要内容,如果未能解决你的问题,请参考以下文章

无法从 wiki api 接收数据

无法从 JSON 接收数据 - PHPMyAdmin

Android UDP 通信。无法从设备接收数据

客户端无法从服务器接收 UDP 数据报

Ratchet Websocket 无法从客户端接收数据?

如何将RS232接收到数据写入EXCEL