MODBUS通訊協定及RS485介面通訊程式

发布者:WhisperingWinds最新更新时间:2015-05-05 来源: elecfans关键字:MODBUS  通訊協定  RS485介面  通訊程式 手机看文章 扫描二维码
随时随地手机看文章
MODBUS通訊協定及RS485介面通訊程式
一. 檔案列表
RS485.pdf 電路圖
RS485.C C的原始程式
RS485.asm 由C轉成的組合語言檔
RS485.hex 燒錄檔
二. MODBUS介紹
MODBUS通訊協定原本是MODICON公司為自己所生產的PLC(可程式邏輯控制器)所開發的通訊協定,後來廣泛為工業界所使用,它是一對多的方式來通訊,目前他是採開放的方式不需支付任何費用,任何人皆可開發,所以目前許多PLC、人機介面及圖控軟體都有支援。
目前modbus通訊協定可分為Modbus ASCII及Modbus RTU兩種傳送方式,Modbus ASCII顧名思義就是以ASCII碼的方式來傳輸,而Modbus RTU是以Binary的方式來傳輸,二者以RTU的方式最快,所以我介紹RTU的方式,它傳送資料是從低位元開始傳送,下面的表格是Modbus通訊協定的功能表,其中384、484、584、884、M84及984為Modicon公司所生產的PLC型號。 
Code Name 384 484 584 884 M84 984
01 Read Coil Status Y Y Y Y Y Y
02 Read Input Status Y Y Y Y Y Y
03 Read Holding Registers Y Y Y Y Y Y
04 Read Input Registers Y Y Y Y Y Y
05 Force Single Coil Y Y Y Y Y Y
06 Preset Single Register Y Y Y Y Y Y
07 Read Exception Status Y Y Y Y Y Y
08 Diagnostics (see Modicon Modbus Protocol Reference Guide Chapter 3)
09 Program 484 N Y N N N N
10 Poll 484 N Y N N N N
11 Fetch Comm. Event Ctr. Y N Y N N
12 FetchComm. Event Log Y N Y N N
13 Program Controller Y N Y N N Y
14 Poll Controller Y N Y N N Y
15 Force Multiple Coils Y Y Y Y Y Y
16 Preset Multiple Registers Y Y Y Y Y Y
17 Report Slave ID Y Y Y Y Y
18 Program 884/M84 N N N Y Y N
19 Reset Comm. Link N N N Y Y N
20 Read General Reference N N Y N N Y
21 Write General Reference N N Y N N Y
22 Mask Write 4X Register N N N N N (1)
23 Read/Write 4X Registers N N N N N (1)
24 Read FIFO Queue N N N N N (1)
Notes: 
( 1 ) Function is supported in 984–785 only.
此次的範例我們只用了Function 3(Read Holding Registers)及Function 6(Preset Single Register)的功能,所以以下針對這兩個Function做一說明
Function 03(Read Holding Registers)
讀取Slave Holding Registers的內容(二進制碼)從PLC 4X的參考位置,我以範例來說明
QUERY Example

Field Name  (Hex)
--------------------------------
Slave Address   11
Function   03
Starting Address Hi   00
Starting Address Lo   6B
No. of Points Hi   00
No. of Points Lo   03
Error Check (LRC or CRC)   ––

Slave Address從0-7E(Hex),Function code為03,讀取暫存器的起始位置從40108-40110,其中108為6C,但因通訊的暫存器位置從0開始,所以108需減一,也就是6B,108-110總共三個暫存器(No. of Points),Error Check有分LRC及CRC,LRC為Modbus ASCII Mode的錯誤檢查碼,RTU Mode使用的是CRC的檢查方式,CRC的檢查方式在程式說明的章節再說明。 织梦内容管理系统 

RESPONSE Example

Field Name  (Hex)
--------------------------------
Slave Address   11
Function   03
Byte Count   06
Data Hi (Register 40108)   02
Data Lo (Register 40108)   2B
Data Hi (Register 40109)   00
Data Lo (Register 40109)   00
Data Hi (Register 40110)   00
Data Lo (Register 40110)   64
Error Check (LRC or CRC)   ––

此回應是從Slave傳至Master,前頭的Address及Function都與Master傳過來的一樣,Byte Count為要回傳至Master的byte數,因為Master要求讀取3個暫存器的資料,一個暫存器有兩個bytes,所以總共6個bytes,再來就是依次傳回40108-10110的內容,最後再CRC檢查碼。 
Function 06(Preset Single Register)
將資料寫入Holding Register,且一次只寫入一個暫存器
QUERY Example

