Quellcode durchsuchen

【框架搭建】update

yuanan vor 2 Monaten
Ursprung
Commit
6a442cecf8
13 geänderte Dateien mit 145 neuen und 159 gelöschten Zeilen
  1. 2 1
      .gitignore
  2. 68 134
      Cargo.lock
  3. 3 5
      Cargo.toml
  4. 2 2
      emu-config.yaml
  5. 5 1
      src/cmd/cmd.rs
  6. 5 6
      src/ems/bms/bms.rs
  7. 4 0
      src/ems/mod.rs
  8. 5 6
      src/ems/pcs/pcs.rs
  9. 3 3
      src/ems/service.rs
  10. 0 0
      src/internal/log/mod.rs
  11. 1 1
      src/internal/mod.rs
  12. 46 0
      src/internal/utils/log.rs
  13. 1 0
      src/internal/utils/mod.rs

+ 2 - 1
.gitignore

@@ -1,2 +1,3 @@
 /target
-.idea
+.idea
+logs/

+ 68 - 134
Cargo.lock

@@ -17,6 +17,15 @@ version = "2.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
 
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
 [[package]]
 name = "android-tzdata"
 version = "0.1.1"
@@ -247,6 +256,15 @@ version = "0.8.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
 
+[[package]]
+name = "crc32fast"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
+dependencies = [
+ "cfg-if",
+]
+
 [[package]]
 name = "croner"
 version = "2.1.0"
@@ -271,21 +289,22 @@ version = "0.8.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
 
-[[package]]
-name = "deranged"
-version = "0.3.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
-dependencies = [
- "powerfmt",
-]
-
 [[package]]
 name = "equivalent"
 version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
 
+[[package]]
+name = "flate2"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
 [[package]]
 name = "futures"
 version = "0.3.31"
@@ -443,17 +462,16 @@ name = "inpower-iot-mgc-rs"
 version = "0.1.0"
 dependencies = [
  "anyhow",
+ "chrono",
  "clap",
  "log",
  "serde",
  "serde_yml",
+ "tklog",
  "tokio",
  "tokio-cron-scheduler",
  "tokio-modbus",
  "tokio-serial",
- "tracing",
- "tracing-appender",
- "tracing-subscriber",
 ]
 
 [[package]]
@@ -488,12 +506,6 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "lazy_static"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
-
 [[package]]
 name = "libc"
 version = "0.2.169"
@@ -598,22 +610,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "nu-ansi-term"
-version = "0.46.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
-dependencies = [
- "overload",
- "winapi",
-]
-
-[[package]]
-name = "num-conv"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
-
 [[package]]
 name = "num-derive"
 version = "0.4.2"
@@ -649,12 +645,6 @@ version = "1.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
 
-[[package]]
-name = "overload"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
-
 [[package]]
 name = "parking_lot"
 version = "0.12.3"
@@ -690,12 +680,6 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
-[[package]]
-name = "powerfmt"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
-
 [[package]]
 name = "proc-macro2"
 version = "1.0.93"
@@ -723,6 +707,35 @@ dependencies = [
  "bitflags 2.8.0",
 ]
 
+[[package]]
+name = "regex"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+
 [[package]]
 name = "rustc-demangle"
 version = "0.1.24"
@@ -800,15 +813,6 @@ dependencies = [
  "winapi",
 ]
 
-[[package]]
-name = "sharded-slab"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
-dependencies = [
- "lazy_static",
-]
-
 [[package]]
 name = "shlex"
 version = "1.3.0"
@@ -907,44 +911,18 @@ dependencies = [
 ]
 
 [[package]]
