串口通讯modbus协议学习笔记
Modbus通讯笔记注意事项

Modbus通讯笔记注意事项Modbus寻址Modbus地址通常是包含数据类型和偏移量的5个或6个字符值。
第一个或前两个字符决定数据类型,最后的四个字符是符合数据类型的一个适当的值。
Modbus主设备指令能将地址映射至正确的功能,以便发送到从站。
1 Modbus主站寻址Modbus主设备指令支持下列Modbus地址:(1) 00001至09999是离散输出(线圈)。
(2) 10001至19999是离散输入(触点)。
(3) 30001至39999是输入寄存器(通常是模拟量输入)。
(4) 40001至49999是保持寄存器。
所有Modbus地址均以1为基位,表示第一个数据值从地址1开始。
有效地址范围将取决于从站。
不同的从站将支持不同的数据类型和地址范围。
2 Modbus从站寻址Modbus从站指令支持以下地址:(1) 000001至000128是实际输出,对应于Q0.0——Q15.7。
(2) 010001至010128是实际输入,对应于I0.0——丨15.7。
(3) 030001至030032是模拟输入寄存器,对应于AIW0至AIW2。
(4) 040001至04XXXX是保持寄存器,对应于V区。
Modbus从站协议允许您对Modbus主站可访问的输入、输出、模拟量输入和保持寄存器(V区)的数量进行限定。
MBUS_INIT指令的参数MaxlQ指定Modbus主站允许访问的实际输入或输出(I或Q)的最大数量。
MBUS_INIT指令的MaxAl参数指定Modbus主站允许访问的输入寄存器(A丨W)的最大数量。
MBUS_INIT指令的MaxHold参数指定Modbus主站允许访问的保持寄存器(V存储区字)的最大数MBUS_CTRL 指令西门子Modbus主站协议库包括两条指令:MBUS_CTRL指令和MBUS_MSG指令。
MBUS_CTRL指令用于初始化主站通信,MBUS_MSG指令(或用于端口1的MBUS_MSG_P1)用于启动对Modbus从站的请求并处理应答。
串口通讯与MODBUS协议

串口通讯与MODBUS协议1. 基本的通讯方式基本的通讯方式有并行通讯和串行通讯两种。
并行通信:是指数据的各位同时进行传送的通信方式。
串行通信:是指数据一位一位顺序传送的通信方式。
2. 串行通讯的两种方式串行通信的两种基本形式:同步通信和异步通信。
异步通信所传输的数据帧格式是由1个起始位、1~9个数据位、1~2个停止位组成,依靠起始位和停止位保持同步;同步通信所传输数据帧格式是由多个字节组成的一个帧,每个帧都有两个(或一个)同步字符作为起始位以触发同步时钟开始发送或接收数据。
3. 根据传送方向分类根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。
如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。
如果在任意时刻,信息既可由A 传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。
如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。
4. 串行通讯接口串行通讯物理接口按电气标准及协议来分包括RS-232、RS-422、RS485等,这里主要讲一些最常用的RS485接口。
5. RS485接口电路作为一个经常被应用到的SP485R芯片的示范电路,可以被直接嵌入实际的RS-485应用电路中。
微处理器的标准串行口通过RXD 直接连接SP485R 芯片的RO 引脚,通过TXD直接连接SP485R 芯片的DI 引脚。
由微处理器输出的R/D 信号直接控制SP485R 芯片的发送器/接收器使能:R/D 信号为“1”,则SP485R 芯片的发送器有效,接收器禁止,此时微处理器可以向RS-485 总线发送数据字节;R/D 信号为“0”,则SP485R 芯片的发送器禁止,接收器有效,此时微处理器可以接收来自RS-485 总线的数据字节。
此电路中,任一时刻SP485R 芯片中的“接收器”和“发送器”只能够有1 个处于工作状态。
连接至A 引脚的上拉电阻R7、连接至B 引脚的下拉电阻R8 用于保证无连接的SP485R芯片处于空闲状态,提供网络失效保护,以提高RS-485 节点与网络的可靠性。
Modbus通讯协议学习