Field Name  (Hex)
--------------------------------
Slave Address   11
Function   06
Register Address Hi   00
Register Address Lo   01
Preset Data Hi   00
Preset Data Lo   03
Error Check (LRC or CRC)   ––

將資料03寫入Slave Address 11暫存器40002的位置。
RESPONSE Example

Field Name  (Hex)
--------------------------------
Slave Address   11
Function   06
Register Address Hi   00
Register Address Lo   01
Preset Data Hi   00 
Preset Data Lo   03
Error Check (LRC or CRC)   ––

Slave的回應很簡單,只要從Master傳來的資料無誤,也通過CRC的檢查,將原本收到的資料傳回給Master即可。
三. 程式說明
程式裡頭最主要的是CRC check,在這裡針對CRC check做一說明,程式裡有一個副程式uns16 crc16(uns8 *puchMsg,uns8 crc_count),我針對其參數做一說明:
uns16à傳回16bits的無號數資料
uns8 *puchMsgà傳入字串位址,其字串的資料型態為無號數的八位元
uns8 crc_countà無號數的八位元,其代表傳入字串的長度
針對crc16副程式做一說明:
先宣告三個暫存器uindex,uchCRCHi及uchCRCLo,且將ff(Hex)的值丟入uchCRCHi及uchCRCLo。
1. 檢查crc_count是否為零,若為零則到步驟5,否則繼續。
2. 將uchCRCHi與字串的第一個byte做Exclusive OR(互斥或),將結果送到uindex暫存器,將指標移到字串的下一個字元。 织梦内容管理系统 
3. 使用uindex當索引去查auchCRCHi的表格相對應的值,再將它與uchCRCLo做Exclusive OR(互斥或),將結果送入uchCRCLo中。
4. 將crc_count減一,跳至步驟一。
5. 將uchCRCHi往左移8bit再與uchCRCLo做OR,然後將此16bits的資料傳回。
這套C語言是由B Knudsen Data所開發,其網站為http://www.bknd.com/cc5x/index.shtml,相對其他公司,這套C Compiler較為便宜,所以較符合經濟效益,以下針對主程式做一說明:
此程式是當Modbus的Slave,其位址為11(Hex),它只有設定頻率(set_hz)及設定啟動(set_run)這兩組暫存器需要設定而已,而需讀取的資料有設定頻率(40001)、設定啟動(40086)、目前運轉的頻率(40079)、目前運轉的電流(40080)、目前運轉的狀態(40085)及目前的錯誤訊息(40087)。
從第205-266列為Slave從Master接收到資料之後所做的相關處理及回應,第207列是做從Master接收的資料再一次做CRC的檢查,看計算的CRC檢查碼與Master傳過來的檢查碼有無一樣,若一樣則傳回該回應的值。 dedecms.com 
從第267-282列為將要傳送到Master的值,透過串列埠傳出去,且將LTC485的IC設為傳送模式;第283-284列為若TRMT(Transmit Shift Register Status bit)為空的話,這表示所有資料已傳送完畢,則將LTC485設為接收模式。
第112-113列為若接收資料間隔超過8ms,則需從新開始接收字串。
关键字:MODBUS  通訊協定  RS485介面  通訊程式 引用地址:MODBUS通訊協定及RS485介面通訊程式

上一篇:如何用西门子S7-200实现Modbus通信?
下一篇:RS485,RS232,RS422与MODBUS什么区别

推荐阅读最新更新时间:2024-05-02 23:40

