C# 智慧大棚nmodbus4

avatar
作者
筋斗云
阅读量:0

窗体 :图表(chart):

下载第三方:

nmodbus4:可以实现串口直连,需要创建串口对象设置串口参数配置Serialport

如果需要把串口数据表通过tcp进行网口传递 需要创建tcpclient对象

ModbusSerialMaster master; // 温度的数据源 // Collection 集合 DataPointCollection wenDuValues; // 温度数据源 DataPointCollection shiDuValues; // 氧气数据源 DataPointCollection yangQiValues; public Form1() {     InitializeComponent();     // 创建TCPClient对象     TcpClient tcp = new TcpClient();     tcp.Connect("192.168.107.5",8014); // 连接服务器       // CreateRtu 创建rtu通信对象,     // 方法有三个重载函数     // 1 CreateRtu(tcpclient) 用的网口通信 HY-E504串口服务器     // 2 CreateRtu(serialport) 用的串口直连 485转换器     // 以后使用master进行读取指定地址数据即可     master = ModbusSerialMaster.CreateRtu(tcp); //      // 初始化数据源     wenDuValues = chart1.Series[0].Points;     shiDuValues = chart1.Series[1].Points; // 把图表湿度point默认值赋值给变量     yangQiValues = chart1.Series[2].Points;  }  double 温度; double 湿度; double 氧气; private void timer1_Tick(object sender, EventArgs e) {     // 获取温度 湿度 氧气数据     string time = DateTime.Now.ToString("HH:mm:ss");     // 判断复选框是否选中     if (checkBox1.Checked) // 选中温度     {         // 取出温度数据         // ReadHoldingRegisters 读取寄存器的数据         // 参数1 设备地址 一般都是1         // 参数2 寄存器地址 温度寄存器地址0003         // 参数3  读取寄存器个数,读取一个温度数据个数就为1         ushort[] values = master.ReadHoldingRegisters(1, 0x03, 1);// values 就是数据         float value = values[0] / 10F;// values[0]就是温度数据         // 图标添加xy轴;x轴是时间 y轴是温度值         wenDuValues.AddXY(time, value);         温度 = value; // 记录最后一个值     }     else // 未选中温度的时候     {         int index = wenDuValues.AddXY(time, 温度); // 返回值是集合末尾的索引值         // 把当前点设置为透明         DataPoint dp = wenDuValues[index];         dp.Color = Color.Transparent; // 设置透明颜色          //wenDuValues[温度];     }      // 处理湿度的     if (checkBox2.Checked) // 选中湿度     {         // 读取湿度数据         ushort[] data = master.ReadHoldingRegisters(1, 0x02, 1);         float s = data[0] * 0.1F;         shiDuValues.AddXY(time, s);// 添加xy轴         湿度 = s;     }     else     {         // 未选择湿度         int index = shiDuValues.AddXY(time, 湿度);         DataPoint p = shiDuValues[index];         p.Color = Color.Transparent;     }      // 处理湿氧气     if (checkBox2.Checked) // 选中湿度     {         // 读取湿度数据         ushort[] data = master.ReadHoldingRegisters(1, 0x0B, 1);         float s = data[0] * 0.1F;         yangQiValues.AddXY(time, s);// 添加xy轴         氧气 = s;     }     else     {         // 未选择湿度         int index = yangQiValues.AddXY(time, 氧气);         DataPoint p = yangQiValues[index];         p.Color = Color.Transparent;     }  }  // 开始定时器 停止定时器 private void button2_Click(object sender, EventArgs e) {     if (timer1.Enabled) // 如果等于true 定时器可用     {         timer1.Stop(); // 关闭定时器     }     else // 默认情况定时器不可用     {         timer1.Start();// 开启定时器     } }  // 设置事件间隔 private void button1_Click(object sender, EventArgs e) {     timer1.Interval = int.Parse(textBox1.Text); } } }

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!