Modbus通讯协议学习了解了它,会使你对串口通信有一个清晰的认识!通用消息帧ASCII消息帧(在消息中的每个8Bit 字节都作为两个ASCII字符发送) 十六进制,ASCII字符0...9,A...F 消息中的每个ASCII字符都是一个十六进制字符组成每个字节的位1个起始位n个数据位,最小的有效位先发送1个奇偶校验位,无校验则无1个停止位(有校验时),2个Bit(无校验时)错误检测域LRC(纵向冗长检测) RTU 消息帧8位二进制,十六进制数0...9,A...F 消息中的每个8位域都是一个两个十六进制字符组成每个字节的位1个起始位8个数据位,最小的有效位先发送1个奇偶校验位,无校验则无1个停止位(有校验时),2个Bit(无校验时)错误检测域CRC(循环冗长检测) CRC校验(/view/1664507.htm) public static string CRCCheck(string val){val = val.TrimEnd(' ');string[] spva = val.Split(' ');byte[] bufData = new byte[spva.Length + 2];bufData = ToBytesCRC(val);ushort CRC = 0xffff;ushort POLYNOMIAL = 0xa001;for (int i = 0; i < bufData.Length - 2; i++){CRC ^= bufData[i];for (int j = 0; j < 8; j++){if ((CRC & 0x0001) != 0){CRC >>= 1;CRC ^= POLYNOMIAL;}else{CRC >>= 1;}}}returnMaticsoft.DBUtility.HLConvert.ToHex(System.BitConverter .GetBytes(CRC));}/// <summary>/// 例如把如下字符串转换成字节数组/// AA AA AA AA 0A 00 68 00 06 03 04 54 21 28 22 E5 F3 16 BB BB BB BB 转换为字节数组/// </summary>/// <param name="hex">十六进制字符串</param>/// <returns></returns>public static byte[] ToBytesCRC(string hex){string[] temp = hex.Split(' ');byte[] b = new byte[temp.Length + 2];for (int i = 0; i < temp.Length; i++){b[i] = Convert.ToByte(temp[i], 16);}return b;}/// <summary>/// 将字节数据转换为十六进制字符串,中间用“ ”分割如:AA AA AA AA 0A 00 68 00 06 03 04 54 21 28 22E5 F3 16 BB BB BB BB/// </summary>/// <param name="vars">要转换的字节数组</param>/// <returns></returns>public static String ToHex(byte[] vars){returnBitConverter.ToString(vars).Replace('-', ' ').Trim();}CS校验(累加和)public static string CSCheck(string str){if (str.Length == 0) return "";else str = str.Trim();byte[] sss = ToBytes(str);int n = 0;for (int i = 0; i < sss.Length; i++){n += sss[i];}return ToHex(n);}/// <summary>/// AB CD 12 3B 转换为字节数组/// </summary>/// <param name="hex">十六进制字符串</param>/// <returns></returns>public static byte[] ToBytes(string hex){string[] temp = hex.Split(' ');byte[] b = new byte[temp.Length];for (int i = 0; i < temp.Length; i++){if (temp[i].Length > 0)b[i] = Convert.ToByte(temp[i], 16);}return b;}/// <summary>/// 转换为符合本程序的十六进制格式/// </summary>/// <param name="var">1 2 3 等。
串口通讯modbus协议学习笔记

串口通讯modbus协议
串口通讯
常用的有RS232和RS485
RS232
全双工,电缆最长15.2m
发送TXD;接收RXD
逻辑1(MARK)=-3V~-15V
逻辑0(SPACE)=+3~+15V
RS485
半双工,电缆最长1200m
线制:两线,A、B
多台设备连接:所有A并联,所有B并联
RS485转USB。
安装完驱动后会多一个串口(COM口),可在属性=》高级中修改串口号COM N。
其他
TTL(晶体管-晶体管逻辑电平)电平信号。
+5V等价于逻辑“1”,0V等价于逻辑“0”
modbus-RTU协议
RS485是硬件,modbus-RTU是协议。
一般RS485上跑的也就是modbus-RTU,所以被混为一谈。
MODBUS协议在一根通讯线上使用主从应答式连接(半双工)
主机查询,从机回应
地址:1~247
数据
设备不同,数据位数不同
起始地址:0001
默认情况下先发地位,后发高位
错误校验(CRC)
用串口调试软件计算
有的通讯CRC高字节在前,有的通讯CRC高字节在后2路继电器模块读写实例
参见modbus协议规定
读继电器输出数据:01
内容中:0000为关,FF00为开
CRC为低字节在前
浙江奥新仪表的串口通讯是自定义的RS485“通讯协议”
联合站modbus卡配置在84页
主机查询。
广州大彩串口屏技术笔记—MODBUS通信协议

