问题标签 [orsserialport]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1158 浏览

macos - ORSSerialPort serialRead in swift

我正在尝试在 Swift 中使用 ORSSerialPort。但是我从串口读取数据有问题。问题是错误的serialPort函数实现。也许这部分会有所帮助:

  • (void)serialPort:(ORSSerialPort *)serialPort didReceiveResponse:(NSData *)responseData toRequest:(ORSSerialRequest *)request;



0 投票
1 回答
800 浏览

macos - ORSSerialPort 中的虚拟串口

我正在使用ORSSerialPort重写一个 OSX 控件应用程序。在某些情况下,我想控制一个没有直接连接到我的机器的串口设备,或者在本地模拟该设备的通信以进行测试。使用socat one 可以创建虚拟串行端口,例如在本地或通过网络从真实串行设备进行通信。

例如,在这里我创建了一对虚拟设备/dev/master/dev/slavesudo socat -d -d -d -d -lf /tmp/socat pty,link=/dev/master,ixoff=0,ixon=0,ispeed=9600,ospeed=9600,echo=0,crtscts=0,user=gerwin,group=staff pty,link=/dev/slave,rawer,echo=0,user=gerwin,group=staff

使用这样的设置,我可以使用 pySerial 连接到虚拟端口。但是,使用 ORSSerialPort 对我不起作用。

单步执行代码时,这似乎源于 ORSSerialPort 仅依赖于 IOKit,其中“虚拟”设备不会出现在其雷达上。同样,当使用路径初始化实例时,例如/dev/master,对应的io_object_t不存在 - 并且初始化返回 nil。

我想避免深入研究 IOKit 和内核的东西(如此处所建议的)。

查看我看到的代码,sendData 写入文件描述符。是否有一种方法可以用“普通”文件描述符初始化 ORSSerialPort,跳过详细的 ioctl 设置,并将其视为普通字符流(假设这是 pySerial 将其拉下来的方式)。有什么选择吗?


2016 年 2 月 10 日更新:

我在ORSSerialPort github 问题列表中与创建者 armadsen 讨论了这种情况:

我认为基本方法是“交换” InternalSerialPort 和 SerialPort 中的初始化程序,以便路径初始化程序是指定/必需的,而 IOKit 初始化程序是可选的。已经是这种情况(正如您所指出的),路径(而不是 io_object_t)在内部用于获取文件描述符并从端口读/写。换句话说,我希望这不是一个非常复杂的变化。

我在下面发布了对最终结果的答案...

0 投票
2 回答
600 浏览

xcode - Mac App 无法在 Xcode 之外运行,缺少库?使用库 ORSerial

我的应用程序构建时没有错误或警告,并且在 Xcode 7.2.1 中运行良好。但是当我将它存档并尝试在 Xcode 之外打开它时,图标会短暂闪烁,并且出现此错误:

如何编译我的应用程序以使其在 Xcode 之外工作?当我尝试在没有 XCODE 环境的情况下打开已编译的 .app 时会出现此问题。

该应用程序是使用 swift 制作的。

0 投票
1 回答
130 浏览

swift - 如何用这个 [Swift] 编写带有类的体面代码

我正在制作一个 OSX 应用程序来通过串行控制设备,为此我正在使用 ORSSerialPort 库。但是我在编码方面遇到了一些麻烦。我是(非常)编码新手,我不知道如何正确编码,这在尝试使某些东西工作时会导致一些问题。我将展示我的三个“类”,并描述它们的功能,然后描述我遇到的问题。

主类,库委托连接到该类,我从该类与串行设备进行所有通信(AE20125Controller.swift)

数据处理器类,所有可能的消息都存储在其中,我要组装要发送的数据和所有当前设置的形式(DataProcessor.swift)

menuItems 类,它应该处理 GUI 中的所有更改和操作。(MenuItems.swift)

我省略了 AppDelegate,因为其中没有任何内容,而是用于构建视图的设置(例如,将视图的背景更改为白色)。

我无法在类之间进行通信,例如我需要使用 DataProcessor 类的 AE20125Controller 类中的 sendData 方法发送数据,但我需要启动它。但是DataProcessor类是在AE20125Controller类中发起的?这也适用于 MenuItems 类,当按下 updateFreq 按钮时,应该调用 DataProcessor 类中的方法 setData,但我需要启动它。

老实说,我不知道我在做什么,不知道如何正确地使用这个系统,以便一切正常,而不是将所有内容放在一个文件中,这样我就可以保持它的井井有条。同样,我是编程新手,但是(如果我自己可以这么说的话)我确实有一些编程知识。请帮助我组织我的(蹩脚的)代码,并给我一些关于如何在未来避免这种情况的提示。

(如果你知道一个好的高级 Swift OSX 编程指南/课程,请告诉我。(它不一定是免费的))

提前致谢

0 投票
1 回答
306 浏览

swift - 使用 ORSSerialPort 时,类型“AppDelegate”不符合协议“ORSSerialPortDelegate”