MODBUS转PROFIBUS网关将变频器接入PROFIBUS总线
本文详细介绍了英威腾CHF100A变频器接入西门子CPU315-2DP的PROFIBUS的方法,微硬MODBUS转PROFIBUS网关在STEP7中的具体配置过程。 该方案应用在湖南一化工厂的煤气炉控制系统中。该系统主要是生产用于生产过程中的蒸汽。控制的主要对象是煤气炉的风机、炉条机、以及蒸汽的控制以及现场各项参数的显示与报警。系统主PLC选用西门子CPU 315-2DP,通过ET200 IO模块控制现场设备并监控数据。变频器采用英威腾CHF100A变频器,将英威腾CHF100A变频器接入CPU315-2DP的网关采用北京微硬创新科技公司的PBMD485-K20的MODBUS转PROFIBUS网关。本文主要讲该MODBUS转
[嵌入式]
AVR的部分MODBUS程序
M64,14.7456M晶振 定时器中断时间为1s,如果发送间隔大于T1.5但小于T3.5的数据丢弃 SIGNAL(SIG_UART0_RECV) { Com0_Receive_Da ta_Buffer =UDR0; if(Com0_Receive_Cout 18) Com0_Receive_Cout++; Uart_Fin = 5; Rcvflag = 2; Uart_Start = 1; } SIGNAL (SIG_UART0_TRANS) { Com0_Send_Da ta_Pointer++; Com0_Send_Da ta_Bytes-
[单片机]
RS485,RS232,RS422与MODBUS什么区别
 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。  此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。  当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上
[嵌入式]
基于DSP和Modbus总线的智能断路器控制器设计
  作为输配电网络中保护用的电力断路器(包括框架式断路器和塑壳式断路器),在设备过载、短路时,能安全、可靠地切断故障电流,防止事故扩大危及到整个输配电系统。随着科学技术的进步,人们对供配电系统的自动化程度要求越来越高,传统断路器的功能已不能满足供配电系统自动化的需要。断路器控制器正在向智能化、多功能、模块化及可通信的方向发展。对于供电系统中的多台断路器要求能实现联网通信、集中监控等功能,即第四代断路器,同时对高分断能力、多保护功能、高可靠性提出了更高的应用要求。本文着重研究和设计了一种基于DSP的Modbus总线的新型可通信智能断路器控制器,并给出结合断路器的上位监控软件的完整应用实现。该控制器不仅具有三段保护的基本功能,还能实现在
[嵌入式]
基于ARM-Linux的Modbus串口服务器设计
串口服务器的功能 串口服务器是一种通信协议转换器,它设有两类通信端口:一类是标准的RS232/422/485格式的串行端口,远程的RTU(远程终端设备)监控模块通过串行控制总线接入串口服务器的此类端口;另一类是以太网口,通过网线将串口服务器接入局域网的交换机等设备中。 串口服务器在工作中可自动将RS232/422/485格式的串行数据与基于TCP/IP协议的以太网数据包进行透明转换。一方面,串口服务器收到来自某一串行端口的现场数据,将其转换为TCP/IP格式的数据,通过以太网口进行网络上传;另一方面,串口服务器在局域网中捕获合法的数据协议包,通过解包来解析出有效的控制信息,通过监控机指定的串行端口将控制命令以串行数据的方式
[单片机]
基于ARM-Linux的<font color='red'>Modbus</font>串口服务器设计
西门子S7-1500PLC MODBUS通讯案例
MODBUS MASTER: 先组态硬件,如下所示: 然后打开OB1,进行编程,如下所示: 先调用初始化的块 MODBUS COMMONLOAD 管脚说明: REQ: 指令起始于上升沿(0 到 1)。 PORT: 安装并组态完 CM 后,便可在设备组态的“硬件ID”(Hardware ID) 属性中找到 CM 端口值。符号端口名称在 PLC 变量表的“系统常数”(Systemconstants) 选项卡中指定。就是前面提到的硬件标识符 BAUD: 选择数据传输速率: 1 = 300, 2 = 600, 3= 1200, 4 = 2400, 5 = 4800, 6 = 9600, 7 = 19200, 8 = 38400,
[嵌入式]
西门子S7-1500PLC <font color='red'>MODBUS</font>通讯案例
PROFIBUS转MODBUS网关在烟厂的应用
约克空调机组系统目前采用的是MODBUS通讯,在很多情况下需要将空调机组系统接入到西门子S7300的PROFIBUS系统中,应用微硬创新的MODBUS转PROFIBUS网关实现了两种总线的转换.目前,国内很多卷烟厂的技术改造中使用PROFInet和PROFIBUS技术,该技术有力的保证了系统高效和可靠运行。     在郑州卷烟厂的技术改造工程中的约克空调系统全部采用智能化控制,由中央监控室对所有约克空调设备(包括冷水机组、水泵、冷却塔、空调机组等)进行远程集中监控,可随时掌握各车间温、湿度变化以及设备运行状况。各设备均配置能耗动态监测仪表,可对不同设备的瞬时能耗和累计能耗进行记录和分析车间的空调系统采用全年多工况分区节能控
[嵌入式]
基于Modbus协议的空调控制系统
  1 引言   Modbus 是工业通讯通用协议中的一种,已被众多的厂商所支持并广泛用于工业控制领域,并且也是诸多中国国家工业总线通讯gb标准之一。通过modbus协议,控制器相互之间、控制器经由网络和其它设备之间通信实现监控。modbus作为一种通用工业标准,不同厂商生产的控制设备可以连成工业网络,进行集中监控。   早期的车间自动化设备基于硬接线plc组建控制系统,虽然硬接线方式具有可靠、稳定的优点,但对于大规模自动化系统布线成本偏高。若采用modbus协议等通用工业标准,可减少plc模件使用量,缩减电缆费用,从而降低工程造价。本文结合工程实际,介绍modbus协议在空调控制系统中的应用。   2 电厂空调系统案例   2.1
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved