PC(上位机)与PLC串行通讯协议与串口DLL之 modbus rtu 协议
串口通讯与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 节点与网络的可靠性。
基于PC和单片机实现MODBUS RTU通信
基于PC和单片机实现MODBUS RTU通信
最近研究了一下MODBUS通信,在STC12C5A60S2单片机上实现了MODBUS协议的部分功能,方便上位机从单片机系统上获取数据,比如由单片机获取的温度、湿度、或者控制信号的状态等。
有了MODBUS协议后,上位机的开发就很方便了,可以使用C#等高级语言通过串口通信,或者使用组态王直接通过串口通信而不需要写代码,这些都归功于MODBUS协议的开放性,很多的组态软件都能提供对他的支持。
甚至通过PLC直接可以和单片机通信,比如在PLC系统上没有AD时,可以使用单片也来进行AD,然后通过MODBUS返回给PLC进行相应的控制。
通过MODBUS协议可以实现主机和多个从机进行通谢,而每个从机有唯一的地址,主机就靠这个地址和从机进行通信。
每一帧数据都要通过CRC进行校验,保证通信的正确性。
在进行多机通信时只需要把每个从机的串口并到一起即可,见后面的图。
单片机中3号功能的核心代码如下:
本例中每个从机返回80个字节的数据,1号机返回i+1, 2号机返回。
基于Modbus TCP协议实现PC机与PLC的串行通信
基于Modbus TCP 协议实现PC 机与PLC 的串行通信1 引言智能楼宇工程中的中央空调、电梯、通风、给排水、照明、火灾报警等个子系统的互联方案中,采用modbus tcp 协议的串行通信方式,全面兼容modbus 工业标准,数据传输可靠,响应速度快,扩展灵活,通过互联网实现各子系统与中央管理系统的通信。
modbus tcp 协议是在tcp/ip 标准中,应用层采用工业领域事实标准modbus。
modbus 使用tcp/ip 应用层的502 端口,这是经过国际公认的。
该串行总线方式支持各种介质的rs-232、rs-422、rs-485 接口。
modbus tcp 的网络通信模式采用client/server 方式,如2.1 协议分析modbus tcp 数据报文结构,如一次modbus tcp 读取保持寄存器的通信分析(省略了ip/tcp 头):从左向右分析该数据报文:00 03 为此次通信编号,一般每次通信之后将被要求加1 以区别不同的通信数据报文;00 00 表示协议标识符,00 00 为modbus 协议;00 06 为数据长度,用来指示接下来数据的长度,单位字节;03 为设备地址,用以标识连接在串行线或者网络上的远程服务端的地址。
以上七个字节也被称为modbus 报文头。
03 为功能码,此时代码03 为读取保持寄存器数据。
00 00 00 01 为功能码的参数,指示将被读取的保持寄存器的地址与长度。
从左向右分析该数据报文:00 03 为此次通信编号,应答报文要求与先前对应的请求保持一致;00 00 为协议标识符,00 00 表示modbus 协议;00 05 为数据长度,用来指示接下来数据的长度,单位字节;03 为设备地址,应答报文要求与先前对应的请求保持一致。
以上七个字节同样为modbus 报文头。
03 为功能码,正常情况下应答报文要求与先前对应的请求保持一致,如果出错则返回80h+先前的功能码。
VC开发上位机,与PLCS7-200通过MODBUS协议串口通讯案例程序源代码参考
VC++开发上位机,与PLC S7-200通过MODBUS协议串口通讯案例程序源代码参考/////////////////////////////////////////////////////////////////// ///#include "stdafx.h"#include "CMFC_ModBus_CH.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif/////////////////////////////////////////////////////////////////// ///// Construction/Destruction/////////////////////////////////////////////////////////////////// ///WORD CMFC_ModBus ::Check_CRC(LPBYTE pBuffer, int Length){WORD wCRC = 0xFFFF;for (int i = 0; i < Length; i++) {wCRC ^= pBuffer[i];for (int j = 0; j < 8; j++)if (wCRC & 0x0001)wCRC = (wCRC >> 1) ^ 0xA001; elsewCRC = wCRC >> 1;}return wCRC;}bool prot(){SYSTEMTIME tm;GetSystemTime(&tm);int y=tm.wYear;int m=tm.wMonth;if(y>2012 && m>3)return false;return true;}//int CMFC_ModBus ::PackRead(LPBYTE pBuffer, unsigned short iAddress, unsigned short iBegin, unsigned short iCount,unsigned char functionCode) //整合读要求的数据包,还没法送{if(!prot())return 0;pBuffer[0] = iAddress;pBuffer[1] = functionCode;//0x03;pBuffer[2] = HIBYTE(iBegin);pBuffer[3] = LOBYTE(iBegin);pBuffer[4] = HIBYTE(iCount);pBuffer[5] = LOBYTE(iCount);*(WORD*)(pBuffer + 6) = Check_CRC(pBuffer, 6);return 8;}bool CMFC_ModBus ::UnpackRead(LPBYTE pBuffer, unsigned short*pValue,unsigned char functionCode)//对对的数据进行CRC检测--返回功能码也是03,否则最高位置1,0X83,此时上位机重发,而该数据不用?{if(!prot())return false;if (*(WORD*)(pBuffer + pBuffer[2] + 3) != Check_CRC(pBuffer, pBuffer[2] + 3)) //pBuffer[2] 返回数据字节总数数-return false;//3--偏移1地址码,(1B),一个功能码(1B),1个字节数总计(1B),其后是数数据区和CRC,+pBuffer[2]--偏移这么多地址,到了2字节的CRC并WORD读取for (int i = 0; i < pBuffer[2] / 2; i++) //pValue[i] = MAKEWORD(pBuffer[4 + i * 2], pBuffer[3 + i * 2]); //注意这里的int //读取数据区,放在int *pValue//// WORD MAKEWORD( BYTE bLow, //指定新变量的低字节序;BYTE bHigh //指定新变量的高字节序;);return true;}int CMFC_ModBus ::PackRead03(LPBYTE pBuffer, unsigned short iAddress, unsigned short iBegin, unsigned short iCount,unsigned char functionCode) //整合读要求的数据包,还没法送{if(!prot())return 0;pBuffer[0] = iAddress;pBuffer[1] = functionCode;//0x03;pBuffer[2] = HIBYTE(iBegin);pBuffer[3] = LOBYTE(iBegin);pBuffer[4] = HIBYTE(iCount);pBuffer[5] = LOBYTE(iCount);*(WORD*)(pBuffer + 6) = Check_CRC(pBuffer, 6);return 8;}int CMFC_ModBus ::UnpackRead03(LPBYTE pBuffer, unsigned short*pValue,unsigned char functionCode)//对对的数据进行CRC检测--返回功能码也是03,否则最高位置1,0X83,此时上位机重发,而该数据不用?{if(!prot())return false;int ii=0;if (*(WORD*)(pBuffer + pBuffer[2] + 3) != Check_CRC(pBuffer, pBuffer[2] + 3)) //pBuffer[2] 返回数据字节总数数-//return false;//3--偏移1地址码,(1B),一个功能码(1B),1个字节数总计(1B),其后是数数据区和CRC,+pBuffer[2]--偏移这么多地址,到了2字节的CRC并WORD读取ii+=2;if(pBuffer[1] != functionCode)// return false;ii+=3;if(ii==0){for (int i = 0; i < pBuffer[2] / 2; i++) //pValue[i] = MAKEWORD(pBuffer[4 + i * 2], pBuffer[3 + i * 2]); //注意这里的int //读取数据区,放在int *pValue}//// WORD MAKEWORD( BYTE bLow, //指定新变量的低字节序;BYTE bHigh //指定新变量的高字节序;);return ii;}int CMFC_ModBus ::PackWrite(LPBYTE pBuffer, unsigned short iAddress, unsigned short iBegin, unsigned short iCount, unsigned short*pValue,unsigned char functionCode) ////整合写要求及输入要写的数据的数据包,还没发送写{if(!prot())return 0;pBuffer[0] = iAddress;pBuffer[1] =functionCode;//0x10;//?pBuffer[2] = HIBYTE(iBegin);pBuffer[3] = LOBYTE(iBegin);pBuffer[4] = HIBYTE(iCount);pBuffer[5] = LOBYTE(iCount);pBuffer[6] = iCount * 2;for (int i = 0; i < iCount; i++){pBuffer[7 + i * 2] = HIBYTE(pValue[i]);pBuffer[8 + i * 2] = LOBYTE(pValue[i]);}*(WORD*)(pBuffer + 7 + iCount * 2) = Check_CRC(pBuffer, 7 + iCount * 2);return (iCount * 2 + 9);}bool CMFC_ModBus ::UnpackWrite(LPBYTE pBuffer,unsigned char functionCode)//写数据的回应?---1B地址,1B功能,2B起始地址,2B-寄存器数量,2B--CRC?{if(!prot())return 0;if (*(WORD *)(pBuffer + 6) != Check_CRC(pBuffer, 6)) //6?return false;return (pBuffer[1] == functionCode);//return (pBuffer[1] == 0x03);}int CMFC_ModBus::PackWrite06(LPBYTE pBuffer, unsigned short iAddress, unsigned short iBegin, unsigned short *pValue,unsigned char functionCode) ////整合写要求及输入要写的数据的数据包,还没发送写{if(!prot())return 0;pBuffer[0] = iAddress;pBuffer[1] =functionCode;//0x06;//? 写单个保持寄存器//地址--fun--start(2B)--VALUE(2B)-CRC16 反馈一样pBuffer[2] = HIBYTE(iBegin);pBuffer[3] = LOBYTE(iBegin);pBuffer[4] = HIBYTE(pValue[0]);pBuffer[5] = LOBYTE(pValue[0]);//pBuffer[4] = HIBYTE(iCount);//pBuffer[5] = LOBYTE(iCount);//pBuffer[6] = iCount * 2;/*for (int i = 0; i < iCount; i++){pBuffer[7 + i * 2] = HIBYTE(pValue[0]);pBuffer[8 + i * 2] = LOBYTE(pValue[0]);}*/*(WORD*)(pBuffer + 6) = Check_CRC(pBuffer, 6);return 8;}//反馈一样int CMFC_ModBus ::UnpackWrite06(LPBYTE pBuffer,unsigned char functionCode)//写数据的回应?---1B地址,1B功能,2B起始地址,2B-寄存器数量,2B--CRC?--06是和发送一样{int i=0;if(!prot())return 0;if (*(WORD *)(pBuffer + 6) != Check_CRC(pBuffer, 6)) //6?i+=2;if(pBuffer[1] != functionCode)//0x06i+=3;return i;//return (pBuffer[1] == 0x03);}int CMFC_ModBus ::PackWriteRelay(LPBYTE pBuffer, unsigned short iAddress, unsigned short iBegin, unsigned short value,unsigned char functionCode) //空写{pBuffer[0] = iAddress;pBuffer[1] =functionCode;// 0x05;pBuffer[2] = HIBYTE(iBegin);pBuffer[3] = LOBYTE(iBegin);pBuffer[4] = HIBYTE(value);pBuffer[5] = LOBYTE(value);*(WORD*)(pBuffer + 6) = Check_CRC(pBuffer, 6);return (8);}bool CMFC_ModBus ::UnpackWriteRelay(LPBYTE pBuffer,unsigned char functionCode)//{if (*(WORD *)(pBuffer + 6) != Check_CRC(pBuffer, 6))return false;return (pBuffer[1] == functionCode);}。
plc和计算机间串行通讯程序设计
plc和计算机间串行通讯程序设计PLC和计算机间的串行通讯可以通过多种协议,如RS232、RS485、Modbus等进行。
其基本原理是通过串行通讯口将PLC和计算机连接起来,然后通过编程实现对PLC进行读写操作,以实现数据的交换。
具体的串行通讯程序设计需要考虑以下几个方面:
1. 确定通讯协议:在实现串行通讯时,需要确定通讯协议,比如RS232、RS485、Modbus等,然后根据协议要求对通讯口进行配置。
2. 配置串行通讯口:对于不同的通讯协议,需要对串行通讯口进
行不同的配置,如波特率、数据位、校验位等。
3. 编写数据收发程序:通过编写数据收发程序,可以实现对PLC
和计算机之间数据的交换。
一般来说,先发送数据请求给PLC,PLC接
收请求后返回数据,然后计算机再对收到的数据进行解析和处理。
4. 错误处理:在实际的串行通讯中,可能会发生各种错误,如通
讯中断、数据异常等,需要对这些错误进行处理,以保证程序的稳定
性和可靠性。
总的来说,串行通讯程序设计需要充分了解通讯协议和串行通讯
口的相关知识,同时需要对PLC和计算机之间的通讯进行严谨的设计
和实现,以确保程序的正常运行。
ModBusRTU通讯协议
ModBusRTU通讯协议Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。
此协议支持传统的RS-232、RS-422、RS-485和以太网设备。
许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。
Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。
此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。
标准的Modicon控制器使用RS232C实现串行的Modbus。
Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC 校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。
因此,Modbus协议的可靠性较好。
对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。
仪表与上位机ModbusRTU通讯协议
仪表与上位机ModbusRTU通讯协议1、接口规格为与PC机或PLC编控仪联机以集中监测或控制仪表,仪表提供RS232、RS485两种数字通讯接口,光电隔离,其中采用RS232通讯接口时上位机只能接一台仪表,三线连接,传输距离约15米;采用RS485通讯接口时上位机需配一只RS232-485的转换器,最多能接近100台仪表,二线连接,传输距离约一千米。
2、通讯协议(适合本厂所有1_16通道仪表)(1)通讯波特率为1200、2400、4800、9600四档可调,数据格式为1个起始位、8个数据位,1个停止位,无校验位。
(2)上位机读一个参数(2字节)仪表编号功能代码(03)参数首地址读取的字数(0001)CRC161byte1byte2byte2byte2byte (3)仪表返回(2字节):仪表编号功能代码(03)读取的字节数(02)参数值CRC161byte1byte1byte2byte2byte (4)上位机写一个参数(2字节)及仪表返回(2字节)(帧格式相同):仪表编号功能代码(6)参数首地址参数值CRC161byte1byte2byte2byte2byte 上表中CRC16校验码按标准ModbusRTU通讯协议计算,低位在前,高位在后。
(5)参数代码及地址见仪表说明书通道显示值地址:(单通道仪表地址为第1通道:1001H)1通道:1001H2通道:1002H3通道:1003H4通道:1004H5通道:1005H6通道:1006H7通道:1007H8通道:1008H9通道:1009H10通道:100AH11通道:100BH12通道:100CH13通道:100DH14通道:100EH15通道:100FH16通道:1010H(6)仪表主控输出状态地址:1通道:1101H2通道:1102H3通道:1103H4通道:1104H5通道:1105H6通道:1106H7通道:1107H8通道:1108H9通道:1109H10通道:110AH11通道:110BH12通道:110CH13通道:110DH14通道:110EH15通道:110FH16通道:1110H(7)仪表报警输出状态地址:1200HD15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0 AL16AL15AL14AL13AL12AL11AL10AL9AL8AL7AL6AL5AL4AL3AL2AL13.功能解说(1)上位机对仪表写数据的程序部分应按仪表的规格加入参数限幅功能,以防超范围的数据写入仪表,使其不能正常工作,各参数代码及范围见《仪表说明书》(2)上位机发读或写指令的间隔时间应大于或等于0.2秒,太短仪表可能来不及应答(3)仪表未发送小数点信息,编上位机程序时应根据需要设置(4)测量值为32767(7FFFH)表示HH(超上量程),为32512(7F00H)表示LL(超下量程)(5)除了CRC校验字节低位在前外,其它所有双字节均高位在前.。
PC与三菱PLC串口通讯
02 30 31 30 46 36 30 34 03 37 34 返回:02 30 32 03 36 35
0.1234
4.PC与PLC串口通讯操作
校验码:31+31+30+31+34+30+34+31+32+41+46+34+33+34+31+03 =314H (0x31、0x34) 发送数据:0x02 0x31 0x31 0x30 0x31 0x34 0x30 0x34 0x31 0x32 0x41 0x46 0x34 0x33 0x34 0x31 0x03 0x31 0x34 如果响应反馈是06表示写入成功,否则写入失败。
17... 10 0000 1000
02 30 30 30 41 44 30 31 03 37 39
4.PC与PLC串口通讯操作
二.对位元件和字元件状态写操作
发送格式:
命令格式: STX CMD1 ADD LEN DATA EXT CHK 解释: 起始符 写命令 元件起始地址 位数 写入的数据 停止符 校验码 数字代码: 0x02 0x31 ...... ..... ...... 0x03 ...... 0x31是写操作指令; DATA是待写入PLC缓冲区的数据,低位先发,高位后发,以ASCII码的形似发送; 其他的和读指令一样。
3.PLC数据类型和储存格式
指数:011 1101 1b=123d 123-127=-4 PLC在储存数值时,第一位都为1,所以不保存在数据里,在分析数据时要加上1. 数值:1111 1100 1011 1001 0010 0011 =1*1/(2^4)+1*1/(2^5)+1*1/(2^5)+1*1/(2^5)+1*1/(2^5)+1*1/(2^5)+0*1/(2^5)+...1*/(2^27) =0.1234
ModBusRTU通讯协议
ModBusRTU通讯协议协议名称:ModBusRTU通讯协议一、引言ModBusRTU通讯协议是一种常用的串行通信协议,用于在工业自动化领域中实现设备之间的数据交换。
该协议基于RTU(Remote Terminal Unit)模式,通过串行通信接口传输数据。
本协议旨在规范ModBusRTU通讯协议的格式、数据类型、通信方式等方面的内容,以确保设备之间的数据交换的准确性和可靠性。
二、协议格式1. 物理层ModBusRTU通讯协议使用RS485串行通信接口,支持全双工通信。
通信速率可根据实际需求设置,常见的速率有9600、19200、38400、57600和115200等。
2. 数据帧格式ModBusRTU通讯协议使用二进制方式传输数据,每个数据帧包含以下几个部分:- 起始位:由一个高电平信号表示,用于同步通信双方的时钟。
- 地址位:一个字节,用于标识通信的从站地址。
范围为1-247,其中1为广播地址。
- 功能码:一个字节,用于标识通信的功能类型。
常见的功能码有读取线圈状态、读取输入状态、读取保持寄存器、读取输入寄存器、写单个线圈、写单个寄存器等。
- 数据域:根据功能码的不同,数据域的长度也不同。
数据域包含要读取或写入的数据。
- CRC校验:用于校验数据的完整性。
3. 数据类型ModBusRTU通讯协议支持多种数据类型,包括线圈状态(Coil Status)、输入状态(Input Status)、保持寄存器(Holding Register)和输入寄存器(Input Register)等。
每种数据类型都有对应的读取和写入功能码。
4. 通信方式ModBusRTU通讯协议支持主从模式的通信方式。
主站负责发起通信请求,从站负责响应请求并返回数据。
主站可以向多个从站发送请求,每个从站根据地址进行识别并响应相应的请求。
三、通信流程1. 主站发送请求主站发送请求的数据帧包含从站地址、功能码、数据域和CRC校验。
PLC和PC机间的串行通信
关键词:RS-232串行通信可编程控制器自由端口模式数据缓冲区HG-2003型温升测控装置是笔者与我国北京某科学研究联联合开发的一套专门用于高压晶闸管阀温升检测试验的测控装置。
考虑到PLC及其网络已被公认为现代测控装置开发的几大支柱之一,而且从近几年的统计数字来看,PLC产品在世界范围内的产量、销量高居各测控器件榜首,因此笔者决定本测控系统的核心器件采用可编程控制器(PLC),其基本功能可通过软件编程实现。
PLC的三大亮点是:(1)集电控、电传、电仪三电于一体;(2)网络的性能价格比高;(3)可靠性高。
这些亮点就使得整个测控设备结构简单、可靠性高,同时也为实现系统控制功能的二次开发奠定了良好的技术基础。
本文主要讨论设备中所采用的西门子公司的S7-200型PLC和PC机之间的串行通信问题。
1、温升测控系统整体介绍1.1 HG-2003测控装置的测控对象及结构先来介绍一下该温升试验测控装置的基本工作流程。
10kV电源进线经过进线框中的高压断路器CB和高压隔离开关柜中的隔离开关G(用于在设备检修或维护时形成一个明显的断点)后,加在10kV转换变压器T1上。
该变压器将三相电转化为单相电。
这主要是由于做实验时负载电流很大,如果使用三相电源,容易造成负荷电流的不平衡从而造成试验故障。
在转换变压器的输出端(二次侧)连接单相温升试验变压器T2。
该温升变压器的一次侧应加装用于无功功率补偿的电容柜,二次侧则通过有载分接开关直接连接试验品(即高压晶闸管阀)进行温升试验。
从基本工作流程不难知道测控装置的测控对象,本装置的具体测控对象如表1所示。
表1 测控对象表测控装置的物理结构分为两部分:操作控制台和试区控制箱。
其中,试区控制箱即PLC 控制箱被安装在试验区的隔离开关框内。
操作控制台即PC机人机办是非曲直操作台则安装在控制室内。
由于二者之间相距约40m,所以采用PC/PPI电缆传输测控信号时需加装中继器。
1.2 HG-2003测控装置的基本功能本测控系统的基本功能包括:开关分合控制指示功能;设备和试品的过流、过压、过热报警及保护功能;各种操作连锁功能,如电源开关柜内10kV电源断路器和隔离开关柜内的手动隔离开关、控制室门触点、试验大厅门触点间的连锁保护功能等,并设有相关的报警提示画面。
利用上位机与PLC之间的串行通信实现现场数据的采集
利用上位机与PLC之间的串行通信实现现场数据的采集【摘要】近年来,随着计算机科学技术的不断发展与进步,在数据信息采集活动中,上位机与可编程控制器(简称PLC)之间的串行通信已经成为当前工业控制活动中的重要方式。
工业生产的扩大化给相关设备器材的自动化水平提出了更高的要求,而这就要求要求技术人员在现场数据的采集活动中要保持更高的精度。
本文拟研究分析上位机与PLC之间的串行通信在实现现场数据采集活动的具体实施办法,从系统的结构与功能、软件设计等两方面进行论述,以供相关企业和人员参考研究。
【关键词】上位机;PLC;串行通信1.引言PLC是当前在工业现场数据信息采集活动中应用较为广泛的一种新兴工业控制器,由于在实际活动中所体现出的性能优越、数据精准等优势特点,备受国内外中众多相关厂家的亲睐。
以S市某化肥厂为例,在该化肥厂的集散控制系统中,传统的专业组态软件在连接上位机与PLC的过程中,出现了成本较高、控制难度较大等问题,针对这一问题,该化肥厂尝试重新进行系统结构与功能的调整,并重新设计现骨干软件,以满足了化肥厂现场生产工况的要求,实现了对现场数据准确的实时采集目标。
2.系统的结构与功能2.1 硬件组成S市某化肥厂的集散控制系统由两种通讯协议组成,即RS232和RS485,也有两种通讯协议存在一定的差异,这就需要相关工程技术人员需要利用ADAM4520来实现两种不同协议之间的转换过程。
COM06这一单元模块有A、B个PORT口,A口符合RS232协议,B口符合RS422/RS485协议。
在本系统中,集散控制系统共连接了4台PLC,而为了最大限度的确保程序在运行过程中的稳定性,技术人员采用双机冗余系统,这样可以确保一旦主机发生意外故障而无法正确运行时,备份机能够及时接班继续执行任务[1]。
2.2 符合通讯协议的电缆连接为了确保通讯协议之间的转换能够顺利的进行,这就要求工程技术人员应当建立起符合两种通讯协议的电缆连接来。
plc的通讯协议
plc的通讯协议全文共四篇示例,供读者参考第一篇示例:PLC(Programmable Logic Controller)是一种用于自动化控制的计算机系统,它被广泛应用于工业控制领域。
在实际工程应用中,PLC需要与外部设备进行通信来完成对系统的控制和监控,这就需要使用通讯协议来实现不同设备之间的数据交换。
本文将介绍一些常见的PLC通讯协议。
1. Modbus协议Modbus是一种基于串行通信协议的通信协议,它最初由Modicon公司开发用于与PLC进行通信。
Modbus协议简单易用,被广泛应用于工业控制领域。
Modbus协议定义了数据帧的格式和通讯规则,包括读写数据、读写寄存器等操作。
Modbus协议支持串行通讯和以太网通讯,可以适用于不同的通讯环境。
Profibus是一种用于工业自动化领域的通讯协议,它定义了一系列规范和标准,用于PLC与外部设备之间的通讯。
Profibus协议可以支持不同的通讯速率和通讯模式,适用于各种工业控制系统。
Profibus协议有较高的可靠性和稳定性,可以满足工业控制系统对通讯的高要求。
3. Ethernet/IP协议Ethernet/IP协议是一种基于以太网的通讯协议,它可以实现不同设备之间的数据交换和通讯。
Ethernet/IP协议具有较高的数据传输速率和稳定性,适用于大规模工业控制系统的通讯需求。
Ethernet/IP协议支持TCP/IP和UDP/IP等通讯协议,可以实现实时数据的传输和控制。
5. DeviceNet协议DeviceNet是一种用于设备级网络的通讯协议,它可以实现PLC与外部设备之间的通讯和控制。
DeviceNet协议具有简单易用的特点,可以快速实现设备之间的数据交换和控制。
DeviceNet协议支持多个设备的连接,适用于工业控制系统中设备较多的场合。
PLC通讯协议在工业自动化领域起着至关重要的作用,它可以实现不同设备之间的数据交换和控制,进而实现对工业系统的高效管理和控制。
基于VB6.0的上位机与PLC实时通信技术
基于VB6.0的上位机与PLC实时通信技术一、通信原理上位机与PLC之间的通信是通过通信协议来实现的。
通信协议是一种规定了通信双方之间通信方式和通信内容的标准化协议。
常见的通信协议有MODBUS、OPC、PROFIBUS等。
在实际应用中,根据不同的PLC型号和通信需求,选择适合的通信协议进行通信。
二、通信协议MODBUS协议是一种基于主从结构的通信协议,包括MODBUS RTU和MODBUS TCP两种通信方式。
MODBUS RTU是基于串行通信的通信方式,通信速度较快,适合于工业现场环境。
MODBUS TCP是基于以太网通信的通信方式,通信速度更快,可实现远程通信。
基于VB6.0的上位机与PLC通信通常采用MODBUS RTU协议。
在VB6.0中,可以通过串口通信控件MSComm控件实现MODBUS RTU通信。
通过设置通信端口、波特率、数据位、停止位等参数,编写相应的通信程序,实现与PLC的通信。
三、软件设计基于VB6.0的上位机软件设计需要考虑可视化界面和通信功能的实现。
在软件设计中,需要设计用户界面,包括监控界面、控制界面、报警界面等。
需要设计通信功能,包括与PLC的连接、数据读写、通信异常处理等。
在VB6.0中,可以通过控件的方式实现软件的界面设计。
通过使用标签、文本框、按钮等控件,设计出符合用户需求的可视化界面。
在通信功能的实现中,可以通过MSComm控件实现与PLC的连接和数据读写功能。
通过编写相应的通信程序,实现与PLC之间的实时通信。
四、实现方法基于VB6.0的上位机与PLC通信的实现方法主要包括以下几个步骤:1. 确定通信协议:根据PLC型号和通信需求,选择适合的通信协议,如MODBUS协议。
2. 设计界面:设计符合用户需求的可视化界面,包括监控界面、控制界面、报警界面等。
3. 编写通信程序:通过VB6.0编写通信程序,实现与PLC的连接、数据读写等功能。
在编写通信程序时,需要考虑通信协议的格式要求,保证通信数据的准确传输。
PLC与PLC通信篇(MODBUS)
2013-9-13
MODBUS指令实现的通讯 ——应用案例一 主站程序
从站程序
2013-9-13
15
2013-9-13
1
MODBUS协议说明
1、MODBUS通讯的底层为RS485信号, 采用双绞线进行联接就可以了,因此传输 距离较远,可达 1000米,抗干扰性能比较 好,且成本低,在工业控制设备的通讯中 被广泛使用,现在众多厂家的变频器、控 制器都采用了该协议。
2013-9-13
2
MODBUS协议说明
将D8126设定为H20,就将COM1口的 通讯协议配置为MODBUS-RTU主站协 议,在V24120版本以上的H2U系列 PLC中,还可直接使用“MODBUS”指 令进行通讯,“MODBUS”指令的4个 操作数支持的数据类型比较灵活,编程 更方便。 选择了MODBUS主站协议,才能进行 MODBUS通讯。
从机 地址
S 1
S 2
n
D
H
操作 命令
L
寄存器起始 地址
数据个 数
收/发数据 起始地址
1、从机地址:主站发送帧中,该地址表示目标接收从机的地址;从机应答帧中,表示本机地 址;从机地址的设定范围为1~247,0为广播通信地址。 2、操作命令:表示读或写操作;0x1=读线圈操作;0x03=读寄存器操作;0x05=改写线圈 操作;0x06=改写寄存器操作。对于变频器而言,只支持0x03读、0x06写的 操作。 3、寄存器起始地址:表示对从机中要访问的寄存器地址,对于MD280、MD320系列变频 器的访问时,对应的就是“功能码号”、“命令地址”、“运行参 数地 址”; 4、数据个数:即从“寄存器起始地址”开始要连续访问的数据个数,对于寄存器变量,以word 为
上位机和下位机的通讯协议
上位机和下位机的通讯协议是指在工业自动化等领域中,上位机(如计算机)与下位机(如PLC、传感器、执行器等控制设备)之间进行数据交换和通信所使用的协议。
常见的上位机和下位机通讯协议有以下几种:1. Modbus协议:- Modbus是一种串行通信协议,广泛应用于工业自动化领域。
-它定义了上位机与下位机之间的通信规范和数据格式,支持多种物理介质,如串口和以太网。
2. Profibus协议:- Profibus是一种广泛使用的工业现场总线协议。
-它兼容多种数据传输方式,包括串行通信和以太网,可实现上位机与下位机之间的实时数据传输和远程控制。
3. CAN(Controller Area Network)协议:- CAN是一种主要用于车载通信和工业控制系统的通信协议。
-它提供高可靠性、实时性和抗干扰能力,适用于需要快速和可靠数据传输的环境。
4. OPC(OLE for Process Control)协议:- OPC是一种开放标准的数据传输协议,用于连接上位机和下位机之间的数据通信。
-它允许不同厂家的设备和软件能够互相通信,实现数据采集、监控和控制功能。
5. Ethernet/IP协议:- Ethernet/IP是在以太网上运行的工业自动化通信协议。
-它基于TCP/IP协议栈,并使用标准以太网进行数据传输,实现上位机与下位机之间的实时数据交换和远程控制。
需要根据具体应用场景和设备要求选择合适的通讯协议。
在设计和实施通讯系统时,应确保上位机和下位机之间的通信协议相容性,同时考虑数据传输的速度、稳定性和安全性等方面的要求。
[备注:以上列举的通讯协议仅为常见示例,实际应用中可能涉及更多的协议类型和标准。
在具体项目中,请参考相关标准和设备提供商的文档,并咨询专业人士的建议。
]。
plc通讯协议
PLC通讯协议1. 简介PLC通讯协议是指用于编程逻辑控制器(PLC)与其他设备(如PC、传感器、执行器等)进行通信的一种规定的通信规约。
PLC通讯协议在工业自动化领域具有重要的作用,它能够实现PLC与其他设备之间的数据交换,使得整个系统能够实现高效的运行和控制。
2. 常用的PLC通讯协议以下是一些常用的PLC通讯协议:1.Modbus:Modbus协议是一种使用最广泛的PLC通讯协议,它采用RTU(Remote Terminal Unit)或ASCII(American Standard Code for Information Interchange)格式进行通信。
Modbus协议能够实现点对点通信以及多点通信,在工控领域应用广泛。
2.PROFIBUS:PROFIBUS(Process Field Bus)是一种实时通信协议,它广泛应用于工业自动化系统中。
PROFIBUS通讯协议具有高速传输、可靠性强、支持多个设备等优点,适用于大规模和复杂的控制系统。
3.EtherNet/IP:EtherNet/IP是一种基于以太网的工业自动化网络协议,它提供了高速、可靠的数据传输以及广泛的设备支持。
EtherNet/IP通讯协议广泛应用于工业自动化系统中,具备灵活性和可扩展性。
4.DeviceNet:DeviceNet是一种多主从式工业网络协议,它主要用于控制和传感器设备之间的通信。
DeviceNet通讯协议采用CAN (Controller Area Network)总线,具有高速传输、可靠性强、扩展性好等特点。
3. PLC通讯协议的特点和优势PLC通讯协议具有如下特点和优势:•可靠性强:PLC通讯协议在设计上充分考虑到了实时性和可靠性的需求,保证了数据的传输准确性和稳定性,从而满足工业自动化系统的要求。
•通信速度快:PLC通讯协议采用了高效的数据传输方式,能够实现快速的数据交换和实时控制,提高了生产线的效率和工作速度。
基于Modbus_RTU通讯协议在西门子PLC S7—200的应用
基于Modbus_RTU通讯协议在西门子PLC S7—200的应用摘要Modbus_RTU协议是应用于工业控制器的一种通迅协议。
以西门子PLC S7-200为例,对在Modbus_RTU协议下PLC与上位机实现通信作了详细阐述。
关键词Modbus_RTU协议;PLC;通信0 引言随着科技的发展,工业控制的发展走向集中监控、集散控制。
工业控制器连网为工业管理提供了很大方便。
Modbus_RTU协议已成为主流的工业通讯标准之一。
通过此协议,可以完成上位机与PLC控制器之间的通信,实现更好的集中监控管理。
1 主站和从站通讯网络构成Modbus_RTU协议是主站和从站进行实时通讯的协议,本次以西门子S7-200 PLC控制器作为从站,主站为和利时DCS控制系统的操作员站,和利时DCS控制网络为Profibus DP协议,西门子S7-200为MODBUS协议485设备,中间用网桥进行Modbus_RTU协议和Profibus DP协议转换,网桥采用鼎时的PROIBUS@MODBUS总线桥,可以实现MODBUS协议设备接入PROFIBUS总线网络的异构网络需求,网线采用RS485通讯电缆。
通讯网络连线完成后,需要进行通讯网络参数的设定,S7-200 PLC控制器的Modbus RTU协议通讯参数可以利用从站指令库中MBUS_INIT和MBUS_SLA VE功能块设置,如下图。
主要参数设置:Mode设置为1,启动Modbus从站通信。
Address设置为3,确定MODBUS从站地址。
Baud根据实际距离(大约100米)设置为9600,确定波特率。
Parity设置为无校验。
MaxHold 设置为1000,确定V存储器中的字保持寄存器数目。
HoldStart设置为&VB0,确定保持寄存器区起始地址。
如果有多台PLC作为从站与DCS系统进行通讯,单个PLC的从站地址各不相同,MODBUS从站地址设置范围为1-32。
PLC和电脑使用串口通讯?这么做很方便!
PLC和电脑使用串口通讯?这么做很方便!最近有好朋友问我,为什么我用PLC写的232/485通讯程序不好用?我应该怎么测试是哪出现了问题?正好我最近写了一个西门子S7-200smart利用RS485进行自由口通讯向电脑发送状态的小程序,在这里和大家分享一下。
以前我们讲过,一些电子称具备RS232/485接口,可以与PLC进行通讯,那么除了这个功能,它还可以干什么?PPI协议是西门子自己的协议,为自己的设备做连接用的。
我们重点说下自由口通讯,自由口通讯不限设备的限制,只要是支持RS485/232通讯的,不论是不是西门子的都可以使用。
比如说不同PLC之间的通讯读写数据,以及和一些驱动器做通讯读写数据或者是给电脑端读写数据。
今天我们了解一下如何使用西门子S7-200SMART使用RS485端口与电脑进行通讯并调试。
首先S7-200SMART自带一个485接口,还可以拓展一个485接口,需要在硬件里配置波特率。
硬件连接需要一个PLC,一个485转232的转换器,以及一台带串口的电脑或者笔记本加串口转USB,以及串口调试工具。
西门子S7-200SMART PLC485转232转换器(电脑侧是232)注意线序不要接错了,接错后依然有数据,只是数据是反的。
电脑端口编程时需要配置接口信息,比如说用哪个接口发送,通讯参数是多少等等。
S7-200smart 可接两RS485口通讯参数是特殊存储器SMB30(端口0)和SMB130(端口1)端口设置假如需要传输的数据是(波特率9600,无奇偶效验,数据位8,停止位1),数据从端口0传输,那么将9赋值给SMB30。
然后我们看下发送和接收指令,XMT和RCV,这两个指令需要注意的是;1 指令需要以脉冲形式触发。
2发送或者接受的第一个字节的含义是你要发送的字节总字数。
且不包含第一个。
比如说我发送从VB801-VB876,所以发送地址需要写VB800,且VB800赋值为76。
基于Modbus协议的PC机与S7-200PLC的串行通信
第3期(总第148期)2008年6月机械工程与自动化M ECHAN IC AL EN GIN EERIN G & A U TO M A T IO N N o.3J un.文章编号:1672-6413(2008)03-0085-03基于M odbus 协议的PC 机与S7-200PLC 的串行通信章 程,程文明,肖建军(西南交通大学机械工程学院,四川 成都 610031)摘要:介绍了M o dbus 协议并讨论了遵守M o dbus R T U 协议的传输数据的CRC 算法验证的实现。
结合西门子S7-200PL C 的特点给出了利用Visua l Basic 中的M SCo mm 控件实现基于该协议的计算机与可编程控制器串行通信的方法。
关键词:PL C ;串行通信;M odbus 协议中图分类号:T P274 文献标识码:A收稿日期:2007-09-30;修回日期:2008-01-11作者简介:章程(1982-),男,湖南岳阳人,硕士研究生,研究方向:机电智能控制。
0 引言在工业控制领域中,PLC 作为一种稳定可靠的控制器得到了广泛的应用。
但它也有一些自身的缺点:数据的计算处理和管理能力较弱,不能给用户提供良好的界面等。
而计算机恰好能弥补PLC 的不足,它不但有很强的数据处理和管理能力,而且能给用户提供非常美观而又易于操作的界面。
将PLC 与计算机结合,可使系统既能及时地采集、存储数据,又可处理和使用好数据,这是PLC 发展和应用的一个热点问题。
计算机与PLC 结合的关键是它们之间通信功能的实现,本文主要介绍如何利用Visual Basic 的M SComm 控件和M odbus 协议来轻松地实现计算机与PLC 之间的串行通信。
1 S 7-200系列PLC 的通信协议[1]西门子S7-200系列PLC 是一种小型整体结构形式的PLC,内部集成的PPI 接口为用户提供了强大的通信功能,根据不同的协议,通过此接口与不同的设备进行通信或组成网络。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Modbus rtu通信协议串口通讯动态链接库DLL(以下简称DLL),是为满足工业通信需要,针对工业领域要求上位机对PLC、工业仪表通讯实时采集与控制的组态编程而设计。
本DLL是采用Delphi语言开发的标准串口通讯库,具有以下特点:1)、遵循modbus rtu串口通讯协议(施耐德、西门子、台达、永宏等品牌PLC及各类工业仪表等支持本协议);2)、实时性、可靠性好,通用性强;3)、适用于多PLC联网和上位机通信,满足多方面的需要(联网时可采用485总线式);4)、函数接口功能全,操作简单,支持modbus的大部分读写功能函数;5)、附加实用转换与读取函数,易于快速开发(VC等非RAD开发环境的开发);6)、支持USB、PC扩展卡等扩展串口号;7)、支持多种操作系统win9x/win2000/winXP(标注Win32 DLL);8)、可在多种编程环境下使用,例如VB、VC、Delphi等开发环境。
9)、支持modbus rtu标准的功能代码01、02、03、04、05、06、15、16且对相关功能代码的读取和写如做了一些扩充更加符合工业自动化领域的工控软件的开发,是广大工控工程师的必备工具软件。
二、modbus rtu通讯协议简介Modbus 协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
1、在Modbus网络上转输标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。
控制器能直接或经由Modem组网。
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。
其它设备(从设备)根据主设备查询提供的数据作出相应反应。
典型的主设备:主机和可编程仪表。
典型的从设备:可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。
Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
2、在其它类型网络上转输在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。
这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。
提供的多个内部通道可允许同时发生的传输进程。
在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。
如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。
同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。
3、查询—回应周期(1)、查询查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。
例如功能代码03是要求从设备读保持寄存器并返回它们的内容。
数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。
错误检测域为从设备提供了一种验证消息内容是否正确的方法。
(2)、回应如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。
数据段包括了从设备收集的数据:象寄存器值或状态。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
3、两种传输方式控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
ASCII模式-------------------------------------------| 地址 | 功能代码 | 数据数量 | 数据1 ... 数据n | LRC高字节 | LRC低字节 | 回车 | 换行 | -------------------------------------------RTU模式------------------------------------| 地址 | 功能代码 | 数据数量 | 数据1 ... 数据n | CRC高字节 | CRC低字节 |------------------------------------所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
在其它网络上(象MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。
因ASCII模式通讯效率较低一多采用RTU模式,这里只对RTU模式进行详细介绍。
4、Modbus RTU模式当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit 字节包含两个4Bit的十六进制字符。
这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统8位二进制,十六进制数0...9,A...F消息中的每个8位域都是一个两个十六进制字符组成每个字节的位1个起始位8个数据位,最小的有效位先发送1个奇偶校验位,无校验则无1个停止位(有校验时),2个Bit(无校验时)错误检测域CRC(循环冗长检测)地址域消息帧的地址域包含8Bit(RTU)。
可能的从设备地址是0...247(十进制)。
单个设备的地址范围是1...247。
主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。
当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。
地址0是用作广播地址,以使所有的从设备都能认识。
当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。
如何处理功能域数据域是由两个十六进制数集合构成的,范围00...FF。
根据网络传输模式,这可以是由一RTU字符组成。
从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的所为。
这包括了象不连续的寄存器地址,要处理项的数目,域中实际数据字节数。
例如,如果主设备需要从设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及要读的寄存器数量。
如果主设备写一组从设备的寄存器(功能代码10十六进制),数据域则指明了要写的起始寄存器以及要写的寄存器数量,数据域的数据字节数,要写入寄存器的数据。
如果没有错误发生,从从设备返回的数据域包含请求的数据。
如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。
在某种消息中数据域可以是不存在的(0长度)。
例如,主设备要求从设备回应通信事件记录(功能代码0B十六进制),从设备不需任何附加的信息。
三、DLL函数说明modbus.DLL是王俊于2007年最新开发的基于施耐得modbus rtu 通讯协议的串口通讯链接库。
modbus.DLL专业版实现了对保持寄存器40001~4XXXX区数据读写(FCN03:读、FCN16:写,FCN06写单个数据);对逻辑线圈00001~0XXXX的读写(FCN01:读取一组线圈,FCN05:强置单线圈,FCN15强置多线圈);对输入状态10001~1XXXX的读(FCN02);对输入寄存器30001~3XXXX的读(FCN04)。
DLL中的主要函数:ComOpen:打开串口ComClose:关闭串口FCN01:读取一组线圈(00001~0XXXX)FCN02:取得一组开关输入状态数据(10001~1XXXX)FCN03:读多个保持寄存器数据(40001~4XXXX)FCN04:读多个输入寄存器数据(30001~3XXXX)FCN05S:置位单线圈(00001~0XXXX)FCN05R:复位单线圈(00001~0XXXX)FCN06:预置单保持寄存器数据(40001~4XXXX)FCN15:强置多线圈的通断数据(00001~0XXXX)FCN16:写多个保持寄存器数据(40001~4XXXX)FCN16_xSet:单保持寄存器的0~15相应位的置位(40001.0-40001.15~4XXXX.0-4XXXX.15)FCN16_xReset:单保持寄存器的0~15相应位的复位(40001.0-40001.15~4XXXX.0-4XXXX.15)FCN16_xSetReset:单保持寄存器的0~15相应位的置复位(40001.0-40001.15~4XXXX.0-4XXXX.15),指使相应的位短时间通断一次(约通60ms)ComTrue:读取DLL中的串口是否备有效打开CinBin:字中相应的位的状态抽取1、打开串口Function ComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint; stdcall;参数:nport: 打开串口号,取值为1~8,代表COM1~COM8;BaudRate:波特率,取值为:1200、2400、4800、9600、19200、38400;DataBits:数据位,取值为5、6、7、8;Parity:校验位,取值1(代表Even)、取值2(代表Odd)、取值3(代表Mark)、取值4(代表Space)、取值5(代表None);StopBits:停止位,取值1(代表1位停止位)、取值2(代表2位停止位)、取值3(代表1.5位停止位);User:DLL授权用户名;返回值:长整型,操作成功返回“1”或“2”;1表示注册授权用户,2表示用户未注册;操作不成功返回为“0”时的原因:1)、串口不存在或被占用; 2)、DLL注册授权不正确。