Frankensteinly 1 жил өмнө
parent
commit
a43ae66d25

+ 12 - 4
app/src/main/java/com/grkj/iscs/activity/ModbusActivity.kt

@@ -63,21 +63,29 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
         }
         }
 
 
         mBinding?.openLockBuckle?.setOnClickListener {
         mBinding?.openLockBuckle?.setOnClickListener {
-            if (mBinding?.etIdx?.text.toString().isEmpty()) {
+            if (mBinding?.slaveIdx?.text.toString().isEmpty()) {
                 ToastUtils.tip("请输入设备编号")
                 ToastUtils.tip("请输入设备编号")
                 return@setOnClickListener
                 return@setOnClickListener
             }
             }
-            ModBusController.openLockBuckle(mBinding?.etIdx?.text.toString().toInt()) { res ->
+            if (mBinding?.lockIdx?.text.toString().isEmpty()) {
+                ToastUtils.tip("请输入卡扣编号")
+                return@setOnClickListener
+            }
+            ModBusController.openLockBuckle(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
                 LogUtil.i("开锁卡扣成功 : ${res.toHexStrings()}")
                 LogUtil.i("开锁卡扣成功 : ${res.toHexStrings()}")
             }
             }
         }
         }
 
 
         mBinding?.closeLockBuckle?.setOnClickListener {
         mBinding?.closeLockBuckle?.setOnClickListener {
-            if (mBinding?.etIdx?.text.toString().isEmpty()) {
+            if (mBinding?.slaveIdx?.text.toString().isEmpty()) {
                 ToastUtils.tip("请输入设备编号")
                 ToastUtils.tip("请输入设备编号")
                 return@setOnClickListener
                 return@setOnClickListener
             }
             }
-            ModBusController.closeLockBuckle(mBinding?.etIdx?.text.toString().toInt()) { res ->
+            if (mBinding?.lockIdx?.text.toString().isEmpty()) {
+            ToastUtils.tip("请输入卡扣编号")
+            return@setOnClickListener
+        }
+            ModBusController.closeLockBuckle(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
                 LogUtil.i("关锁卡扣成功 : ${res.toHexStrings()}")
                 LogUtil.i("关锁卡扣成功 : ${res.toHexStrings()}")
             }
             }
         }
         }

+ 0 - 1
app/src/main/java/com/grkj/iscs/modbus/DeviceBean.kt

@@ -39,7 +39,6 @@ class DeviceBean(var idx: Byte?, var type: Byte?, var status: ByteArray?) {
                     val is6HasLock = (byteArray[4].toInt() shr 5) and 0x1 == 1
                     val is6HasLock = (byteArray[4].toInt() shr 5) and 0x1 == 1
                     val is7HasLock = (byteArray[4].toInt() shr 6) and 0x1 == 1
                     val is7HasLock = (byteArray[4].toInt() shr 6) and 0x1 == 1
                     val is8HasLock = (byteArray[4].toInt() shr 7) and 0x1 == 1
                     val is8HasLock = (byteArray[4].toInt() shr 7) and 0x1 == 1
-                    // TODO 9号未验证
                     val is9HasLock = (byteArray[3].toInt() shr 0) and 0x1 == 1
                     val is9HasLock = (byteArray[3].toInt() shr 0) and 0x1 == 1
 
 
                     LogUtil.i("锁具刷新状态 : $is1HasLock - $is2HasLock - $is3HasLock - $is4HasLock - $is5HasLock - $is6HasLock - $is7HasLock - $is8HasLock - $is9HasLock")
                     LogUtil.i("锁具刷新状态 : $is1HasLock - $is2HasLock - $is3HasLock - $is4HasLock - $is5HasLock - $is6HasLock - $is7HasLock - $is8HasLock - $is9HasLock")

+ 12 - 8
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -212,18 +212,22 @@ object ModBusController {
         }
         }
     }
     }
 
 
-    fun openLockBuckle(index: Int?, done: ((res: ByteArray) -> Unit)? = null)  {
-        index?.let {
-            modBusManager?.sendTo(it, MBFrame.WRITE_LOCK_BUCKLE_OPEN) { res ->
-                done?.invoke(res)
+    fun openLockBuckle(slaveIdx: Int?, lockIdx: Int, done: ((res: ByteArray) -> Unit)? = null)  {
+        slaveIdx?.let {
+            modBusManager?.generateLockBuckleCmd(true, lockIdx)?.let { cmd ->
+                modBusManager?.sendTo(it, cmd) { res ->
+                    done?.invoke(res)
+                }
             }
             }
         }
         }
     }
     }
 
 
-    fun closeLockBuckle(index: Int?, done: ((res: ByteArray) -> Unit)? = null)  {
-        index?.let {
-            modBusManager?.sendTo(it, MBFrame.WRITE_LOCK_BUCKLE_CLOSE) { res ->
-                done?.invoke(res)
+    fun closeLockBuckle(slaveIdx: Int?, lockIdx: Int, done: ((res: ByteArray) -> Unit)? = null)  {
+        slaveIdx?.let {
+            modBusManager?.generateLockBuckleCmd(false, lockIdx)?.let { cmd ->
+                modBusManager?.sendTo(it, cmd) { res ->
+                    done?.invoke(res)
+                }
             }
             }
         }
         }
     }
     }

+ 21 - 13
app/src/main/java/com/grkj/iscs/modbus/ModBusManager.kt

@@ -252,6 +252,27 @@ class ModBusManager(
         portManager.close()
         portManager.close()
     }
     }
 
 
+    /**
+     * 生成锁具卡扣开关指令
+     */
+    fun generateLockBuckleCmd(isOpen: Boolean, lockIndex: Int): MBFrame {
+        var str = ""
+        val idx = lockIndex - (lockIndex / 8) * 8
+        for (i in 7 downTo 0) {
+            str += if (i == idx) {
+                "1"
+            } else {
+                "0"
+            }
+        }
+
+        // TODO 第三位是 是否响应,第四位是关哪个
+        return MBFrame(FRAME_TYPE_WRITE,
+            byteArrayOf(0x00,
+                if (lockIndex in 0..7) 0x11 else 0x12,
+                str.toInt(2).toByte(),
+                if (isOpen) 0x00 else 0xFF.toByte()))
+    }
 }
 }
 
 
 
 
@@ -489,18 +510,5 @@ class MBFrame(
             FRAME_TYPE_READ,
             FRAME_TYPE_READ,
             byteArrayOf(0x00, 0x11, 0x00, 0x01)
             byteArrayOf(0x00, 0x11, 0x00, 0x01)
         )
         )
-
-        // TODO 1-8号锁开,第三位是 是否响应,第四位是开哪个
-        val WRITE_LOCK_BUCKLE_OPEN = MBFrame(
-            FRAME_TYPE_WRITE,
-            byteArrayOf(0x00, 0x11, 0b11111111.toByte(), 0b00000000.toByte())
-        )
-
-        // TODO 1-8号锁关,第三位是 是否响应,第四位是关哪个
-        val WRITE_LOCK_BUCKLE_CLOSE = MBFrame(
-            FRAME_TYPE_WRITE,
-            byteArrayOf(0x00, 0x11, 0b11111111.toByte(), 0b11111111.toByte())
-        )
     }
     }
-
 }
 }

+ 14 - 3
app/src/main/res/layout/activity_modbus.xml

@@ -52,14 +52,25 @@
         android:gravity="center_vertical">
         android:gravity="center_vertical">
 
 
         <EditText
         <EditText
-            android:id="@+id/etIdx"
+            android:id="@+id/slaveIdx"
             android:layout_width="100dp"
             android:layout_width="100dp"
             android:layout_height="40dp"
             android:layout_height="40dp"
             android:background="#852852"
             android:background="#852852"
-            android:hint="从机下标"
+            android:hint="Slave Idx"
             android:text="0"
             android:text="0"
             android:textColorHint="@color/white"
             android:textColorHint="@color/white"
-            android:textColor="@color/white"/>
+            android:textColor="@color/white"
+            android:layout_margin="10dp"/>
+
+        <EditText
+            android:id="@+id/lockIdx"
+            android:layout_width="100dp"
+            android:layout_height="40dp"
+            android:background="#852852"
+            android:hint="Lock Idx"
+            android:textColorHint="@color/white"
+            android:textColor="@color/white"
+            android:layout_margin="10dp"/>
 
 
         <Button
         <Button
             android:id="@+id/openLockBuckle"
             android:id="@+id/openLockBuckle"