1 apt无法连接国内源
问题的根本原因是 apt源是https的,改成HTTP的就可以了
cat << EOF > /etc/apt/sources.list deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security multiverse EOF
2 给板子配置IP DNS
Ubunt可以直接用yaml文件配置IP
cat << EOF > /etc/netplan/01-network-manager-all.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses: [10.10.12.7/24,192.168.1.150/24]
gateway4: 10.10.12.250
EOF
cat << EOF > /etc/resolv.conf
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF
3 程序自启动
cat << EOF > /etc/rc.local #!/bin/bash -e #ifconfig eth0 10.10.12.7 broadcast 10.10.12.255 netmask 255.255.255.0 #sleep 3 ifconfig eth1 192.168.10.9 broadcast 192.168.10.255 netmask 255.255.255.0 sleep 5 /root/frp/frpc -c /root/frp/frpc.ini >/dev/null & energymain >/dev/console & exit 0 EOF
4 内网穿透
cat << EOF > ~/frp/frpc.ini [common] server_addr = <ip> server_port = 30100 [ssh2] type = tcp local_ip = 127.0.0.1 local_port = 26254 remote_port = 30103
5 传感器配置
1 IMS205 GPS 4800 $GPDTM,W84,,0.0,N,0.0,E,+0.0,W84*44 $GPGGA,014557.00,3215.5370,N,11935.3466,E,1,09,01,+0029,M,+005,M,,*4A $GPGLL,3215.5370,N,11935.3466,E,014557.00,A,A*67 $GPRMB,A,,,,,,,,,,,,,A*4A $GPRMC,014557.00,A,3215.5370,N,11935.3466,E,000.0,309.2,080325,07.,W,A*2A $GPVTG,309.2,T,309.2,M,000.0,N,000.0,K,A*23 $GPZDA,014557.00,08,03,2025,00,00*6A $GPAPB,A,A,,,N,,,,T,,,T,,,A*67 2 IMS206 AIS 自动识别仪 38400 !AIVDM,1,1,,A,36:`B;@P00`RNQ@BLFa3bQvIP000,0*0B !AIVDO,1,1,,,1815WE1000`SKoNBMFwt56:H04;L,0*6A !AIVDM,1,1,,A,36:d1oh00L8T<ITBOicS?wv00000,0*10 !AIVDM,1,1,,B,B6:aPkP0>R8q?@4VgjrNCwv41P06,0*49 !AIVDM,1,1,,A,H6:d810PtpLP4pLQDwK3P000000,2*37 !AIVDM,1,1,,B,B6:bMw@0:B8p9p4Vda`hCwv41P06,0*44 3 IMS204 SPEED LOG 计程仪 4800 $VDVBW,-0.01,,A,,,V,,V,,V*74 4 IMS203 ECHO SOUNDER 测深仪 4800 $SDDBT,22.2,f,6.8,M,3.7,F*3E $SDDPT,6.8,0,10*6A $PJRCU,SD,6.8,0,10,,3,FWD*12 $PJRCS,DPT,6.8,0,10,,3,FWD*43 $PJRCL,SD,9,V,V,V,V,V,V,V,V,V,V,V,V,V*13 5 IMS202 SPEED & WIND DIRECTION 风速风向 4800 $WIMWV,011,R,003,N,A*20 7 IMS208 ELECTRONIC INCLINOMETER 电子倾斜 9600 $PFEC,GPatt,,+02.2,-00.6*66
6 modbustcp 测试
#include "/opt/FriendlyARM/toolchain/6.4-aarch64/usr/include/modbus/modbus.h"
#include
#include
#include
#include
#include // 用于 std::stoi
///opt/FriendlyARM/toolchain/6.4-aarch64/usr/lib
//aarch64-cortexa53-linux-gnu-g++ modbus2.cpp -o modbus -L/opt/FriendlyARM/toolchain/6.4-aarch64/usr/lib -l modbus
int main(int argc, char *argv[]) {
// 设置 Modbus TCP 连接的 IP 和端口
const char *ip = "192.168.1.101"; // Modbus TCP 服务器的 IP 地址
int port = 504; // 默认 Modbus TCP 端口是 502
if (argc != 4) {
std::cerr << "Usage: " << argv[0] << " <0|1> " << std::endl;
return 1; // 返回错误码
}
int ntype=std::stoi(argv[1]);
int start=std::stoi(argv[2]);
int nums=std::stoi(argv[3]);
// 创建一个新的 Modbus TCP 连接
modbus_t *mb = modbus_new_tcp(ip, port);
if (mb == nullptr) {
std::cerr << "Unable to create Modbus TCP context" << std::endl;
return -1;
}
// 设置 Modbus slave 地址 (unit_id),例如 1
uint8_t slave_address = 3;
modbus_set_slave(mb, slave_address);
// 连接到 Modbus TCP 服务器
if (modbus_connect(mb) == -1) {
std::cerr << "Connection failed: " << modbus_strerror(errno) << std::endl;
modbus_free(mb);
return -1;
}
// 读取 Modbus 服务器的寄存器(例如读取 10 个保持寄存器,起始地址为 0)
if(ntype==0)
{
unsigned char tab_reg[1024];
int rc = modbus_read_bits(mb, start, nums, tab_reg); // 读取寄存器,0 为起始地址,10 为数量
if (rc == -1) {
std::cerr << "Modbus read coil failed: " << modbus_strerror(errno) << std::endl;
modbus_close(mb);
modbus_free(mb);
return -1;
}
if (nums < rc)
{
std::cerr << "Modbus read coil failed: need " << nums << "actrul: " << rc << std::endl;
nums = rc;
}
// 打印读取的寄存器值
std::cout << "Read Modbus registers:" << rc << std::endl;
for (int i = 0; i < nums; i++)
{
std::cout << "Coil " << i + start << ": " << (int)tab_reg[i] << std::endl;
}
}
else
{
uint16_t tab_reg[1024];
int rc = modbus_read_registers(mb, start, nums, tab_reg); // 读取寄存器,0 为起始地址,10 为数量
if (rc == -1) {
std::cerr << "Modbus read failed: " << modbus_strerror(errno) << std::endl;
modbus_close(mb);
modbus_free(mb);
return -1;
}
// 打印读取的寄存器值
std::cout << "Read Modbus registers:" << rc << std::endl;
for (int i = 0; i < nums; i++)
{
std::cout << "Register " << i + start << ": " << tab_reg[i] << std::endl;
}
}
// 关闭连接并释放资源
modbus_close(mb);
modbus_free(mb);
return 0;
}
Mr.Zhang
