根据银河高低温试验箱协议读取数据

1.协议内容

8.1:通讯协议介绍
8.1.5 通讯设置
本通讯协议使用异步串行通讯方式,1 个起始位、8 个数据位、2 个停止
位、无奇偶校验数据通讯格式,其中数据位8 位,第1 位为最高位(MSB),第8
位为最低位(LSB)。
8.1.6 数据格式
通讯采用直接存取S7-200 V 存储器数据的方式,所有的参数均放置于S7-200 V存储器中,S7-200 中的数据类型为BYTE(字节)、INT(有符号整数)、WORD(无符号整数)、DWORD(无符号长整)、LONG(有符号长整)、FLOAT
(浮点数)等格式,位操作按字节方式操作,一个字节8 个位。其中BYTE 长度
为1字节;INT 和WORD为2字节,先高后低;DWORD和LONG 为4字节,
先高后低;浮点数为4字节。详细资料可参考西门子SIMATIC S7-200 可编程控
制器系统手册。
8.1.7 读参数命令
命令格式:>MMVDUUUUr
>:起始字符
MM:机号(在编程时因该转换为16进制数据)
VD:读命令
UUUU:S7200 内部V 存储器地址(在编程时因该转换为16 进制数
据)
r:回车字符 响应数据格式:<MMVDUUUUaabbccddee…r
<MMVDUUUU:响应命令头
aabbccddee:从指定的V单元开始的128字节,每2个字符代表一个字节。
r:回车字符

8.1.8 PLC地址说明

参数名称 V地址单元 数据格式 数据说明
运行状态 904 int 0 停止 1 运行 2 暂停
温度测量值 804 float 单位:℃
湿度测量值 860 float 单位:RH%

2.使用串口助手调试

  1. 串口助手设置
串口参数 参数值
波特率 9600
数据位 8
停止位 2
校验位
流控
  1. 调试截图



    命令说明 要在命令后面添加回车,否则PLC无法识别命令。
>00VD0388 :获取设备运行状态  返回结果: <00VD0388000000010000000200040000000000000000000000000000000000000000000000000000000000000000000000000000000000FA03B6000000FA0000FDDA0000
>00VD0324 :获取温度测量值 返回结果:<00VD032441EA980041EABDD541F6580041FBE0000000000044864400447EBA00000000000000000000000000000000000000000041C80000000000000000000000000000
>00VD035C :获取湿度测量值 返回结果:<00VD035C00000000000000000000000001000400000000000000000000000000000000000000000000000000000000000000000100000002000400000000000000000000

根据命令返回结果,解析数据,获取温度测量值和湿度测量值。

1.由于返回结果为16进制,需要将16进制进行状态。

2.温度测量值和湿度测量值在返回结果中的位置分别为:41EA9800和00000000,需要将这两个值转换为float类型。

3.运行状态在返回结果中的位置为:0000(截取命令后4位),转换为整数值为0。

4.温度测量值为41EA9800(截取命令后8位),转换为浮点数为:29.324219。

5.湿度测量值为00000000(截取命令后8位),转换为浮点数为:0。

3.C# 使用 SerialPort 发送命令接收数据

  1. 初始化串口信息并打开串口
        private void OpenCom()
{ // 创建SerialPort对象
serialPort = new SerialPort(txtPort.Text.Trim(), 9600, Parity.None, 8, StopBits.Two); serialPort.ReadTimeout = 1000; //串口读取超时时间
serialPort.WriteTimeout = 1000; //串口写入超时时间
// 打开串口
serialPort.Open();
}
  1. 发送命令并接收数据

重点:将字符串转换为ASCII码字节数组
byte[] asciiBytes = Encoding.ASCII.GetBytes(request);
如果不通过ASCII码字节数组发送,则无法正确接收数据。

public string SendOrderToPLC(string request)
{
string txt = string.Empty;
try
{
OpenCom(); // 将字符串转换为ASCII码字节数组
byte[] asciiBytes = Encoding.ASCII.GetBytes(request); // 发送字节数组
serialPort.Write(asciiBytes, 0, asciiBytes.Length);
//等待数据接收完成 数据量小等待时间可小,数据量大等待时间长
Thread.Sleep(1000); ASCIIEncoding ascii = new ASCIIEncoding();
byte[] readBuffer = new byte[serialPort.BytesToRead];
serialPort.Read(readBuffer, 0, readBuffer.Length); if (readBuffer.Length > 14)
{
txt = ascii.GetString(readBuffer); // 关闭串口
serialPort.Close();
return txt;
}
else
{
this.Invoke(new Action(() =>
{
this.labMes.Text = "No response received";
}));
serialPort.Close();
return txt;
}
}
catch (Exception ex)
{
txt = null;
this.Invoke(new Action(() =>
{
this.labMes.Text = ex.Message;
}));
return txt;
}
}
  1. 处理数据
     处理设备运行状态数据
//获取设备运行状态 ,取的是整数 所以16进制取4位;排除前面的<00VD0388命令
/*0 停止 1 运行 2 暂停
*/
var stringSub = result.Substring(9, 4);
var st = HexToDecimal(stringSub); 处理温度数据
/*温度取的是浮点数 所以16进制取8位;排除前面的 < 00VD0324命令 单位:℃
*/
var stringSub = result.Substring(9, 8);
var st = HexToDecimal(stringSub); /*湿度取的是浮点数 所以16进制取8位;排除前面的 < 00VD035C命令 单位:RH%
*/
var stringSub = result.Substring(9, 8);
var st = HexToDecimal(stringSub);

4.数据转换方法

        /// <summary>