-name = "thread_local"
-version = "1.1.8"
+name = "tklog"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
+checksum = "7712822534ae94f7bf122243dbf9d6474f86a1c0a5d4cdaa36fd7bf074b61730"
 dependencies = [
- "cfg-if",
+ "chrono",
+ "crossbeam-channel",
+ "flate2",
+ "log",
  "once_cell",
-]
-
-[[package]]
-name = "time"
-version = "0.3.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
-dependencies = [
- "deranged",
- "itoa",
- "num-conv",
- "powerfmt",
- "serde",
- "time-core",
- "time-macros",
-]
-
-[[package]]
-name = "time-core"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
-
-[[package]]
-name = "time-macros"
-version = "0.2.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de"
-dependencies = [
- "num-conv",
- "time-core",
+ "regex",
+ "tokio",
 ]
 
 [[package]]
@@ -1047,18 +1025,6 @@ dependencies = [
  "tracing-core",
 ]
 
-[[package]]
-name = "tracing-appender"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf"
-dependencies = [
- "crossbeam-channel",
- "thiserror 1.0.69",
- "time",
- "tracing-subscriber",
-]
-
 [[package]]
 name = "tracing-attributes"
 version = "0.1.28"
@@ -1077,32 +1043,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
 dependencies = [
  "once_cell",
- "valuable",
-]
-
-[[package]]
-name = "tracing-log"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
-dependencies = [
- "log",
- "once_cell",
- "tracing-core",
-]
-
-[[package]]
-name = "tracing-subscriber"
-version = "0.3.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
-dependencies = [
- "nu-ansi-term",
- "sharded-slab",
- "smallvec",
- "thread_local",
- "tracing-core",
- "tracing-log",
 ]
 
 [[package]]
@@ -1135,12 +1075,6 @@ dependencies = [
  "getrandom",
 ]
 
-[[package]]
-name = "valuable"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
-
 [[package]]
 name = "version_check"
 version = "0.9.5"

+ 3 - 5
Cargo.toml

@@ -20,13 +20,11 @@ tokio-cron-scheduler = "0.13.0"
 tokio-modbus = { version = "0.16.1", features = ["rtu", "tcp"] }
 # tokio 异步串口支持
 tokio-serial = "5.4.5"
+# 时间工具
+chrono = "0.4.39"
 # 日志框架
-tracing = "0.1.41"
-# 日志框架
-tracing-subscriber = "0.3.19"
+tklog = "0.2.9"
 # 日志框架
 log = "0.4.25"
-# 日志框架
-tracing-appender = "0.2.3"
 
 

+ 2 - 2
emu-config.yaml

@@ -3,5 +3,5 @@ emu:
   pcs:
   bms:
   ems:
-    # 读取间隔
-    read_interval: 1000
+    # 读取间隔, 单位ms
+    read_interval: 1000

+ 5 - 1
src/cmd/cmd.rs

