Связь с Modbus с помощью Bluetooth в iOS / Swift 5

#swift #bluetooth #core-bluetooth #modbus #ios-bluetooth

#swift #bluetooth #ядро-bluetooth #modbus #ios-bluetooth

Вопрос:

Я общаюсь с протоколом Modbus с использованием Bluetooth и получаю задержку около 500-700 миллисекунд, тогда как я ожидаю, что это будет около 40-50 миллисекунд.

Вот шаги, которым я следую:

  1. Я пытаюсь обнаружить аппаратное устройство в iPhone и установить с ним соединение.
  2. Как только соединение было установлено, я получил сервис и список характеристик.
  3. Теперь я пытаюсь использовать характеристики записи и получаю ответ примерно через 500 миллисекунд

Кто-нибудь может мне помочь? Я здесь очень сильно застрял.

Вот блок кода, который я использую:

 func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
    let df : DateFormatter = DateFormatter()
    df.dateFormat = "E dd MMM yyyy HH:mm:ss.SSSS"
    let dateString = df.string(from: Date())
    print("...Getting Values.............nTimeStamp: (dateString)nn")
    print("didUpdateValueFor ========> (characteristic), (String(describing: error))")
    self.createPackage(type: .recieveResponse)
    if let error = error {
        print("Failed… error: (error)")
    }
}    

func writeCharacteristicValue(peripheral: CBPeripheral, data: Data, char: CBCharacteristic, type: CBCharacteristicWriteType) {​​​​​​​​

        peripheral.writeValue(data, for: char, type: type)

    }​​​​​​​​

func writeDataToBlePeripheral(characteristic: CBCharacteristic, byteArray: [UInt8], connectedPeripheral: CBPeripheral) {
    let bytes : [UInt8] = byteArray
    let data = Data(bytes)
    print(data)

    let df2 : DateFormatter = DateFormatter()
    df2.dateFormat = "E dd MMM yyyy HH:mm:ss.SSSS"
    let dateString2 = df2.string(from: Date())
    print("...Aftert data conversion Sending.............nTimeStamp: (dateString2)nn")
    

BLEManager.getSharedBLEManager().writeCharacteristicValue(peripheral: connectedPeripheral, data: data, char: characteristic, type: .withResponse)

    let df1 : DateFormatter = DateFormatter()
    df1.dateFormat = "E dd MMM yyyy HH:mm:ss.SSSS"
    let dateString1 = df1.string(from: Date())
    print("...After Sending.............nTimeStamp: (dateString1)nn")
}
 

Комментарии:

1. Можете ли вы отредактировать свой вопрос, чтобы показать соответствующий код?

2. @Paulw11: Я обновил вопрос и добавил функцию, которую я использую для записи данных на моем устройстве Bluetooth.

3. Когда вы говорите, что для получения ответа требуется секунда, вы имеете в виду вызов делегата didWrite или какой-то другой ответ на периферийное устройство? Сколько байтов вы отправляете?

4. @Paulw11: Мы отправляем 8 байт. Вот вызывающий метод: writeDataToBlePeripheral (характеристика: self.writeCharactrestics!, ByteArray: [1, 4, 0, 51, 0, 1, 193, 197], Подключенный периферийный: self.Подключенный периферийный!)

5. И ответы на другие мои вопросы?