/// 将16进制字符串转换为浮点数
/// </summary>
/// <param name="hex"></param>
/// <returns></returns>
static double HexToDecimal(string hex)
{
uint intValue = Convert.ToUInt32(hex, 16); // 将整数值转换为单精度浮点数
float floatValue = BitConverter.ToSingle(BitConverter.GetBytes(intValue), 0); // 输出结果
Console.WriteLine("Hex: " + hex);
Console.WriteLine("Float: " + floatValue);
return floatValue;
}

Modbus ASCII 获取数据的更多相关文章

  1. Android 开发 values目录里定义数组、颜色、文本、尺寸xml配置文件并且获取数据 附录Android符号转码表

    以下xml都在res/values/文件夹下创建 创建String类型array: /app/src/main/res/values/array.xml <?xml version=" ...

  2. Modbus库开发笔记:Modbus ASCII Slave开发

    与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave.对于Modbus ASCII从站来说,需要实现 ...

  3. modbus ASCII和MODBUS RTU区别

    下表是MODBUS ASCII协议和RTU协议的比较: 协议 开始标记 结束标记 校验 传输效率 程序处理 ASCII :(冒号) CR,LF LRC 低 直观,简单,易调试 RTU 无 无 CRC ...

  4. MODBUS ASCII和RTU两种模式的区别、优缺点

    转自:http://blog.sina.com.cn/s/blog_89f286ad0102uzju.html 下表是MODBUS ASCII协议和RTU协议的比较: 协议 开始标记 结束标记 校验 ...

  5. 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期

    腾讯云图片鉴黄集成到C#   官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...

  6. 实现Modbus ASCII多主站应用

    1.更新设计关于原来的协议栈在Modbus ASCII主站应用时所存在的局限性与Modbus RTU也是一样的,所以我们不分析它的不足,只讨论更新设计.我们将主站及其所访问的从站定义为通用的对象,而当 ...

  7. 1、如何抓取Modbus TCP/UDP 数据包实战

    CEIWEI最近发布了Modbus RTU Over TCP/UDP 过滤监控的新工具,下面以Modbus RTU TCP为示例,讲解如何抓取Modbus通信数据包,因为CEIWEI ModbusMo ...

  8. WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案

    近日在使用wcf的restfull架构服务时遭遇到了提交大数据的问题. 大数据包含两种情形: 1)单条数据量过大. 2)提交或获取的数据条数过多. 在测试时发现,默认设置下当单条JSON数据大于30K ...

  9. python httplib get和post获取数据

    httplib 下的 status http请求的状态  200 404 500... reason 返回答复 OK或者 FAULRE read()  读取内容 get方法: #!/usr/bin/e ...

  10. 从SQLite获取数据完成一个产品信息展示

    在ios实际开发当中,我们常常用到Core Data做为数据储存首选.但在处理一些大量复杂的数据值且数据之间相互关联的时候,这就不得不使用关系型数据库来实现.例如一个导航程序,自身应该包含大量的地图自 ...

随机推荐

  1. Xilinx-HDF的文件内容

    Xilinx-HDF文件 原文:分享:HDF文件的更多用途 Xilnx Vivado能导出HDF文件,给Xilnx SDK创建软件工程.HDF文件的还可以有更多用途. HDF文件是一个zip文件,可以 ...

  2. 价破天荒!99元国产ARM工业“评估板”再袭,14天限量抢购!

    上线即爆款!2000家企业选择! 凭借"79元超高性价比"."双核A7@1.2GHz"."国产化率100%"."ARM + DSP ...

  3. 我对《RAG/大模型/非结构化数据知识库类产品》技术架构的思考、杂谈

    1.前言 在6.28/29的稀土掘金开发者大会RAG专场上,我们公司CEO员外代表TorchV分享了我们在<RAG在企业应用中落地的难点与创新> 其中最后分享了两个观点: AI在应用场景落 ...

  4. Django详细笔记

    django 学习 特点 快速开发 安全性高 可伸缩性强 URL 组成部分 URL: 同意资源定位符 一个URL由以下几部分组成 scheme://host:port/path/?query-stri ...

  5. yb课堂 前端项目目录结构创建和讲解 《三十三》

    安装包 cnpm install node-sass --save-dev 启动项目:cnpm run serve 目录结构介绍 创建新目录:api/route/views 默认资源文件介绍 asse ...

  6. mybatis 逆行工程 附源码

    导读 逆向工程说白了,就可以简化开发工作量,自动生成一些死板的东西,比如POJO.映射文件等等,然后在将代码拷贝至实际工程,直接拿来用! 项目结构 GeneratorSqlMap.java impor ...

  7. 记一次 .NET某上位视觉程序 离奇崩溃分析

    一:背景 1. 讲故事 前段时间有位朋友找到我,说他们有一个崩溃的dump让我帮忙看下怎么回事,确实有太多的人在网上找各种故障分析最后联系到了我,还好我一直都是免费分析,不收取任何费用,造福社区. 话 ...

  8. AT_arc041_b 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定一个 \(N \times M\) 的矩阵,此矩阵的每一个元素都向上.下.左.右 ...

  9. 第九节 JMeter基础-高级登录【接口关联-鉴权】

    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:电商的功能:登录.加入购物车.提交订单.问题:谁把什么商品加入了购物车?这时需要把上一个接口的响应数据(登录成功后返回 ...

  10. 2024 Selenium10个替代品

    随着自动化测试需求的不断增长,Selenium作为广泛使用的自动化测试工具,虽然功能强大,但也存在一些限制和挑战.在2024年, 越来越多的替代工具涌现,它们提供了更高效.更易用的解决方案.那么,哪些 ...