网口模拟量采集卡可达到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模拟量采集卡相关推荐

  1. PLC模拟量采集在工业自动化控制中的应用

    在复杂的工业现场中,往往需要对温度.电压.电流.压力等等模拟量进行数据采集,可以借助PLC进行控制采集,但目前市场各种PLC模拟量采集模块十分多,不同的厂家不同的PLC都有自己独特的模拟量采集模块,而 ...

  2. STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)

    STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及通俗解析) ​ 利用STM32的片上外设可采集多个模拟量(如传感器数值),并在嵌入式程序中使用.如果只使用了一个通道,用时令ADC转换而后读取 ...

  3. PLC模拟量采集算法数学基础(线性传感器)

    模拟量采集库如何设计,具体算法代码请参看下面这篇博文: PLC模拟量输入 模拟量转换FC:S_ITR_RXXW_BOSS的博客-CSDN博客_s_itr模拟量采集.工业现场应用特别广泛.大部分传感器的 ...

  4. 模拟量采集软件虚拟精度提升方案

    模拟量采集软件虚拟精度提升方案 AI的数据采集精度是AI采集的重要指标,一般来说控制器的AI精度会有一个指标,比如)0.5%,这个精度是标定精度,实际AI通过高一个等级的测量系统如0.1%测量后,经过 ...

  5. Arduino UNO模拟量采集

    Arduino UNO模拟量采集 环境准备 打开arduino开发环境 观察输出结果 环境准备 准备一个滑动变阻器,Arduino uno 板一块,接线图如下: 打开arduino开发环境 编写程序代 ...

  6. Arduino初初教程7——模拟量采集

    2019独角兽企业重金招聘Python工程师标准>>> 模拟量采集需要用到模拟量器件,这里主要指一些随着环境变化输出电压值随之变化的器件,如火焰传感器.部分温度传感器.可调电阻等等 ...

  7. 树莓派拓展模拟量采集(AD)功能

    1.前言 树莓派自身不带有模拟量采集功能(A/D)功能,当需要AD功能时,常通过IIC外接一个A/D模块来实现,如8位A/D芯片PCA9685.本文首先简要介绍PCA9685特性,然后基于树莓派的Bc ...

  8. Arduino最便宜的模拟量采集

    对于大多数人而言,利用Arduino和传感器采集环境数据已经不是问题了,但是,如何控制成本问题呢? 今天我将带大家做一个最最简单的模拟值采集电路,当然这种电路早就有了,我只是引用而已. 大家常见的传感 ...

  9. C#-串口-模拟量采集软件-1

    受公司要求开发一款模拟量采集软件,可连接到串口设备进行实时的数据模拟量采集,及修改串口设备的各项参数,控制单路继电器. 具体界面: 串口设备为八通道数据采集,可根据通道工程量参数设置进行各通道的边缘计 ...

最新文章

  1. Windows PowerShell 2.0语言之字面类型系统
  2. docker 感性介绍
  3. var_export()函数的使用举例(后续添加其他的php输出函数)
  4. 客户端用javascript填充Dropdownlist,服务器端获取不到Dropdownlist的值
  5. vue深究第一弹:computed与watch的异同
  6. 微信小程序从零开始开发步骤(三)底部导航栏
  7. RabbitMQ—流量控制之内存阈值
  8. Javascript-自己定义对象转换成JSon后怎样再转换回自己定义对象
  9. mysql数据库备份(完全备份,增量备份)
  10. js如何查看元素类型
  11. 服务器控件开发之复杂属性
  12. Post与Get传值读取方法
  13. t470键盘拆解_联想ThinkPad T470拆机图解教程
  14. 计算机启动时默认输入法设置,电脑开机输入法设置 开机默认输入法设置教程...
  15. 我在2016年读到的
  16. 服务器代理跳过上网限制策略
  17. android商品上架功能实现,Android仿京东、天猫app的商品详情页的布局架构, 以及功能实现...
  18. 第一篇,从0开始安装Ubuntu
  19. 在线字典学习(Online dictionary learning for sparse coding)-机器学习
  20. 基于单片机的电子琴设计

热门文章

  1. 首创!迪桑特推出首款全掌碳板跑鞋
  2. 如何在 Mac 上愉快地使用 Docker
  3. iOS Crash崩溃异常教你查看和分析
  4. 车牌识别数据集(蓝牌、黄牌、绿牌)及相关转换代码
  5. 2018.11.3 Nescafe18 T2 太鼓达人
  6. Linux 系统性能优化思路和优化方法
  7. android毕业设计选题基于Uniapp+SSM实现的Android的健康食谱菜谱交流app
  8. HealthKit 从健康app中获取步数信息
  9. 百度拼音输入法2014官方版
  10. 动态规划的实际应用:图片压缩算法