惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
博客园_首页
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
宝玉的分享
宝玉的分享

博客园 - Gu

上位机开发人员真的需要物理 PLC 或博途吗?我们仅仅需要一个模拟 S7 通讯的工具 检查采集程序心跳的程序挂了。看来得套娃,再来一个检测检测程序的程序 Web.INI vue前端项目,默认request 30秒超时,如何设置某个导出动作1分钟才超时 提示coreclr.dll 出错?栈溢出? .Net 6使用轻量级任务调度Coravel实践 Blazor 循环的迷思 Grafana 可视化图表 mysqldump 导出批量忽略某些表的bat脚本 cron表达式的讲解 若依 自定义注解@Log,实现aop java 处理日期时间有多个类,用哪个比较好 文件同步工具 thingsboard 接口 圆度和径向跳动,直线度的区别 安装thingsboard 3.7 dotNET_Reactor 混淆net程序时, 一些全局变量要加上volatile 修饰符, 不然优化到不会改变 Ant Design Blazor Table 组件的 自定义分页样式, 显示全部记录数,ShowTotal 安全可靠测评结果公告(2023年第1号) 2023-12-26 来源: 中国信息安全测评中心 Blazor 和Known 框架学习
西门子PLC Modus TCP通讯
Gu · 2024-07-05 · via 博客园 - Gu

S7-1200 与 S7-1200 Modbus TCP 通信例程 (siemens.com.cn)

西门子S7-1200建立ModbusTCP通讯数据交互实例(从站+主站)_西门子1200modbustcp-CSDN博客

服务器端: 

客户端读取:

客户端写入:

 =========================================================================================================

Transaction Identifier: 0000
Protocol Identifier: 0000
Length: 0006
Unit Identifier: 01
Function Code: 03
Starting Address: 0064
Quantity of Registers: 0001

十六进制命令:
00 00 00 00 00 06 01 03 00 64 00 01
以下是各字段的解释:

Transaction Identifier(事务标识符): 这是一个随机或递增的值,用于匹配请求和响应。在这里,我们使用0000作为示例,但在实际应用中,应该使用一个唯一的值。
Protocol Identifier(协议标识符): 对于MODBUS TCP,这个值始终是0000。
Length(长度): 指示后续字段的字节数。在这个例子中,长度是6(功能码 + 起始地址 + 寄存器数量),因此是0006。
Unit Identifier(单元标识符): 这是MODBUS服务器地址,通常为01,但如果网络上有多台服务器,则可能不同。
Function Code(功能码): 03表示读取保持寄存器。
Starting Address(起始地址): 0064是100的十六进制表示,这是要读取的第一个寄存器的地址。
Quantity of Registers(寄存器数量): 0001表示要读取1个寄存器

=========================================================================================================

假设客户端请求读取从地址100开始的10个保持寄存器(功能码03),服务端返回的数据可能如下:

Transaction Identifier: 0x0001
Protocol Identifier: 0x0000
Length: 0x0013 (19字节,包括单元标识符、功能码和数据)
Unit Identifier: 0x01
Function Code: 0x03
Byte Count: 0x14 (20字节的数据)
Register Values: 2字节 * 10寄存器
如果一切正常,服务端返回的数据可能如下:

00 01 00 00 00 13 01 03 14 [寄存器值1] [寄存器值2] ... [寄存器值10]

假设客户端请求读取从地址40100开始的30个保持寄存器,服务端返回的数据可能如下:

00 63 是递增的值,事务标识符
00 00 协议标识符: 对于MODBUS TCP,这个值始终是0000。
00 47 表示后面字节的长度
FF 单元标识符,FF通常是广播地址
17 功能码:17(十六进制)等于 23(十进制),它不是一个标准的MODBUS功能码(自指令版本 V6.0 起,“MB_CLIENT”支持此 Modbus 功能在一个作业中对远程设备的保持寄存器进行写入和读取。)
9C C2 是结束地址40130的16进制
00 1E 是长度 30
9C A4 是起始地址40100的16进制
00 1E 是长度 30
3C 是返回字节长度60

00 63 00 00 00 47 FF 17 9C C2 00 1E 9C A4 00 1E 3C
01 23 00 01 00 88 00 44 00 33 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00