0%

概述

Modbus 通信协议

Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。
通俗的讲,Modbus的本质就是通过寄存器、线圈与其它设备交换数据。

Modbus分类

  • Modbus TCP
  • Modbus RTU
  • Modbus ASCII

Modbus是一簇协议,包含RTU、TCP、ASCII,Modbus并没有规定物理层。标准的Modicon控制器使用RS232C实现串行的Modbus协议。ASCII与RTU协议规定了信息、数据的结构、命令和应答的方式,采用Master/Slave方式,即Master端发出数据请求信息,Slave端接收到正确信息后就可以发送数据到Master端以响应请求;Master端也可以直接发送信息修改Slave端的数据,实现双向读写。
Modbus协议会对数据数据进行校验,ASCII采用LRC校验,RTU采用16位CRC校验,TCP由于可靠传输无需校验。
这三者的具体实现也有会所不同,TCP与RTU方式差别较小,具体参照详细。
总的来说Modbus TCP/RTU/ASCII这三者是Modbus协议的具体实现。最显而易见的就是,TCP通过以太网传输,RTU通过RS232C或RS422/RS485传输。

阅读全文 »

Node-Red 非常厉害的物联网工具,基于流操作,可以处理各种各样的网络协议和网络操作,至于他的介绍我这里就不详述。只大概描述一下我的安装过程,主要是记录设置用户密码详细过程。

安装(操作系统 ubuntu 24.04 LTS)

基于物理机安装

1
sudo apt update
1
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - &&\
1
sudo apt-get install -y nodejs
1
sudo apt install  npm
1
sudo npm install -g --unsafe-perm node-red

基于docker

1
2
3
4
mkdir /home/iotts/node_red
cd /home/iotts/
sudo chmod 777 node_red
sudo docker run -d --restart always -p 1880:1880/tcp -v /home/iotts/node_red:/data --name nodered nodered/node-red

开机自启动

物理机安装的话需要设置开机自启

阅读全文 »

一、debian配置静态ip 生效

在Linux系统中,配置静态IP可以确保网络连接的稳定性和安全性。为了使debian配置静态IP生效,需要先检查系统上是否安装network-manager或ifupdown这两个网络管理工具。如果未安装,可以通过以下命令进行安装:

1
2
sudo apt-get install network-manager           # 安装network-manager
sudo apt-get install ifupdown # 安装ifupdown

接下来,需要修改网络配置文件。

以使用network-manager为例,需要修改/etc/network/interfaces.wlan0文件:

1
sudo nano /etc/network/interfaces.wlan0        # 打开配置文件

在文件中添加以下内容,注意将相应的IP地址、网关等修改为自己的网络信息:

1
2
3
4
5
6
auto wlan0
iface wlan0 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8

保存文件后,执行以下命令以使配置生效:

阅读全文 »

总结OpenWRT目录结构,然后创建feeds,并创建package。

编译package,并安装到target进行测试。

1 OpenWRT目录结构