大彩串口屏MODBUS通信目录1. 协议与变量设置 (1)1.1协议设置 (1)1.2变量定义 (1)1.3逻辑处理 (2)1.3.1控件绑定 (3)1.3.2控件显示 (3)1.3.3动画播放 (3)1.3.4按钮按下与弹起 (4)1.3.5条件执行 (4)1.3.6切换画面 (4)1.3.7设置变量 (5)1.3.8汇编指令 (5)1.3.9事件记录 (5)1.3.10曲线绑定 (6)1.3.11颜色设置 (6)1.3.12文本闪烁 (6)1.3.13蜂鸣器控制 (7)1.3.14外接矩阵键盘 (7)1.3.15写入时间 (7)2. MINIC脚本编程 (8)2.1MINIC介绍 (8)2.2变量定义 (8)2.3系统入口函数 (9)2.3.1系统执行初始化on_init (9)2.3.2定期执行任务on_systick (10)2.3.3定时器超时通知on_timer (10)2.3.4变量更新通知on_variant_upate (10)2.3.5控件值更新通知on_control_notify (10)2.3.6画面切换通知on_screen_change (11)2.4系统变量 (11)2.4.1波特率sys.baudrate (11)2.4.2背光亮度sys.blaklight (11)2.4.3蜂鸣器使能sys.beep_en (11)2.4.4系统通信故障_err (11)2.4.5当前画面sys.current_screen (11)2.4.6系统上电时间sys.tick(单位秒) (11)2.4.7系统日期sys.year年、sys.month月、sys.day日、sys.week星期 (11)2.4.8系统时间sys.hour时、sys.minute分、sys.second秒 (11)2.4.9系统定时器sys.timer0~sys.timer9(单位毫秒) (12)2.5系统功能调用 (12)2.5.1启动定时器:start_timer(timer_id, timeout, countdown, repeat) (12)2.5.2停止定时器:stop_timer(timer_id) (12)2.5.3设置系统日期:set_date(year, month, day) (12)2.5.4设置系统时间:set_time(hour, minute, second) (12)2.5.5设置变量:set(variant,value) (12)1. 协议与变量设置此文档中描述的功能,仅适用于含MODBUS功能的固件版本。
Modbus通讯协议详解 (2)

Modbus通讯协议详解协议名称:Modbus通讯协议详解一、引言Modbus通讯协议是一种常用的工业自动化通讯协议,广泛应用于工业控制系统中。
本协议详解将介绍Modbus通讯协议的基本原理、通讯方式、数据帧格式以及常见应用场景等内容,旨在帮助读者全面理解和掌握该协议。
二、Modbus通讯协议概述Modbus通讯协议是一种基于主从架构的串行通讯协议,用于实现设备间的数据交换。
该协议支持多种物理层接口,如串口、以太网等,可实现不同设备之间的通讯。
三、通讯方式Modbus通讯协议主要有两种通讯方式:RTU和ASCII。
RTU方式使用二进制编码进行数据传输,具有较高的传输效率;ASCII方式使用ASCII码进行数据传输,具有较好的可读性。
根据实际需求,可以选择合适的通讯方式。
四、数据帧格式Modbus通讯协议的数据帧格式如下:1. RTU方式:- 起始位:1个起始位,用于标识数据帧的开始。
- 设备地址:1个字节,用于标识通讯的设备。
- 功能码:1个字节,用于标识通讯的功能。
- 数据域:N个字节,用于传输数据。
- CRC校验:2个字节,用于校验数据的完整性。
- 结束位:1个结束位,用于标识数据帧的结束。
2. ASCII方式:- 起始符:1个起始符“:”,用于标识数据帧的开始。
- 设备地址:2个字符,用于标识通讯的设备。
- 功能码:2个字符,用于标识通讯的功能。
- 数据域:N个字符,用于传输数据。
- LRC校验:2个字符,用于校验数据的完整性。
- 结束符:2个字符“\r\n”,用于标识数据帧的结束。
五、常见应用场景Modbus通讯协议广泛应用于工业控制系统中,常见的应用场景包括:1. 监控系统:通过Modbus通讯协议,实现对工业设备的数据监控和远程控制,提高生产效率和安全性。
2. 仪器仪表:将仪器仪表与上位机进行通讯,实现数据的采集和分析,为生产决策提供依据。
3. 自动化控制:通过Modbus通讯协议,实现对生产线的自动化控制,提高生产效率和质量。
MODBUS通讯协议学习总结

MODBUS通讯协议学习总结第一篇:MODBUS通讯协议学习总结MODBUS通讯协议学习总结1、协议分3个层次看:协议应用函数层,如读写coil,寄存器;RTU或者ASCII传输层硬件底层2、比如上位机发来:01 06 00 01 02 D5 00 55 含义:表示上午12点05分开始采集,12*60+5=725=0X02D5 01地址06表示功能码 00 01寄存器地址 02 D5数据 00 55 crc3、就当是一个简单的协议看。
其它的都是格式。
比如:上位机发送A,下位机知道这个是>90分按照他给的框架,自己再自由定义比如:从机地址,可以写01-FF 255个这个是从机先固定好的。
比如从机是01。
上位机发了一串16进制数据,如果第一个字节是01,说明是在和自己通信。
每台从机地址都不一样再判断功能码。
如03。
这个看你写程序是怎么定义的。
比如我这里是要读下位机采集到的数据,我这里就是设置了一个数组,把数据存了起来,等判断03的时候就把数据给上位机。
4、寄存器地址。
自己定义,我这边是随便写的一个固定值5、还有一个crc判断。
读数据的时候,判断下。
如果上位机发过来的crc,和自己计算出来的crc一样,才给返回数据6、那个CRC怎么计算呢?有固定的计算格式,只需调用即可。
crc 在通过modbus串口传数据的时候用,网络上不用。
第二篇:学习通讯搭建两地交流平台促进宁南教师成长为了进一步加快宁夏南部山区基础教育建设,提高宁夏南部山区中小学校长的教育理论素养与学校管理水平,促进宁夏南部山区骨干教师、青年优秀教师专业成长和发展,在深圳市委组织部、深圳市中小学校长培训中心的关心与支持下,在宁夏回族自治区固原市委组织部、固原市教育局精心组织安排下,宁夏回族自治区固原市2011年中小学校长、骨干教师、青年优秀教师(深圳)研修班于2011年11月23日在深圳市中小学校长培训中心(深圳城市学院)隆重开班了。
在开班典礼上,深圳市教育局副局长唐海海、宁夏回族自治区固原市教育局局长虎玉赟、副局长李志坚等做了重要讲话,宁夏回族自治区固原市中小学校长、骨干教师、优秀教师代表也做了表态发言。
Modbus协议解析及串口通讯原理

Modbus协议解析及串⼝通讯原理1.Modbus 协议通讯⽅式区别Modbus RTU协议报⽂间隔需要⼤于3.5个字符计算:2.Modbus RTU数据帧格式3.Modbus ASCII 数据帧格式4.Modbus TCP 数据帧格式5.串⼝通讯串⾏通讯分类RS485接⼝标准RS232接⼝标准1.Modbus 协议通讯⽅式区别Modbus协议分为三种通信⽅式:Modbus RTU、Modbus ASCII以及Modbus TCP。
⾸先,Modbus TCP的通信格式和Modbus RTU⾮常相似,唯⼀的差别只是Modbus RTU最后带两个字节的CRC校验,⽽Modbus TCP没有,Modbus TCP 加了消息头。
下表是MODBUS ASCII协议和RTU协议的⽐较:协议开始标记结束标记校验传输效率程序处理CR,LF LRC低直观,简单,易调试ASCII:(冒号)RTU⽆⽆CRC⾼稍复杂从上表的⽐较我们可以看到, MODBUS ASCII的协议和RTU协议相⽐, MODBUS ASCII协议拥有开始和结束标记,⽽ MODBUSRTU却没有,所以ASCII协议的程序中对数据包的处理能更加⽅使。
MODBUS ASCII协议的DATA域传输的都是可见的ASCII字符,因此在调试阶段就显得更加直观,另外它的LRC校验程序也⽐较容易编写,这些都是 MODBUS ASCII的优点; MODBUS ASCII的主要缺点是传输效率低,因为它传输的都是可见的ASCII字符,原来⽤RTU传输的数据每⼀个字节⽤ ASCII的话都要把这个字节拆分两个字节,⽐如RTU传输⼀个⼗六进制数OXF9, AsCII需要传输字符F和字符9,对应的 ASCII码0x46和0×39两个字节,这样它的传输的效率肯定就⽐RTU 低。
所以⼀般来说,如果所需要传输的数据量较⼩可以考虑使⽤ASCII协议,如果所需传输的数据量⽐较⼤,最好能使⽤RTU协议。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口通讯modbus协议
串口通讯
常用的有RS232和RS485
RS232
全双工,电缆最长15.2m
发送TXD;接收RXD
逻辑1(MARK)=-3V~-15V
逻辑0(SPACE)=+3~+15V
RS485
半双工,电缆最长1200m
线制:两线,A、B
多台设备连接:所有A并联,所有B并联
RS485转USB。
安装完驱动后会多一个串口(COM口),可在属性=》高级中修改串口号COM N。
其他
TTL(晶体管-晶体管逻辑电平)电平信号。
+5V等价于逻辑“1”,0V等价于逻辑“0”
modbus-RTU协议
RS485是硬件,modbus-RTU是协议。
一般RS485上跑的也就是modbus-RTU,所以被混为一谈。
MODBUS协议在一根通讯线上使用主从应答式连接(半双工)
主机查询,从机回应
地址:1~247
数据
设备不同,数据位数不同
起始地址:0001
默认情况下先发地位,后发高位
错误校验(CRC)
用串口调试软件计算
有的通讯CRC高字节在前,有的通讯CRC高字节在后2路继电器模块读写实例
参见modbus协议规定
读继电器输出数据:01
内容中:0000为关,FF00为开
CRC为低字节在前
浙江奥新仪表的串口通讯是自定义的RS485“通讯协议”
联合站modbus卡配置在84页
主机查询。