我创建了一个全新的 Xcode 项目,我做的第一件事是按照此页面上的“使用 Xcode 子项目”步骤操作:https : //github.com/armadsen/ORSSerialPort/wiki/Installing-ORSSerialPort 导入了 ORSSerialPort 源进入我的项目供我使用并且工作正常。然后我进入 AppDelegate.swift 并添加import ORSSerial,项目仍然可以构建。

接下来我添加ORSSerialPortDelegate到 AppDelegate 类声明class AppDelegate: NSObject, NSApplicationDelegate, ORSSerialPortDelegate {

我不明白为什么会发生这个错误,因为我已经检查了 ORSSerialPort 的演示项目,这正是他们所做的。我想做的就是创建一个简单的程序来读取 Arduino 的输出,为什么这么难?我已按照所有说明进行操作,并且到处都看过,但没有任何效果。我唯一能看到的可能会有所不同的是,演示项目不使用 AppDelegate 做任何事情,而是有一个名为的单独文件SerialPortDemoController,接口使用该文件并将所有代码放入其中。但是,我不想这样做,我只想直接在 AppDelegate 中使用 ORSSerial 库,就像使用 CLLocationManagerDelegate、NSUserNotificationCenterDelegate 或其他任何东西一样。

0 投票
1 回答
204 浏览

swift - 应该是单行的 ORSSerialPort 数据通过多行传入

我有一个 arduino,它每半秒在串行线路上吐出一行 GPS 数据,我知道这是有效的,因为我可以查看 arduino IDE 中的串行监视器,每半秒就会出现一条新的单行数据。

我现在正在使用 Swift 编写一个 Mac 程序,它将通过串行端口输入的每个坐标放在地图上,并使用 ORSSerialPort 库连接到 arduino 并接收其数据。这工作正常,我有一个早期工作的基本版本,但是我注意到 GPS 数据中存在间隙(它们在地图上以小组的形式出现,当它应该是一条恒定线时,它们之间有一个明显的空间) .

在我得到地图之前,我有一个文本字段,每条 GPS 数据线都会在它进入时添加到其中,它产生与 arduino IDE 串行监视器完全相同的输出,所以我认为一切正常。

为了尝试解决地图问题,我删除了地图代码,并print()在 XCode IDE 中通过串行端口进入时将每一行简单地删除。令我惊讶的是,数据中有随机换行符,我不明白为什么。我觉得这可能会导致我遇到的问题(在每个逗号处拆分字符串,以便我可以提取各个值)所以想知道为什么它在 arduino IDE 和文本字段中以单行形式出现,但不是在 XCode IDE 中,大概是在我使用字符串的时候。

编辑:我在 XCode IDE 的打印和输出的文本字段前加上五个加号并用五个破折号作为后缀,然后在发送单个报告后将串行端口设置为关闭(应该是单行数据)。我对这两件事的输出最终都是三行,每行都以加号和破折号作为前缀和后缀。请参见下面的照片,它显示了应该是单行的内容:

为什么我的单行数据通过多行传递并且表现得像单个变量(如获取行的最后一个字符返回三行中第一行的最后一个字符,而不是分号)?

0 投票
1 回答
793 浏览

swift - 从 arduino 读取的 Swift 3 ORSSerialPort

所以我正在尝试使用 ORSSerialPort 库读取一些 arduino 输出。如果我使用名为 ORSSerialPortDemo 的 lib 示例代码,一切正常。现在我在演示中唯一想念的是他们如何在 viewController 中使用 SerialPortDemoController.swift。

我创建了一个具有 ViewController.swift 的标准项目。桥头导入完成,所有引用都编译。但我喜欢在代码中设置它们,而不是使用 GUI 来选择 USB 端口和波特率。

像这样的东西:

然后我需要从端口读取。这应该已经可以使用了,函数:func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data)? 所以在这个功能中我可以做这样的事情:

我环顾四周,但似乎没有任何效果。如果有人能指出我正确的方向,那就太好了。

谢谢!

0 投票
2 回答
1744 浏览

swift - 使用 ORSSerialPort 从 Swift 4 中的串行端口读取

我一直想制作一个通过串行向我的 LED 控制器发送指令的应用程序。为此,我需要读取控制器在发送命令后发回的内容。我在以下功能中找到了ORSSerialPort

但是,有类似的东西ORSSerialPort.read()吗?

0 投票
0 回答
82 浏览

swift - 使用 ANSI 彩色数据包解析数据包有意外行为

我的序列有混合数据格式,一些输出有 \[0;32m...\[0m,其中一些是纯文本。

我的完整输出在这里https://pastebin.ubuntu.com/p/WTtJmGS9y5/ 根据代码,您可以看到通过serialPort didReceivePacket具有 >>> <<< 标记的数据,但不是全部....

它似乎didReceivePacket做出了异步响应,因为我的输出必须以

但有时在这些行之后会有一些额外的文字

0 投票
2 回答
156 浏览

macos - ORSSerialPort 不发送数据

我是初级 Swift 用户,但在这个阶段,我需要在我的项目中使用串行连接。当我寻找可用端口时,我看到它们没有问题,但是当我尝试发送一些东西时我有问题,为什么?

我的代码对 ORSSerial 有疑问: