|
|
@@ -17,14 +17,16 @@ import kotlinx.coroutines.channels.Channel
|
|
|
*/
|
|
|
class ModBusManager(
|
|
|
// 底层串口管理器
|
|
|
- val portManager: PortManager,
|
|
|
+ val portManager: PortManager?,
|
|
|
// 是否输出详细信息
|
|
|
val verbose: Boolean = false
|
|
|
) {
|
|
|
- @Volatile private var running = true
|
|
|
+ @Volatile
|
|
|
+ private var running = true
|
|
|
|
|
|
/** 正在发送的任务 */
|
|
|
- @Volatile private var sending: FrameTask? = null
|
|
|
+ @Volatile
|
|
|
+ private var sending: FrameTask? = null
|
|
|
|
|
|
/** 等待发送队列 */
|
|
|
private val pendings = Channel<FrameTask>(Channel.UNLIMITED)
|
|
|
@@ -39,7 +41,7 @@ class ModBusManager(
|
|
|
|
|
|
init {
|
|
|
// 串口监听,回调在单独线程中执行
|
|
|
- portManager.listen { res ->
|
|
|
+ portManager?.listen { res ->
|
|
|
if (verbose) LogUtil.i("接收:${res.toHexStrings()}")
|
|
|
synchronized(lock) {
|
|
|
sending?.run {
|
|
|
@@ -74,7 +76,7 @@ class ModBusManager(
|
|
|
synchronized(lock) {
|
|
|
sending?.run {
|
|
|
if (shouldSend()) {
|
|
|
- if (portManager.send(req)) {
|
|
|
+ if (portManager?.send(req) == true) {
|
|
|
afterSent()
|
|
|
if (verbose) LogUtil.i("发送:${req.toHexStrings()}")
|
|
|
} else {
|
|
|
@@ -110,7 +112,7 @@ class ModBusManager(
|
|
|
fun stop() {
|
|
|
running = false
|
|
|
job?.cancel()
|
|
|
- portManager.close()
|
|
|
+ portManager?.close()
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -182,11 +184,25 @@ class ModBusManager(
|
|
|
sendToAll(frame) {
|
|
|
if (running) {
|
|
|
listener(it)
|
|
|
- Executor.delayOnIO({ if (running) repeatSendToAll(frame, interrupt, listener, delayMills) }, delayMills)
|
|
|
+ Executor.delayOnIO({
|
|
|
+ if (running) repeatSendToAll(
|
|
|
+ frame,
|
|
|
+ interrupt,
|
|
|
+ listener,
|
|
|
+ delayMills
|
|
|
+ )
|
|
|
+ }, delayMills)
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- Executor.delayOnIO({ if (running) repeatSendToAll(frame, interrupt, listener, delayMills) }, delayMills)
|
|
|
+ Executor.delayOnIO({
|
|
|
+ if (running) repeatSendToAll(
|
|
|
+ frame,
|
|
|
+ interrupt,
|
|
|
+ listener,
|
|
|
+ delayMills
|
|
|
+ )
|
|
|
+ }, delayMills)
|
|
|
}
|
|
|
return this
|
|
|
}
|