抖音粉丝群1
『7x24小时有问必答』

  要:
C#通过ModbusTCP读取温度值。这里是Eric.Zhou的微信公众号“常州电气工程师”。

1.  硬件版本

1.1.  温度传感器

1.1.1.  控制器硬件

1,RS485通讯的温度传感器
2,艾莫迅RS485转以太网串口服务器RS485-ETH

1.2.  上位机

1.1.2.  普通电脑硬件

带有Windows系统的普通电脑,带有RJ45网口

1.1.3.  C#软件

Visual Studio 2019 Community(免费)

2.  准备工作

2.1.  通讯接线与电源

温度传感器和串口服务器都是DC24V供电。串口服务器和电脑之间是网线相连。温度传感器黄线定义为A+接到串口服务器的A+,温度传感器绿线定义为B-接到串口服务器的B-
1.png
2.2.  IP地址设定
已知艾莫迅RS485-ETH串口服务器的默认IP地址是192.168.1.12,默认端口号是502。将普通电脑的IP地址设定为同网段的IP地址,比如192.168.1.10
串口服务器,IP是在模块网页设置中对应修改,我们保持默认。
电脑的IP地址设定路径为:控制面板-->网络和共享中心-->以太网-->属性-->网络选项卡-->Internet协议版本4(TCP/IPv4)-->属性-->使用下面的IP地址(S)

2.3.  温度值的Modbus地址

查阅带RS485通讯的温度传感器的资料,得知温度值的状态寄存器数据起始地址0,字节数2.
2.png
3.  编程操作
C#中,编写一个画面,只含有一个Label控件。最终实现的效果是,这个Label实时显示当前温度。这里是Eric.Zhou的微信公众号“常州电气工程师”。

3.1.  C#的编程

C#中创建新项目,项目类型是Windows窗体应用(.Net Framework),语言为C#Windows桌面应用。
3.png
“解决方案资源管理器”中,右击新建的项目,右键快捷菜单中选中“管理NuGet程序包(N)...
4.png
选中NModbus4版本为2.1.0,点击安装。NModbus4是一个开源、免费的.Net库,专门用于C#Modbus通讯。
5.png
C#界面,拖放1Label控件。
6.png
为了让Label,循环扫描温度值,我们需要向C#界面,拖放一个定时器Timer
7.png
8.png
Form1.cs中,添加语句  using System.Net.Socket,这是一句命名空间引用指令,用于引入网络通信库,用于TCP/IP连接。添加语句using Modbus.Device.这句话很关键,引入了Modbus通讯库。用来发Modbus指令、读寄存器数据。
public partial class Form1:Form { }中,写上TcpClient client这句话的意思是,声明了一个“TcpClient通信对象”的变量,给它取名字client。写上ModbusIpMaster master这句话的意思是创建了一个Modbus主站对象。在窗口的属性页,事件选项卡中,行为-->有Load事件,双击Load,就可以跳转到窗口载入事件的代码。同样路径,有FormClosing事件,双击FormClosing,就可以跳转到窗口关闭事件的代码。
双击timer1,进入timer1的定时事件。将timer1属性的Enabled设置为True
9.png
Form1.cs的全部代码如下:
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Linq;
using  System.Text;
using  System.Threading.Tasks;
using  System.Windows.Forms;
using  System.Net.Sockets;//TcpClinent命名空间
using  Modbus.Device;
namespace  Cpp用ModbusTCP读取温度值
{
public  partial  class  Form1  : Form
{
public  Form1()
{
InitializeComponent();
}
TcpClient client;//全局变量,TCP客户端,负责网线通信
ModbusIpMaster master;//全局变量,Modbus主站,负责Modbus指令
private  void  Form1_Load(object  sender, EventArgs e)//窗口一打开,就建立//ModbusTCP连接
{
client =  new  TcpClient("192.168.1.12", 502);//串口服务器的IP和端口号
master = ModbusIpMaster.CreateIp(client);//创建Modbus主站对象,绑定刚才<font face="新宋体">//</font><font face="新宋体">//</font>TCP连接
}
private  void  timer1_Tick(object  sender, EventArgs e)
{
ushort[] inputs;//ushort是无符号16位整数
inputs = master.ReadHoldingRegisters(1,0,1);//第一位是Modbus从站站号,第////位是保持寄存器的地址,第三位是数据长度
double  temp1 = Convert.ToDouble(inputs[0]);//把读到的ushort 类型 转成 浮点数 //double
double  temp2 = temp1 / (double)10;
label1.Text = temp2.ToString();//把计算好的温度显示到窗口的label1 标签上。
}
}
}  

3.2.  调试运行

点击菜单里的“启动”,即可运行程序。如果程序没有Bug,我们可以看到运行效果如下:
当按下“启动”按钮时,Label控件,实时显示当前温度。我们可以给温度传感器加热,观察当前温度的读数变化。
10.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码