OpenWRT的目录结构解释如下,高亮部分是编译后创建的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
├── bin--编译完成后ipk和image文件存放在此。
│ ├── packages--存放base/luci/packages/routing/telephony等编译出来的ipk包。
│ └── targets--目标镜像文件。
├── BSDmakefile
├── build_dir--下载的软件包解压到此,然后进行编译。
│ ├── hostpkg--编译在host环境中使用的工具。
│ ├── target-aarch64_cortex-a53_musl--编译在target环境中使用的工具。
│ └── toolchain-aarch64_cortex-a53_gcc-11.2.0_musl--交叉工具链的编译。
├── config--menuconfig配置文件。
│ ├── check-uname.sh
│ ├── Config-build.in
│ ├── Config-devel.in
│ ├── Config-images.in
│ └── Config-kernel.in
├── Config.in--配置文件的总入口。
├── COPYING
├── dl--下载的软件包存放在此目录。
│ ├── attr-2.5.1.tar.gz
...
│ └── zstd-1.5.5.tar.gz
├── feeds--根据feeds.conf.default生成的OpenWRT的package来源地。
│ ├── luci
│ ├── luci.index -> luci.tmp/.packageinfo
│ ├── luci.targetindex -> luci.tmp/.targetinfo
│ ├── luci.tmp
│ ├── packages
│ ├── packages.index -> packages.tmp/.packageinfo
│ ├── packages.targetindex -> packages.tmp/.targetinfo
│ ├── packages.tmp
│ ├── routing
│ ├── routing.index -> routing.tmp/.packageinfo
│ ├── routing.targetindex -> routing.tmp/.targetinfo
│ ├── routing.tmp
│ ├── telephony
│ ├── telephony.index -> telephony.tmp/.packageinfo
│ ├── telephony.targetindex -> telephony.tmp/.targetinfo
│ └── telephony.tmp
├── feeds.conf.default
├── include--存放mk文件。
│ ├── autotools.mk
...
│ └── version.mk
├── key-build
├── key-build.pub
├── key-build.ucert
├── key-build.ucert.revoke
├── LICENSES
│ ├── BSD-2-Clause
│ ├── BSD-3-Clause
│ ├── GPL-1.0
│ ├── GPL-2.0
│ ├── ISC
│ ├── Linux-syscall-note
│ └── MIT
├── Makefile--make默认的配置文件。
├── package--不同类别package的makefile文件和menuconfig配置文件。
│ ├── base-files
│ ├── boot
│ ├── devel
│ ├── feeds
│ ├── firmware
│ ├── kernel
│ ├── libs
│ ├── Makefile
│ ├── network
│ ├── system
│ └── utils
├── README.md
├── rules.mk
├── scripts--编译过程中使用的脚本文件。
│ ├── arm-magic.sh
...
│ └── xxdi.pl
├── staging_dir--生成最终文件系统之前的临时安装目录。
│ ├── host
│ ├── hostpkg
│ ├── packages
│ ├── target-aarch64_cortex-a53_musl
│ └── toolchain-aarch64_cortex-a53_gcc-11.2.0_musl
├── target--imagebuilder、linux、sdk、toolchain的makefile和配置文件。
│ ├── Config.in
│ ├── imagebuilder
│ ├── linux
│ ├── llvm-bpf
│ ├── Makefile
│ ├── sdk
│ └── toolchain
├── tmp
│ ├── a.out
│ ├── info
│ ├── opkg_install_list
│ └── test.fs
├── toolchain--编译gcc/binutils/gdb/glibc/mold/must/nasm等工具的makefile文件和配置文件。
│ ├── binutils
│ ├── build_version
│ ├── Config.in
│ ├── fortify-headers
│ ├── gcc
│ ├── gdb
│ ├── glibc
│ ├── info.mk
│ ├── kernel-headers
│ ├── Makefile
│ ├── musl
│ ├── nasm
│ └── wrapper
└── tools--编译过程中所使用到的工具。
├── autoconf
...
└── zstd
阅读全文 »

1
2
3
4
5
6
7
8
# 查找当前位于前台的应用包名(Windows)
adb shell dumpsys window | findstr mCurrentFocus

# 查找 pid(使用上一步查到的包名)
adb shell pidof com.CompanyName.AvaloniaTest

# 显示日志(使用上一步查到的 pid)
adb logcat --pid=202020

CAN总线的滤波器设置就像给总线上的节点设置了一层过滤网,只有符合要求的CAN信息帧才可以通过,其余的一概滤除。

在验收滤波器的帮助下,只有当接收信息中的识别位和验收滤波器预定义的值相等时,CAN 控制器才允许将已接收信息存入RXFIFO。

验收滤波器由验收代码寄存器(ACRn)和验收屏蔽寄存器AMRn 定义,要接收的信息的位模式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义某些位为“不影响”,即可为任意值。

阅读全文 »

开发环境

android6.0.1

开发板

全志A33带网口的开发板

以太网共享有两个方向的理解

1、通过以太网给android设备供网,对应设置中的Ethernet选项
2、android设备通过以太网给其它终端供网,对应设置中的便携式热点以太网共享-ethernet tethering

实现方法

通过adb shell settings list global 来获取设置项

阅读全文 »

网口PHY芯片对 TX 和 RX 信号有两种驱动方式:电压驱动电流驱动。不同的驱动方式决定了 PHY 在与变压器连接的时候,变压器的中心抽头的接法。电流驱动型的 PHY,变压器的中心抽头接电源,电源大小即为 PHY 芯片的 UTP 端口电压;电压驱动型的 PHY,变压器的中心抽头接电容到地。

在不使用变压器的情况下将以太网收发器(PHY)电容耦合在一起是一种常见的做法,以减少BOM成本和PCB面积。
本文描述了10/100/1000以太网设备的电容耦合方法。

阅读全文 »

​ 本人使用基于MT7628的开发板运行openwrt lede17.01系统,单独使用有线wan、无线路由wwan和4G功能时都很正常。但是当同时使用以上3种网络接口时,发现接口之间并不能动态切换,当拔掉网线时,即使wifi和4g都正常连接,但是路由器不能ping通外网。当wifi连接断了,也会影响剩余网络接口的通信。

阅读全文 »