iCo*_*der 6 asynchronous ios gcdasyncsocket obd-ii
我正在开发一个应用程序,我需要使用OBD连接器一次更新多个值,如Engine RPM,Speed等参数.我需要实现异步命令/响应.为此,我使用[gcdAsyncSocket writeData:data withTimeout:-1 tag:uniqueTag];异步标签异步发送命令.
但是当调用gcdAsync的委托方法"socketDidReadDatawithTag"时,它会返回数据,但它不正确.如果我已发送一个命令"010C\r"(读取RPM)和"010D\r"(速度),则使用Tag分别为263和264,如果我用socketDidReadDatawithTag中的标签264解析响应,有时它会返回RPM的数据.(我的响应混乱或OBD设备无法处理异步响应)
NSLog(@"Command Sent for Async : %@",commandString);
NSData *data = [commandString dataUsingEncoding:NSASCIIStringEncoding];
long obdObjectTag = [obdObject getPIDTag];//Unique Tag
[gcdAsyncSocket writeData:data withTimeout:-1 tag:obdObjectTag];
NSData *readData = [@">" dataUsingEncoding:NSASCIIStringEncoding];
[gcdAsyncSocket readDataToData:readData withTimeout:-1 tag:obdObjectTag];
Run Code Online (Sandbox Code Playgroud)
并且socketdidReadDatawithTag数据和标签不匹配.
据我所知,OBD-II 连接器(我假设它是 ELM-327)无法真正处理异步调用。
它无法同时处理多个请求。您发送 1 个命令,OBD-II 设备将从 OBD 总线收集该信息并返回答案。然后它将处理您的下一个命令。当然,您发送的命令最终会保存在缓冲区中,该缓冲区将被一一处理。我认为这对你来说可能是一个问题,但我不确定。
我根本不熟悉 ios 编程以及这些标签会发生什么。您设置这些标签来识别数据的参数是什么?在回复数据中,您还可以看到它的参数含义,因此在答案本身中您可以看到数据代表 RPM 或 Speed 等。
我希望 OBD-II 部分对此有所启发。也许会更多地检查这个问题以进行一些讨论。
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |