Эх сурвалжийг харах

临时关闭重试;调整指令组装

Frankensteinly 1 жил өмнө
parent
commit
38df34587a

+ 2 - 2
app/src/main/java/com/example/whatever/activity/BleActivity.kt

@@ -24,7 +24,7 @@ import com.example.whatever.model.Constants.PERMISSION_REQUEST_CODE
 import com.example.whatever.ble.BleConst.INDICATE_UUID
 import com.example.whatever.ble.BleConst.INDICATE_UUID
 import com.example.whatever.ble.BleConst.SERVICE_UUID
 import com.example.whatever.ble.BleConst.SERVICE_UUID
 import com.example.whatever.ble.BleCmdManager
 import com.example.whatever.ble.BleCmdManager
-import com.example.whatever.extentions.toHexString
+import com.example.whatever.extentions.toHexStrings
 import com.example.whatever.util.ToastUtils
 import com.example.whatever.util.ToastUtils
 import com.example.whatever.ble.BleUtil
 import com.example.whatever.ble.BleUtil
 import com.example.whatever.util.log.LogUtil
 import com.example.whatever.util.log.LogUtil
@@ -90,7 +90,7 @@ class BleActivity : BaseBindingActivity<ActivityBleBinding>() {
                                 }
                                 }
 
 
                                 override fun onCharacteristicChanged(data: ByteArray?) {
                                 override fun onCharacteristicChanged(data: ByteArray?) {
-                                    println("******************* : ${data?.toHexString()}")
+                                    println("******************* : ${data?.toHexStrings()}")
                                     data?.let { itData ->
                                     data?.let { itData ->
                                         BleCmdManager.handleRsp(it, itData)
                                         BleCmdManager.handleRsp(it, itData)
                                     }
                                     }

+ 2 - 1
app/src/main/java/com/example/whatever/activity/ModbusActivity.kt

@@ -9,7 +9,7 @@ class ModbusActivity : BaseBindingActivity<ActivityModbusBinding>() {
 
 
     override fun initView() {
     override fun initView() {
 
 
-        ModBusController.setSlaveCount(1)
+        ModBusController.setSlaveCount(4)
         ModBusController.interruptReadTrashBinStatus(false)
         ModBusController.interruptReadTrashBinStatus(false)
         ModBusController.start(this)
         ModBusController.start(this)
         ModBusController.unregisterListener(this)
         ModBusController.unregisterListener(this)
@@ -17,6 +17,7 @@ class ModbusActivity : BaseBindingActivity<ActivityModbusBinding>() {
 //        mBinding?.send?.setOnClickListener {
 //        mBinding?.send?.setOnClickListener {
 //            PortManager.plcPort?.send(byteArrayOf(0x03, 0x00, 0x6B, 0x00, 0x03))
 //            PortManager.plcPort?.send(byteArrayOf(0x03, 0x00, 0x6B, 0x00, 0x03))
 //        }
 //        }
+        mBinding?.exit?.setOnClickListener { finish() }
     }
     }
 
 
     override fun onDestroy() {
     override fun onDestroy() {

+ 9 - 9
app/src/main/java/com/example/whatever/ble/BleCmdManager.kt

@@ -6,7 +6,7 @@ import com.example.whatever.CustomBleWriteCallback
 import com.example.whatever.extentions.crc16
 import com.example.whatever.extentions.crc16
 import com.example.whatever.extentions.startsWith
 import com.example.whatever.extentions.startsWith
 import com.example.whatever.extentions.toByteArray
 import com.example.whatever.extentions.toByteArray
-import com.example.whatever.extentions.toHexString
+import com.example.whatever.extentions.toHexStrings
 import com.example.whatever.model.BleBean
 import com.example.whatever.model.BleBean
 import com.example.whatever.ble.BleConst.REQ_CURRENT_STATUS
 import com.example.whatever.ble.BleConst.REQ_CURRENT_STATUS
 import com.example.whatever.ble.BleConst.REQ_GET_TOKEN
 import com.example.whatever.ble.BleConst.REQ_GET_TOKEN
@@ -113,11 +113,11 @@ object BleCmdManager {
      * 令牌处理
      * 令牌处理
      */
      */
     private fun handleToken(bleDevice: BleDevice, byteArray: ByteArray) {
     private fun handleToken(bleDevice: BleDevice, byteArray: ByteArray) {
-        LogUtil.i("handleToken : ${byteArray.toHexString()}")
+        LogUtil.i("handleToken : ${byteArray.toHexStrings()}")
         BleUtil.instance?.getBleDeviceByMac(bleDevice.mac)?.let {
         BleUtil.instance?.getBleDeviceByMac(bleDevice.mac)?.let {
             it.token = byteArrayOf(byteArray[11], byteArray[12], byteArray[13], byteArray[14])
             it.token = byteArrayOf(byteArray[11], byteArray[12], byteArray[13], byteArray[14])
 
 
-            println("Token 赋值 ${it.token?.toHexString()} : ${bleDevice.mac}")
+            println("Token 赋值 ${it.token?.toHexStrings()} : ${bleDevice.mac}")
         }
         }
     }
     }
 
 
@@ -138,7 +138,7 @@ object BleCmdManager {
      * res : 0x01:成功 0x02:失败
      * res : 0x01:成功 0x02:失败
      */
      */
     private fun handleSwitchModeResult(byteArray: ByteArray) {
     private fun handleSwitchModeResult(byteArray: ByteArray) {
-        LogUtil.i("handleSwitchModeResult : ${byteArray.toHexString()}")
+        LogUtil.i("handleSwitchModeResult : ${byteArray.toHexStrings()}")
         val job = byteArray[4]
         val job = byteArray[4]
         val res = byteArray[5]
         val res = byteArray[5]
     }
     }
@@ -177,7 +177,7 @@ object BleCmdManager {
      * res:0x00:成功 0x01:失败 0x02:传输超时 0x0D:当前IDX超出范围 0x0E:当前数据CRC校验失败 0x14:JSON结构错误 0x63:未知错误
      * res:0x00:成功 0x01:失败 0x02:传输超时 0x0D:当前IDX超出范围 0x0E:当前数据CRC校验失败 0x14:JSON结构错误 0x63:未知错误
      */
      */
     private fun handleWorkTicketResult(bleBean: BleBean, byteArray: ByteArray) {
     private fun handleWorkTicketResult(bleBean: BleBean, byteArray: ByteArray) {
-        LogUtil.i("handleWorkTicketResult : ${byteArray.toHexString()}")
+        LogUtil.i("handleWorkTicketResult : ${byteArray.toHexStrings()}")
         val idx = byteArray[4] + byteArray[5]
         val idx = byteArray[4] + byteArray[5]
         val total = byteArray[6] + byteArray[7]
         val total = byteArray[6] + byteArray[7]
         val res = byteArray[8]
         val res = byteArray[8]
@@ -216,7 +216,7 @@ object BleCmdManager {
      * 0x01:工作模式 0x02:待机模式 0x03:故障状态
      * 0x01:工作模式 0x02:待机模式 0x03:故障状态
      */
      */
     private fun handleCurrentStatus(byteArray: ByteArray) {
     private fun handleCurrentStatus(byteArray: ByteArray) {
-        LogUtil.i("handleCurrentStatus : ${byteArray.toHexString()}")
+        LogUtil.i("handleCurrentStatus : ${byteArray.toHexStrings()}")
         val job = byteArray[4]
         val job = byteArray[4]
     }
     }
 
 
@@ -234,7 +234,7 @@ object BleCmdManager {
      */
      */
     private fun handleTicketStatus(bleDevice: BleDevice, byteArray: ByteArray) {
     private fun handleTicketStatus(bleDevice: BleDevice, byteArray: ByteArray) {
         // TODO 需要有超时重传机制
         // TODO 需要有超时重传机制
-        LogUtil.i("handleTicketStatus : ${byteArray.toHexString()}")
+        LogUtil.i("handleTicketStatus : ${byteArray.toHexStrings()}")
 
 
         val total = byteArray[4] + byteArray[5]
         val total = byteArray[4] + byteArray[5]
         val idx = byteArray[6] + byteArray[7]
         val idx = byteArray[6] + byteArray[7]
@@ -295,7 +295,7 @@ object BleCmdManager {
      * chg:0x01:未充电 0x02:充电中 0x03:充满
      * chg:0x01:未充电 0x02:充电中 0x03:充满
      */
      */
     private fun handlePowerStatus(byteArray: ByteArray) {
     private fun handlePowerStatus(byteArray: ByteArray) {
-        LogUtil.i("handlePowerStatus : ${byteArray.toHexString()}")
+        LogUtil.i("handlePowerStatus : ${byteArray.toHexStrings()}")
         val bat = byteArray[4].toInt()
         val bat = byteArray[4].toInt()
         val chg = byteArray[5]
         val chg = byteArray[5]
     }
     }
@@ -359,7 +359,7 @@ object BleCmdManager {
      * type: 0x01:固件文件 0x02:点位PNG文件
      * type: 0x01:固件文件 0x02:点位PNG文件
      */
      */
     private fun handleFileRsp(bleBean: BleBean, byteArray: ByteArray) {
     private fun handleFileRsp(bleBean: BleBean, byteArray: ByteArray) {
-        LogUtil.i("handleFileRsp : ${byteArray.toHexString()}")
+        LogUtil.i("handleFileRsp : ${byteArray.toHexStrings()}")
         val type = byteArray[4]
         val type = byteArray[4]
         val res = byteArray[17]
         val res = byteArray[17]
         val total = byteArray[15] + byteArray[16]
         val total = byteArray[15] + byteArray[16]

+ 1 - 1
app/src/main/java/com/example/whatever/extentions/ByteArray.kt

@@ -25,7 +25,7 @@ private val hexEncodingTable = byteArrayOf(
     '8'.toByte(), '9'.toByte(), 'A'.toByte(), 'B'.toByte(), 'C'.toByte(), 'D'.toByte(), 'E'.toByte(), 'F'.toByte()
     '8'.toByte(), '9'.toByte(), 'A'.toByte(), 'B'.toByte(), 'C'.toByte(), 'D'.toByte(), 'E'.toByte(), 'F'.toByte()
 )
 )
 
 
-fun ByteArray.toHexString(space: Boolean = true) : String {
+fun ByteArray.toHexStrings(space: Boolean = true) : String {
     val out = ByteArrayOutputStream()
     val out = ByteArrayOutputStream()
     try {
     try {
         for (i in 0 until size) {
         for (i in 0 until size) {

+ 7 - 27
app/src/main/java/com/example/whatever/modbus/ModBusController.kt

@@ -1,7 +1,7 @@
 package com.example.whatever.modbus
 package com.example.whatever.modbus
 
 
 import android.content.Context
 import android.content.Context
-import com.example.whatever.extentions.toHexString
+import com.example.whatever.extentions.toHexStrings
 import com.example.whatever.util.Executor
 import com.example.whatever.util.Executor
 import com.example.whatever.util.log.LogUtil
 import com.example.whatever.util.log.LogUtil
 import java.util.*
 import java.util.*
@@ -61,8 +61,12 @@ object ModBusController {
                 interruptReadTrashBinStatus
                 interruptReadTrashBinStatus
             }, { res ->
             }, { res ->
 //                // Logger.d("ModbusController", "res: ${res.map { it.toHexString() }}")
 //                // Logger.d("ModbusController", "res: ${res.map { it.toHexString() }}")
-                LogUtil.i("haha : ModbusController : $res")
-                res.forEach { data -> println("xixi : ${data.toHexString()}") }
+                LogUtil.i("haha : ModbusController : ${res.size} : $res")
+                res.forEach { data ->
+                    if (data.isNotEmpty()) {
+                        println("xixi : ${data.toHexStrings()}")
+                    }
+                }
                 println()
                 println()
                 // 第 0 个字节是 从机地址,第 1 个字节是 功能码,第 2 个字节是 字节数
                 // 第 0 个字节是 从机地址,第 1 个字节是 功能码,第 2 个字节是 字节数
                 // 瓶类计数
                 // 瓶类计数
@@ -159,30 +163,6 @@ object ModBusController {
         }
         }
     }
     }
 
 
-    /**
-     * 关托盘
-     */
-    fun closePallet(index: Int) {
-        // Logger.d("TRASH_BIN", "下发关托盘指令:${index}")
-        modBusManager?.sendTo(index, MBFrame.WRITE_PALLET_OFF) {
-            if (it.isEmpty()) {
-                // Tip.toast("托盘[${index}]关闭失败!")
-            }
-        }
-    }
-
-    /**
-     * 开托盘
-     */
-    fun openPallet(index: Int) {
-        // Logger.d("TRASH_BIN", "下发打开托盘指令:${index}")
-        modBusManager?.sendTo(index, MBFrame.WRITE_PALLET_ON) {
-            if (it.isEmpty()) {
-//                // Tip.toast("托盘[${index}]打开失败!")
-            }
-        }
-    }
-
     /**
     /**
      * 开关灯
      * 开关灯
      */
      */

+ 18 - 24
app/src/main/java/com/example/whatever/modbus/ModBusManager.kt

@@ -1,8 +1,10 @@
 package com.example.whatever.modbus
 package com.example.whatever.modbus
 
 
 import com.example.whatever.extentions.crc16
 import com.example.whatever.extentions.crc16
+import com.example.whatever.extentions.toHexStrings
 import com.example.whatever.util.Executor
 import com.example.whatever.util.Executor
 import com.example.whatever.util.jvmSeconds
 import com.example.whatever.util.jvmSeconds
+import com.example.whatever.util.log.LogUtil
 import java.util.concurrent.LinkedBlockingQueue
 import java.util.concurrent.LinkedBlockingQueue
 
 
 /**
 /**
@@ -124,7 +126,7 @@ class ModBusManager(
     init {
     init {
         portManager.listen { res ->
         portManager.listen { res ->
             if (verbose) {
             if (verbose) {
-//                Logger.i("ModBus", "接收:${res.toHexString()}")
+                LogUtil.i("接收:${res.toHexStrings()}")
             }
             }
             synchronized(lock) {
             synchronized(lock) {
                 sending?.run {
                 sending?.run {
@@ -132,7 +134,7 @@ class ModBusManager(
                         done?.let { it(res) }
                         done?.let { it(res) }
                         sending = null
                         sending = null
                     } else {
                     } else {
-//                        Logger.i("ModBus", "响应: ${res.toHexString()}未匹配, running:${running}")
+                        LogUtil.i("响应: ${res.toHexStrings()}未匹配, running:${running}")
                     }
                     }
                 }
                 }
             }
             }
@@ -158,13 +160,14 @@ class ModBusManager(
                     if (portManager.send(req)) {
                     if (portManager.send(req)) {
                         afterSent()
                         afterSent()
                         if (verbose) {
                         if (verbose) {
-//                            Logger.i("ModBus", "发送:${req.toHexString()}")
+                            LogUtil.i("发送:${req.toHexStrings()}")
                         }
                         }
                     } else {
                     } else {
 //                        Tip.toast("无法与主控板通讯")
 //                        Tip.toast("无法与主控板通讯")
+                        LogUtil.w("无法与主控板通讯")
                     }
                     }
                 } else {
                 } else {
-//                    Logger.i("ModBus", "未响应: ${req.toHexString()}")
+                    LogUtil.i("未响应: ${req.toHexStrings()}")
                     // 放弃处理,回调空数据
                     // 放弃处理,回调空数据
                     done?.let { it(byteArrayOf()) }
                     done?.let { it(byteArrayOf()) }
                     sending = null
                     sending = null
@@ -243,7 +246,9 @@ class ModBusManager(
         done: ((res: List<ByteArray>) -> Unit)?,
         done: ((res: List<ByteArray>) -> Unit)?,
         resList: ArrayList<ByteArray>
         resList: ArrayList<ByteArray>
     ) {
     ) {
-        sendTo(index, frame) { res ->
+        // TODO 临时禁止重发
+        sendTo(index, frame, false) { res ->
+//        sendTo(index, frame) { res ->
             resList.add(res)
             resList.add(res)
             if (index >= slaveCount - 1) {
             if (index >= slaveCount - 1) {
                 // 已经发送完
                 // 已经发送完
@@ -271,7 +276,7 @@ class ModBusManager(
         done: ((res: ByteArray) -> Unit)? = null
         done: ((res: ByteArray) -> Unit)? = null
     ) {
     ) {
         if (slaveCount <= 0) {
         if (slaveCount <= 0) {
-//            Logger.i("ModBus", "sendTo($index), slaveCount为0, 返回空数据")
+            LogUtil.i("sendTo($index), slaveCount为0, 返回空数据")
             done?.invoke(byteArrayOf())
             done?.invoke(byteArrayOf())
             return
             return
         }
         }
@@ -395,7 +400,9 @@ class MBFrame(
      */
      */
     fun compile(index: Int): ByteArray {
     fun compile(index: Int): ByteArray {
         val bytes = ByteArray(4 + data.size)
         val bytes = ByteArray(4 + data.size)
-        bytes[0] = (0x80 + index).toByte()
+        // TODO 从机开始地址0x01
+//        bytes[0] = (0x80 + index).toByte()
+        bytes[0] = (1 + index).toByte()
         bytes[1] = type
         bytes[1] = type
         for (i in data.indices) {
         for (i in data.indices) {
             bytes[2 + i] = data[i]
             bytes[2 + i] = data[i]
@@ -404,6 +411,9 @@ class MBFrame(
         bytes[bytes.size - 2] = crc16[0]
         bytes[bytes.size - 2] = crc16[0]
         bytes[bytes.size - 1] = crc16[1]
         bytes[bytes.size - 1] = crc16[1]
         return bytes
         return bytes
+
+//        val cmd = byteArrayOf((1 + index).toByte()) + byteArrayOf(type) + data
+//        return cmd + cmd.crc16()
     }
     }
 
 
     companion object {
     companion object {
@@ -413,7 +423,7 @@ class MBFrame(
          */
          */
         val READ_STATUS = MBFrame(
         val READ_STATUS = MBFrame(
             FRAME_TYPE_READ,
             FRAME_TYPE_READ,
-            byteArrayOf(0x00, 0x00, 0x00, 0x04)
+            byteArrayOf(0x00, 0x00, 0x00, 0x01)
         )
         )
 
 
         /**
         /**
@@ -485,22 +495,6 @@ class MBFrame(
             byteArrayOf(0x00, 0x05, 0b11110111.toByte(), 0b00000000)
             byteArrayOf(0x00, 0x05, 0b11110111.toByte(), 0b00000000)
         )
         )
 
 
-        /**
-         * 关托盘
-         */
-        val WRITE_PALLET_OFF = MBFrame(
-            FRAME_TYPE_WRITE,
-            byteArrayOf(0x00, 0x10, 0b01111111.toByte(), 0b10000000.toByte())
-        )
-
-        /**
-         * 开托盘
-         */
-        val WRITE_PALLET_ON = MBFrame(
-            FRAME_TYPE_WRITE,
-            byteArrayOf(0x00, 0x10, 0b10111111.toByte(), 0b01000000.toByte())
-        )
-
         /**
         /**
          * 读取称重传感器原始读取值
          * 读取称重传感器原始读取值
          */
          */

+ 10 - 0
app/src/main/res/layout/activity_modbus.xml

@@ -19,4 +19,14 @@
         android:text="Send"
         android:text="Send"
         android:textSize="30sp"
         android:textSize="30sp"
         android:layout_margin="5dp"/>
         android:layout_margin="5dp"/>
+
+    <Button
+        android:id="@+id/exit"
+        android:layout_width="200dp"
+        android:layout_height="80dp"
+        android:minWidth="0dp"
+        android:minHeight="0dp"
+        android:text="Exit"
+        android:textSize="30sp"
+        android:layout_margin="5dp"/>
 </LinearLayout>
 </LinearLayout>