网站首页 > 博客文章 正文
一年多没有敲代码了,最近暑假在做一个项目,这里记录一下我遇到过的一些问题。
这是我使用的工具和开发环境:
- Modbus Poll
- Modbus Slave
- NModbus4
- VS2019开发环境
- C# WPF
NModbus4
引用NMdbus4,modbus RTU使用下面这个就OK
NMdbus4库传送门
using Modbus.Device;
开发流程
第一步,实现打开串口,modbus建立主站
//全局变量
ModbusSerialMaster master;//主站
byte slaveID = 1;//设备站号
ushort address = 0;//寄存器地址
ushort[] Registers = new ushort[30];//用来保存寄存器的数据
serialPort.PortName = COM_ComboBox.Text;//串口号
serialPort.BaudRate =Convert.ToInt32(BaudRate_ComboBox.Text);//波特率
serialPort.DataBits = Convert.ToInt16(DaTaBit_ComboBox.Text);//数据位
serialPort.Parity =(Parity)Convert.ToInt16(ParityBit_ComboBox.Text);//校验位
serialPort.StopBits = (StopBits)Convert.ToDouble(StopBit_Combobox.Text);//停止位
serialPort.Open(); //串口打开
master = ModbusSerialMaster.CreateRtu(serialPort); //建立连接
master.Transport.Retries = 3; //尝试三次
master.Transport.ReadTimeout = 1000; //milliseconds 响应时间
第二步,使用03功能码相对应的方法,03的功能是:读保持寄存器
Registers = master.ReadHoldingRegisters(slaveID, address, 30);//功能码03(从站地址,寄存器地址,读几个寄存器)
//Registers 收到数据,直接更新到界面就好了
//在这里朋友们注意一下,这个方法是一次性读完的。我之前就是不注意添加了for循环读取,结果总引发事件,提示bug
如果要实时读取,可以使用WPF界面专用的的定时器
using System.Windows.Threading;
public MainWindow()
{
InitializeComponent();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);//数据接收
}
DispatcherTimer dispatcherTimer = new DispatcherTimer();//计时器
//这里的代码放Button事件里,因为我是调试,所以我是跟串口打开,放一起的
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1);//定时
dispatcherTimer.Start();
private void dispatcherTimer_Tick(object sender, EventArgs e)//定时引发事件
{
Registers = master.ReadHoldingRegisters(slaveID, address, 30);//功能码03(从站地址,寄存器地址,读几个寄存器)
//Registers[这里我是直接对应寄存器地址了,这样方便]
CurrentSpeed.Content = "电机当前速度:" + Registers[0x10].ToString();
SystemVoltage.Content = "系统电压:" + Registers[0x11].ToString() + " V";
SystemTemp.Content = "系统温度:" + Registers[0x12].ToString() + " ℃";
SystemCurrent.Content = "系统电流:" + Registers[0x0f].ToString() + " mA";
}
如图,这就是我模拟调试的结果
猜你喜欢
- 2024-10-31 英雄联盟手游错误代码100008什么原因?LOL手游错误代码解决办法
- 2024-10-31 玩转网络自动化之ntc_templates模块
- 2024-10-31 C#程序与单片机通信时,如何自动初始化串口(2)?
- 2024-10-31 真实的线上故障处理案例(在线故障检测时应注意什么)
- 2024-10-31 问题反馈:为什么Cydia加载出现那么多红色错误?
- 2024-10-31 Norland诺兰德连接超时连接报错?一招解决连接问题
- 2024-10-31 处理超时订单(超时未付款)的解决方案
- 2024-10-31 第一后裔运行超时运行报错怎么办?一招解决运行问题
- 2024-10-31 基于 PTS 压测轻松玩转问题诊断(tps压测 指什么)
- 2024-10-31 DNS故障的几种常见原因及解决方法
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)