@@ -15,7 +15,11 @@ pub async fn cmd() {
     match init_config(args.config).await {
         Ok(()) => {
             println!("{:?}", EMU_CONFIG.get().unwrap());
-            ems::service::Ems::new().start_services().await.unwrap()
+            ems::service::Ems::new()
+                .await
+                .start_services()
+                .await
+                .unwrap()
         }
         Err(e) => {
             eprintln!("配置加载失败: {}", e.to_string());

+ 5 - 6
src/ems/bms/bms.rs

@@ -1,7 +1,8 @@
 use crate::ems::service::Service;
+use crate::internal::utils;
 use anyhow::Error;
+use log::info;
 use std::time::Duration;
-use tokio::sync::mpsc;
 use tokio::task::JoinHandle;
 
 pub struct Bms {}
@@ -9,24 +10,22 @@ pub struct Bms {}
 impl Bms {
     /// 初始化BMS
     pub async fn new() -> Self {
-        let (tx, mut rx) = mpsc::channel(10);
-        println!("Bms初始化成功");
+        utils::log::init_log("inpower_iot_mgc_rs::ems::bms::*", "logs/bms.log").await;
+        info!("BMS初始化成功");
         Bms {}
     }
 }
 
 impl Service for Bms {
     fn run(&self) -> Result<JoinHandle<()>, Error> {
-        let handle = tokio::spawn(async {
+        let handle: JoinHandle<()> = tokio::spawn(async {
             let read_handle = tokio::spawn(async {
                 loop {
-                    println!("read_handle");
                     tokio::time::sleep(Duration::from_secs(3)).await;
                 }
             });
             let write_handle = tokio::spawn(async {
                 loop {
-                    println!("write_handle");
                     tokio::time::sleep(Duration::from_secs(1)).await;
                 }
             });

+ 4 - 0
src/ems/mod.rs

@@ -1,3 +1,7 @@
 pub mod bms;
 pub mod pcs;
 pub mod service;
+
+pub trait Job: Send + Sync {
+    fn do_some(&self);
+}

+ 5 - 6
src/ems/pcs/pcs.rs

@@ -1,6 +1,8 @@
 use crate::cmd::config::EMU_CONFIG;
 use crate::ems::service::Service;
+use crate::internal::utils;
 use anyhow::Error;
+use log::info;
 use std::time::Duration;
 use tokio::task::JoinHandle;
 
@@ -8,14 +10,11 @@ pub struct Pcs {}
 
 impl Pcs {
     /// 初始化PCS
-    pub fn new() -> Self {
-        println!("PCS初始化成功");
+    pub async fn new() -> Self {
+        utils::log::init_log("inpower_iot_mgc_rs::ems::pcs::*", "logs/pcs.log").await;
+        info!("PCS初始化成功");
         Pcs {}
     }
-
-    // pub fn read(&self){
-    //
-    // }
 }
 
 impl Service for Pcs {

+ 3 - 3
src/ems/service.rs

@@ -25,10 +25,10 @@ pub struct Ems<'a> {
 }
 
 impl Ems<'_> {
-    pub fn new() -> Self {
+    pub async fn new() -> Self {
         let mut devices: HashMap<Device, Box<dyn Service>> = HashMap::new();
-        let pcs = Pcs::new();
-        let bms = Bms::new();
+        let pcs = Pcs::new().await;
+        let bms = Bms::new().await;
         devices.insert(PCS("PCS"), Box::new(pcs));
         devices.insert(BMS("BMS"), Box::new(bms));
         devices.get(&PCS("PCS")).unwrap().run().expect("");

+ 0 - 0
src/internal/log/mod.rs


+ 1 - 1
src/internal/mod.rs

@@ -1 +1 @@
-pub mod log;
+pub mod utils;

+ 46 - 0
src/internal/utils/log.rs

@@ -0,0 +1,46 @@
+use tklog::handle::FileMixedMode;
+use tklog::{Format, LogOption, ASYNC_LOG, LEVEL};
+
+#[inline]
+pub async fn init_log(module: &str, filename: &str) {
+    let level = if cfg!(debug_assertions) {
+        Some(LEVEL::Debug)
+    } else {
+        Some(LEVEL::Info)
+    };
+    let console = if cfg!(debug_assertions) {
+        Some(true)
+    } else {
+        Some(false)
+    };
+    ASYNC_LOG
+        //兼容官方日志门面
+        .uselog()
+        .set_mod_option(
+            //模块名称
+            module,
+            LogOption {
+                //打印等级
+                level,
+                //控制台是否打印
+                console,
+                //格式化风格
+                format: Some(Format::LevelFlag | Format::Microseconds),
+                //格式化模板
+                formatter: Some(String::from("{time} {level} {message}\n")),
+                fileoption: Some(Box::new(FileMixedMode::new(
+                    //日志文件名
+                    filename,
+                    //滚动字节数, 目前这里是1G
+                    1 << 30,
+                    //同时每天滚动
+                    tklog::MODE::DAY,
+                    //最多备份数
+                    10,
+                    //是否开启压缩
+                    true,
+                ))),
+            },
+        )
+        .await;
+}

+ 1 - 0
src/internal/utils/mod.rs

@@ -0,0 +1 @@
+pub mod log;