C# TcpClient访问ModbusTCP模拟量采集卡
网口模拟量采集卡可达到10毫秒访问频率,最近项目需要更换了串口的采集卡(100ms访问频率)。
实际上也是标准的Socket通信。
1,程序界面如下:
开发界面:
运行效果:
2,添加引用
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
3,变量定义
//是否连接成功
private bool m_IsConnectOK = false;
//发送字串
private string m_CmdSend;
//TcpClient连接对象
private TcpClient m_Client;
private NetworkStream m_NetStream;
//数据缓冲
private byte[] m_SendBuffer = new byte[16];
private byte[] m_RecvBuffer = new byte[16];
//定时器:发送
private System.Threading.Timer m_ThreadSendTimer;
//启动发送
private bool m_EnableSend = false;
//定时器:接收
private System.Threading.Timer m_ThreadRecvTimer;
//启动接收
private bool m_EnableRecv = false;
4,窗体加载事件中添加代码
private void FormMain_Load(object sender, EventArgs e)
{
m_ThreadSendTimer = new System.Threading.Timer(new TimerCallback(ThreadSend_TimerCallBack), null, 500, 10);
m_ThreadRecvTimer = new System.Threading.Timer(new TimerCallback(ThreadRecv_TimerCallBack), null, 500, 6);
}
5,请求连接:
private void buttonTcpCltConn_Click(object sender, EventArgs e)
{
string serverIP = this.textBoxIPAddress.Text.Trim();
string serverPort = this.textBoxPort.Text.Trim();
try
{
m_Client = new TcpClient();
m_Client.Connect(serverIP, int.Parse(serverPort));
m_IsConnectOK = true;
m_EnableRecv = false;
SetMsgShow(serverIP + ":" + serverPort + " TcpClient连接成功.", true);
}
catch (Exception ex)
{
m_IsConnectOK = false;
SetMsgShow(serverIP + ":" + serverPort + " TcpClient连接失败:" + ex.Message, true);
}
}
6,开始采集
private void buttonTcpCltSend_Click(object sender, EventArgs e)
{
try
{
this.richTextBoxSend.Clear();
this.richTextBoxRecv.Clear();
m_CmdSend = this.textBoxCmd.Text.Trim();
m_SendBuffer = HexStrTobyte(m_CmdSend);
//private byte[] m_SendByte = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x04, 0x00, 0x00, 0x00, 0x03 };
//发送频率更改
int period = int.Parse(this.textBoxSendInterval.Text.Trim());
m_ThreadSendTimer.Change(0, period);
m_EnableSend = true;
SetMsgShow(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + ":启动定时发送", true);
}
catch (Exception ex)
{
SetMsgShow(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + ":" + ex.Message, true);
}
}
7,发送数据
private void ThreadSend_TimerCallBack(object state)
{
if (m_EnableSend) {
if (!string.IsNullOrEmpty(m_CmdSend) && m_IsConnectOK)
{
m_NetStream = m_Client.GetStream();
m_NetStream.Write(m_SendBuffer, 0, m_SendBuffer.Length);
m_NetStream.Flush();
m_EnableRecv = true;
SetMsgShow(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " - " + byteToHexStr(m_SendBuffer), true);
}
}
}
8,接收数据
private void ThreadRecv_TimerCallBack(object state)
{
while (m_EnableRecv)
{
try
{
m_NetStream = m_Client.GetStream();
int recvLen = m_NetStream.Read(m_RecvBuffer, 0, m_RecvBuffer.Length);
string recvStr = ByteToHex(recvByte);
SetMsgShow(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " -- " + recvStr, false);
}
catch (Exception ex)
{
SetMsgShow(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + ":" + ex.Message, false);
}
//带返回值:r.Result;.
m_EnableRecv = false;
}
}
提供完整源代码:https://download.csdn.net/download/mossiy/12094772
开发环境:Vs2017;模拟量输入转以太网modbus tcp数据IO网口采集模块。
C# TcpClient访问ModbusTCP模拟量采集卡相关推荐
- PLC模拟量采集在工业自动化控制中的应用
在复杂的工业现场中,往往需要对温度.电压.电流.压力等等模拟量进行数据采集,可以借助PLC进行控制采集,但目前市场各种PLC模拟量采集模块十分多,不同的厂家不同的PLC都有自己独特的模拟量采集模块,而 ...
- STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)
STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及通俗解析) 利用STM32的片上外设可采集多个模拟量(如传感器数值),并在嵌入式程序中使用.如果只使用了一个通道,用时令ADC转换而后读取 ...
- PLC模拟量采集算法数学基础(线性传感器)
模拟量采集库如何设计,具体算法代码请参看下面这篇博文: PLC模拟量输入 模拟量转换FC:S_ITR_RXXW_BOSS的博客-CSDN博客_s_itr模拟量采集.工业现场应用特别广泛.大部分传感器的 ...
- 模拟量采集软件虚拟精度提升方案
模拟量采集软件虚拟精度提升方案 AI的数据采集精度是AI采集的重要指标,一般来说控制器的AI精度会有一个指标,比如)0.5%,这个精度是标定精度,实际AI通过高一个等级的测量系统如0.1%测量后,经过 ...
- Arduino UNO模拟量采集
Arduino UNO模拟量采集 环境准备 打开arduino开发环境 观察输出结果 环境准备 准备一个滑动变阻器,Arduino uno 板一块,接线图如下: 打开arduino开发环境 编写程序代 ...
- Arduino初初教程7——模拟量采集
2019独角兽企业重金招聘Python工程师标准>>> 模拟量采集需要用到模拟量器件,这里主要指一些随着环境变化输出电压值随之变化的器件,如火焰传感器.部分温度传感器.可调电阻等等 ...
- 树莓派拓展模拟量采集(AD)功能
1.前言 树莓派自身不带有模拟量采集功能(A/D)功能,当需要AD功能时,常通过IIC外接一个A/D模块来实现,如8位A/D芯片PCA9685.本文首先简要介绍PCA9685特性,然后基于树莓派的Bc ...
- Arduino最便宜的模拟量采集
对于大多数人而言,利用Arduino和传感器采集环境数据已经不是问题了,但是,如何控制成本问题呢? 今天我将带大家做一个最最简单的模拟值采集电路,当然这种电路早就有了,我只是引用而已. 大家常见的传感 ...
- C#-串口-模拟量采集软件-1
受公司要求开发一款模拟量采集软件,可连接到串口设备进行实时的数据模拟量采集,及修改串口设备的各项参数,控制单路继电器. 具体界面: 串口设备为八通道数据采集,可根据通道工程量参数设置进行各通道的边缘计 ...
最新文章
- Windows PowerShell 2.0语言之字面类型系统
- docker 感性介绍
- var_export()函数的使用举例(后续添加其他的php输出函数)
- 客户端用javascript填充Dropdownlist,服务器端获取不到Dropdownlist的值
- vue深究第一弹:computed与watch的异同
- 微信小程序从零开始开发步骤(三)底部导航栏
- RabbitMQ—流量控制之内存阈值
- Javascript-自己定义对象转换成JSon后怎样再转换回自己定义对象
- mysql数据库备份(完全备份,增量备份)
- js如何查看元素类型
- 服务器控件开发之复杂属性
- Post与Get传值读取方法
- t470键盘拆解_联想ThinkPad T470拆机图解教程
- 计算机启动时默认输入法设置,电脑开机输入法设置 开机默认输入法设置教程...
- 我在2016年读到的
- 服务器代理跳过上网限制策略
- android商品上架功能实现,Android仿京东、天猫app的商品详情页的布局架构, 以及功能实现...
- 第一篇,从0开始安装Ubuntu
- 在线字典学习(Online dictionary learning for sparse coding)-机器学习
- 基于单片机的电子琴设计