温度控制_DELPHI_SPCOMM_Modbus协议通讯学习资料
Tadele多通道温控器与S7-200的modbus通讯
Tadele多通道温控器与S7-200的modbus通讯本文详细介绍了Tadele多通道温控器与西门子S7-200的modbus通讯的应用。
其中,Tadele多通道温控器作为modbus通讯的从站;西门子S7-200作为modbus通讯的主站。
主要分三个部分介绍具体操作流程。
第一部分:从站Tadele多通道温控器侧的设置需用tadele编程软件Epro将多通道温控器的COM1设置为modbus从站。
若还没有安装此软件,请到tadele网站下载并安装Epro。
1,打开Epro软件,新建一个工程。
多通道温控器有两种类型,分别为PC2MU-PT08和PC2MU-TC08。
此处以PC2MU-PT08为例。
2,点击确认。
在工程的左侧会弹出一个工程树。
双击下图中的温控器通讯设置;3,在弹出的温控器通讯设置框中,选择COM1配置,设定COM1站号为1,RTU模式,波特率9600,数据位8位,停止位1位,奇校验,应答延迟2ms。
点击确认按钮;4,点击下载图标或者选择在线—>温控器写入5,在弹出的下载框,选择温控器通讯设置,点击执行,下载到温控器即可。
第二部分,主站S7-200侧的编程S7-200做modbus主站通讯。
软件版本V4.0 STEP 7 MicroWIN SP4以上,例程所用版本为SP6。
S7-200主站通讯时,需调用MBUS_CTRL和MBUS_MSG两个库文件。
若未添加,可以打开压缩包中的Toolbox_V32-STEP 7-Micro WIN 32 Instruction Library,安装指令库文件即可。
安装成功后,在新建工程的工程树的文件库中中能看到modbus master,点击modbus master,能看到MBUS_CTRL 和MBUS_MSG两个库文件。
以CPU224为例,介绍S7-200的modbus通讯编程。
1,MBUS_CTRL是用来设置主站PLC的Port0口的通讯参数的。
Delphi环境下利用SPComm控件实现计算机与PLC的串行通信
可 完成 大部 分 通 信 功 能 。编 程 人 员 从 大 量 繁 琐 的底 层 编 程 工作
图 1 S Co P mm 控 件 安 装 界 面
中解 脱 出来 。 本 文 以 OMR ON公 司 的 C M1 P A小 型 P C 为 例 , L 详 细 讨 论 了 在 D lh . 境 下 如 何 利 用 S Co ep i0环 7 P mm 控 件 实 现 P C 与 计 算 机 的 串行 通 信 问题 。 L
摘 要
首 先概 述 了 D lh 环境 下 实现 串行 通 信 的 几 种 方 法 ,接 着介 绍 了 S Co ep i P mm 控 件 的特 性 并 详 述 了如 何 使 用 S Co P mm
控 件 实现 计 算 机 与 P C 之 间 的 串行 通 信 , 后 给 出 了通 信 实例 。 L 最 关键词 : 串行 通 信 , ep i L S C mm 控 件 D lh, C,P o P
罗 贤 东 ’ 张 民 赵 卫 华 ’ 张雅 娟 。
SPCOMM控件在Delphi串口通信中的应用
SPCOMM控件在Delphi串口通信中的应用2008年03月10日星期一下午01:03关键词:Delphi,串口通信,Spcomm控件目前, 随着现代信息技术的进展,运算机串口通信技术已日趋成熟。
由于微机性能价格比高、分析处理能力强、处理速度快以及单片机抗干扰能力强、使用灵活等特点,利用PC机作为上位机,单片机作为下位机的主从工作方式在工业操纵领域中被广泛采纳。
PC机与下位机的通信能够采纳高级语言编程实现,如Delphi、VC等。
Delphi 是新一代面向对象的可视化开发工具,它具有功能强大、简便易用和代码执行速度快等特点,越来越在构架企业信息系统方面发挥着重要作用。
由于Delphi 这些明显特点,利用Delphi 开发工业操纵系统软件成为越来越多的开发人员的选择,而实现系统监测操纵和信息处理的关键是解决PC机与单片机之间的串口通信咨询题。
Spcomm共实现了三个类:串口类Tcomm、读线程类TreadThread以及写线程类TwziteThread[1]。
Tcomm的某个实例在方法StartComm中打开串口,并实例化了一个读线程ReadThread和一个写线程WriteThread,它们和主线程之间进行消息的传递,实现串口通信。
在Delphi7.0中安装Spcomm串口通信控件的方法为:选择Delphi7.0的“Component”菜单,点击“Install Component...”菜单项,然后在弹出的Into existing package 属性页中Unit file name输人框中选择SPCOMM.pas文件,单击两次“OK”按钮后,就能够将Spcomm控件安装到Delphi7.0的System组件页上。
3 Spcomm控件串口通信的实现CommName属性:运算机串口端口号的名字,COM1、COM2……等,在打开串口前,必须填写好此值。
Parity属性:校验位 None、Odd、Even、Mark、Space等。
基于Delphi的计算机与可编程控制器通信过程及实现
基于Delphi的计算机与可编程控制器通信过程及实现发布时间:2021-04-21T01:46:33.077Z 来源:《中国科技人才》2021年第6期作者:臧永娜1 袁宏杰吴淑梅2 韩瀚2 秦家瑞2 [导读] PLC控制器采用Modbus协议,Modbus是一种串行通信协议,由 Modicon公司(施耐德电气公司)于1979年设计。
Modbus为工业领域通信协议标准,是工业电子设备之间常采用的连接方式。
Modbus实现多个 (大约240个) 设备互联在同一个网络上进行通信, Modbus常用来连接监控服务器和远程终端控制系统(RTU)。
1.石家庄祥龙泰超市信息中心河北石家庄 050051,2.石家庄邮电职业技术学院河北石家庄 050022摘要:本文首先概要介绍了基于Modbus协议的PLC(可编程控制器)的通信方式及用途,详细说明了PLC与PC机(计算机)之间的通信原理。
其次给出了PLC通信CRC16校验的流程及实现方法。
同时给出了PLC与PC机通信设置方法以及PC机与PLC通信实现过程及实现源码。
最后说明了计算机与控制器通信的应用场景。
关键词:通信;可编程控制器;CRC校验;Modbus1.引言PLC为可编程控制器,广泛应用于工业生产和自动化控制领域,PLC是将用户存储的控制程序,通过逻辑运算、定时、计数或算数运算指令,完成对各类生产设备的智能控制。
是自动化控制的关键部件。
PLC可编程控制器进行控制功能的两个基本要素是信息进出的交换和物理的可靠实现[1]。
2.PLC485串口通信协议2.1通信概述PLC控制器采用Modbus协议,Modbus是一种串行通信协议,由 Modicon公司(施耐德电气公司)于1979年设计。
Modbus为工业领域通信协议标准,是工业电子设备之间常采用的连接方式。
Modbus实现多个 (大约240个) 设备互联在同一个网络上进行通信, Modbus常用来连接监控服务器和远程终端控制系统(RTU)。
Delphi环境下利用SPComm控件实现计算机与PLC的串行通信
《工业控制计算机》2007年20卷第6期1Delphi中实现串行通信的几种方法及特点实现Delphi环境下的串行通信,可以采用嵌入汇编语句、利用API通信函数、利用MSComm控件和SPComm控件等四种方法。
嵌入汇编的方法,由于是直接对UART串口通信硬件进行操作,实时性好,执行速度很快;但要求编程人员熟悉串行接口芯片的逻辑结构,且程序的可读性和可维护性比较差。
利用API通信函数编写串行通信程序较为复杂,需要掌握大量通信知识,优点是可实现的功能更强大,应用面更广泛,更适合于编写较为复杂的底层通信程序。
而后两种方法对API函数进行了很好的封装,只需设置一些简单的属性,调用少数直观、简易的函数即可完成大部分通信功能。
编程人员从大量繁琐的底层编程工作中解脱出来。
本文以OMRON公司的CPM1A小型PLC为例,详细讨论了在Delphi7.0环境下如何利用SPComm控件实现PLC与计算机的串行通信问题。
2SPComm控件2.1SPComm控件介绍SPComm是一个免费的第三方串口通信控件,该控件具有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作。
在Delphi软件开发中已经成为一个被广泛应用的串口通信控件。
2.2SPComm控件的安装要使用SPComm控件,必须先把它安装到Delphi7.0中去。
安装方法如下:打开Delphi7.0集成开发环境,选择Del-phi7.0的“Component”菜单,点击“InstallComponent...”菜单项,弹出图1所示的窗口。
然后在弹出的Intoexistingpack-age属性页中Unitfilename输人框中填写spcomm.pas文件所在路径,其他可用默认值,单击“OK”按钮后,就可以将Sp-comm控件安装到Delphi7.0的System控件页上。
安装成功后,system控件面板中将出现一个红色控件COMM。
这时COMM控件可以像Delphi自带控件一样使用。
Delphi的MSCOMM实现上位机与PLC间的串行通信
一上位机与PLC间的串行通信随着现代信息技术的发展以及计算机网络的广泛应用,计算机通信技术已经日趋成熟。
作为传统的计算机通信方式的串行通信,由于具有线路简单、应用灵活、可靠性高等一系列优点长期以来获得了广泛的应用。
计算机串行通信在数据财经、数据通信、故障检测、计算机远程监控等方面有广泛的实用价值,特别在Windows下的串口通信可以充分利用Windows下的软件资源优势,实现多任务条件下对外部的数据传输、信息收集和处理。
在本系统中,我们采用了性能/价格比较高的计算机构成厂级的监控工作站。
在PLC与上位计算机之间采用RS-485和RS-232C标准通信接口进行通信。
在两级计算机控制系统中,最不稳定的环节就是上位机。
为了保证系统的稳定性,避免因上位机的故障导致系统控制失灵,所有采集到的信号都反馈到PLC当中。
上位机需要通过串行通信取得所需的数据信息,并通过串行通信将必要的控制信息和参数设置信息写入PLC的数据存储区。
因此,串行通信作为上位机和下位机联系的唯一方式,在整个系统中具有非常重要的作用。
1.1上位机与PLC间的串行通信计算机与计算机或计算机与外部设备之间的数据传输和交换的方式主要有串行通信和并行通信两种方式,其中串行通信指的是数据逐位传输的方式。
由于串行通信方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。
1.1.1串行通信串行通信方式又可分为两种:同步串行通信方式和异步串行通信方式。
1.同步串行通信方式:同步串行通信是以数据块(字符块)为信息单位传送,每帧信息可以包含很多字符。
同步通信要求通信双方以相同的速率进行,而且要准证确协调,通常通过共享一个时钟或定时脉冲源保发送方和接收方准确同步。
这种通信方式的效率较高,但是对时钟同步要求非常严格,成本较高。
2.异步串行通信方式:异步串行通信以字符为信息单位传送。
双方需要遵守异步通信协议,以字符为数据单位,发送方传送字符的时间间隔不确定。
Delphi与仪表之间的MODBUS通讯
Delphi与仪表之间的MODBUS通讯【摘要】在工控领域,经常会遇到各式各样的现场仪表,这些仪表分散在现场的各个位置,这样的话对管理人员和现场操作人员来说都非常不方便,那如何解决这个问题呢?此时就会用到一种方案,那就是配置上位机,用来集中控制这些仪表,这就是所谓的集散系统。
那么如何通过上位机与现场仪表通讯来获取仪表的数据,同时又能对仪表进行远程操作呢?这也就是今天要论述的课题。
在进行通信程序编写之前,我们首先得对现场仪表有一定的了解,最起码地是应该知道现场仪表支持什么通讯协议,需要设置哪些参数,然后才能展开下一步的工作。
【关键词】Delphi;ModBus;集散系统;多线程一、MODBUS通讯协议MODBUS是由莫迪康(现为施耐德公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。
MODBUS协议是应用于电子控制器上的一种通用语言,通过它,控制器之间或其他设备之间可以通信,它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
它定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
二、VSD-6仪表简介VSD-6仪表是某厂家自己制作的一款仪表,它具有一个标准的MODBUS端口(二线制的RS485接囗),在一条RS485总线上可接入接出1至16台VSD-6控制仪表,可方便地同各种组态软件(如:组态王、WINCC、昆仑通态)直接连接通讯,也可以按照标准MODBUS(RTU)通讯协议自编程。
delphi modbusrtu例程
Delphi ModbusRTU例程一、背景介绍ModbusRTU是一种常用的串行通讯协议,广泛应用于工业控制领域。
Delphi是一种流行的编程语言,广泛用于Windows评台的软件开发。
结合Delphi和ModbusRTU可以实现各种工业控制设备的通讯和控制,因此对于Delphi开发者而言,了解和掌握ModbusRTU协议的通讯方式和实现方法是非常重要的。
二、ModbusRTU通讯原理1. ModbusRTU协议是一种串行通讯协议,采用RS-232或RS-485物理层接口进行通讯。
通讯的数据帧由起始位、设备位置区域、功能码、数据、校验位和停止位组成。
常用的功能码包括读取保持寄存器、写入单个寄存器等,通过这些功能码可以实现对Modbus设备的读写操作。
2. ModbusRTU设备采用从机和主机的通讯方式,主机发送请求数据帧,从机响应数据帧。
主机发出的请求数据帧包含设备位置区域、功能码和数据等信息,从机接收到请求后进行处理,并返回响应数据帧。
通讯的稳定性和可靠性对于工业控制领域尤为重要,因此在实际开发中需要考虑通讯时延、错误处理等因素。
三、Delphi中的ModbusRTU实现在Delphi中实现ModbusRTU通讯需要借助第三方组件或库,一般常用的有Indy、Synapse等。
这些组件或库提供了对串行通讯的封装和各种功能的封装,开发者可以直接调用相关函数进行ModbusRTU 通讯。
1. 使用Indy组件实现ModbusRTU通讯Indy是一种基于TCP/IP和UDP协议的开源组件库,提供了对串行通讯的支持。
开发者可以通过TIdSerial组件进行串行通讯的初始化和设置,然后通过相应的函数完成ModbusRTU的读写操作。
Indy组件库具有较好的稳定性和兼容性,能够满足工业控制领域的通讯需求。
2. 使用Synapse库实现ModbusRTU通讯Synapse是一种基于TCP/IP和UDP协议的开源库,同样提供了对串行通讯的支持。
delphixe10 modbusrtu例程
DelphiXE10 ModbusRTU例程一、背景介绍Modbus是一种串行通信协议,用于在工业自动化领域进行数据通信。
ModbusRTU是Modbus协议的一种变种,使用串行通信方式传输数据。
DelphiXE10是一种广泛应用于Windows评台的集成开发环境,可以用于开发各种类型的应用程序。
二、DelphiXE10 ModbusRTU例程的作用DelphiXE10 ModbusRTU例程是指在DelphiXE10开发环境下使用ModbusRTU协议进行通信的示例程序。
通过学习DelphiXE10 ModbusRTU例程,可以了解如何在DelphiXE10环境下编写ModbusRTU通信程序,实现与其他设备的数据交换。
三、DelphiXE10 ModbusRTU例程的编写步骤1. 确定ModbusRTU通信的参数:包括串口波特率、数据位、停止位、校验方式以及Modbus设备的位置区域等。
2. 创建DelphiXE10项目:在DelphiXE10开发环境下创建一个新的项目。
3. 导入ModbusRTU组件:在DelphiXE10的工具栏中选择导入组件,找到ModbusRTU组件并添加到项目中。
4. 设置ModbusRTU组件参数:设置ModbusRTU组件的串口参数、Modbus设备位置区域等。
5. 编写ModbusRTU通信程序:根据需求编写应用程序,实现与Modbus设备的通信。
6. 测试程序:将程序下载到目标设备上,进行测试和调试。
四、DelphiXE10 ModbusRTU例程的应用场景1. 工业自动化控制系统:例如PLC、变频器、仪表等设备之间的数据通信。
2. 智能家居领域:控制家电设备,实现远程监控和控制。
3. 物联网设备通信:与传感器、执行器等物联网设备进行数据交换。
五、DelphiXE10 ModbusRTU例程的优点1. 易于编写和调试:使用DelphiXE10开发环境进行编程,具有良好的可视化界面,便于编写和调试程序。
基于SPCOMM控件开发Delphi串口通信应用程序
基于SPCOMM控件开发Delphi串口通信应用程序柴锁柱;柴华【期刊名称】《内江科技》【年(卷),期】2015(036)011【总页数】2页(P53-54)【作者】柴锁柱;柴华【作者单位】南京工业职业技术学院;上海硌矽电子科技有限公司【正文语种】中文针对越来越多的开发人员选择利用Delphi开发工业控制软件,而其中必须解决的问题之一是串口通信。
本文分析比较了Delphi中几种常用串口通信方法,重点讨论了基于SPCOMM控件开发串口通信应用程序的方法,研究了用SPCOMM控件进行串口通信应注意的技术问题。
1 引言在工业控制系统中,往往利用PC机作为上位机,单片机作为下位机,形成一个主从系统[1,2]。
这充分利用了PC机的性价比高、分析处理能力强、处理速度快,单片机的抗干扰能力强、应用灵活,由于这些的等特点。
上位机通过串口与下位机之间通过串口传递数据和命令信息,PC机的通信程序可以采用高级语言编程实现,如Delphi、VB、VC等[3]。
Delphi是一种面向对象的可视化开发工具,它具有功能强大、简便易用和代码执行速度快等特点,在构架企业信息系统方面发挥着重要作用。
由于Delphi的这些特点,利用Delphi开发工业控制软件也被越来越多的开发人员选择,而实现系统监测控制和信息处理的关键是解决PC机与单片机之间的串口通信问题。
基于SPCOMM控件开发串行通信应用程序在Delphi环境下是一种简单有效的方法。
2 SPCOMM控件简介用Delphi实现串口通信,常用的方法有:①使用控件,常用控件如MSCOMM 和SPCOMM控件等;②使用API函数;③在Delphi中调用其它串口通信程序。
使用API函数的优点是比较适合于编写较为复杂的低层通信程序,但缺点是编写串口通信程序较为复杂,需要掌握大量的通信编程知识。
SPCOMM是一个免费的第三方Delphi串口通信控件,该控件具有丰富的与串口通信密切相关的属性、方法及事件,提供了对串口的各种操作,编程简单、通用性强、可移植性好。
Delphi使用spcomm实现串口通信基础知识及(两个实例)
Delphi使⽤spcomm实现串⼝通信基础知识及(两个实例)⼼得如果你已经会使⽤SPCOMM且出现10个以上的串⼝问题请改⼀下串⼝名mName='\\.\com18';就这样加'\\.\'就⾏了我也不知道什么回事.......以下为抄录不知道是谁的Delphi 是新⼀代可视化开发⼯具,它具有功能强⼤、简便易⽤和代码执⾏速度快等特点,是全球公认的快速应⽤开发⼯具技术的先驱者,它越来越在构架企业信息系统⽅⾯发挥着重要作⽤。
由于Delphi 这些显著特点,许多程序员选择Delphi作为开发⼯具编制各种应⽤程序。
但是,令⼈惋惜的是Delphi没有⾃带串⼝通讯的控件,在它的帮助⽂档⾥也没有提及串⼝通讯,这就给编制通讯程序的开发⼈员带来众多⿇烦,影响了开发进度,下⾯就这⼀技术进⾏讨论。
⽤Delphi 实现串⼝通讯,常⽤的⼏种⽅法为:使⽤控件如MSCOMM和SPCOMM,使⽤API函数或者在Delphi 中调⽤其它串⼝通讯程序。
利⽤API编写串⼝通信程序较为复杂,需要掌握⼤量通信知识,其优点是可实现的功能更强⼤,应⽤⾯更⼴泛,更适合于编写较为复杂的低层次通信程序。
相⽐较⽽⾔,利⽤SPComm控件则相对较简单,该控件具有丰富的与串⼝通信密切相关的属性及事件,提供了对串⼝的各种操作。
使⽤控件这⼀⽅法容易掌握,⽽SPCOMM⽀持多线程,所以SPCOMM 控件的应⽤更加⼴泛。
结合实例详细介绍SPCOMM的使⽤。
⼀.SPCOMM控件的安装1.选择下拉菜单Component的第⼆项Install Component 。
在Unit file name 处填写控件SPCOMM控件所在路径,其它可⽤默认值,点击OK按纽。
2.安装成功后,system控件⾯板中将出现⼀个红⾊控件COMM。
现在使⽤COMM控件可以象Delphi⾃带控件⼀样使⽤.。
⼆.SPCOMM的主要属性,⽅法和事件1.属性CommName:填写COM1,COM2…等串⼝的名字,在打开串⼝前,必须填写好此值。
Delphi下用SPCOMM对Modbus编程
Delphi下用SPCOMM对Modbus编程一、流程主体流程与普通的串口编程一样。
二、ModbusModbus普通串口不致的地方就是发送与返回的数据除遵循串口本身要求外,还有格式要求。
这里以读多位bit为例,其它的读者可查询Modbu功能码文档。
01功能码,读取多个线圈(位,bit),命令为16进制发送命令:01 01 48 00 00 10 2A 66返回命令: 01 01 02 FF 03 B8 0D三、例程例:串口SPCOMM控件名为:SPCOMM1;发送时钟名为:TimerCom;(1)控件属性设置mName := 'COM1'; //串中号表示 COM1、COM2等串口的名字SPCOMM1.BaudRate := 9600; //波特率根据实际需要设定的波特率,在串口打开后也可更改此值,实际波特率随之更改SPCOMM1.ParityCheck := False;//表示是否需要奇偶校验;SPCOMM1.Parity := None; //没有奇偶校验位; 奇偶校验位;SPCOMM1.ReadIntervalTimeOut:= 40; //信息发送后,40毫秒内返回的数据都算作一次返回。
注意要比发送间隔小。
TimerCom.Interval := 50 //时钟刷新间隔 TimerCom.Interval >SPCOMM1.ReadIntervalTimeOut(2)打开串口SPCOMM1.StopComm; //先关闭串口SPCOMM1.StartComm; //打开串口(3)形成发送命令CRCParityCheck16为对发送命令进行CRC校验,这里就不写了。
varbufByte:array[0..50000] of Byte;bufComReadChar :array[0..50000] of chari,nComReadLength:Integer;nCRC:Word;strSend:string;FnCRCFunt,FnCRCStart:Cardinal;//校验多项式,校验初始值 ]begin//先将数据形成16进制字符组成的字符串,然后再来校验发送strSend := '';strSend := IntToHex(1,2); //第1字节机组号strSend := strSend + '01'; //modbus 功能码01 读多个位操作strSend := strSend + IntToHex(StrToInt('$4800',4); //起始地址3、4字节strSend := strSend + IntToHex(16,4); //位总数, 5、6字节for i := 0 to 5 dobeginbufByte[i] := StrToInt('$' + copy(strSend,i*2+1,2));end;nCRC:=CRCParityCheck16(FnCRCStart ,FnCRCFunt,bufByte,6);strSend := strSend + IntToHex(nCRC,4);for i:=0 to 7 dobufComReadChar:=char(strtoint('$'+copy(strSend,i*2+1,2)));nComReadLength := 8;SPCOMM1.WriteCommData(bufComReadChar,nComReadLe ngth); //发送命令,参数:命令,命令长度end;(4)接受返回命令并解析SPCOMM1ReceiveData(Sender: TObject;Buffer: Pointer; BufferLength: Word);vari:integer;rbuf:array [1..1000] of byte ;begin//接收到数据,进行解析move(Buffer^,(pchar(@rbuf))^,BufferLength);for i := 1 to BufferLength dobeginstrTemp := strTemp + IntToHex(rbuf[i],2) + ' ';end;end;。
delphi7串口通信(spcomm控件)实例
Delphi7串口通信(spcomm控件)实例最近在用delphi7做串口通信,网上找了很多例程,复制粘贴运行就没有能通过的,再次鄙视一下列位先行者,你们帮人倒是帮到底啊,没一个是拿过来能用的,太坑了,在N天的努力下(鄙人比较笨)终于通过串口接收到数据,希望给后来人予以帮助,程序如下:功能简介功能比较简单,只是从串口接收单片机发送的数据,给memo1unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes,Graphics, Controls, Forms,Dialogs, SPComm, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Comm1: TComm;Memo1: TMemo;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);procedure Comm1ModemStateChange(Sender: TObject; ModemEvent: Cardinal);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;viewstring:string;i:integer;rbuf,sbuf:array[1..16] of byte;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);beginComm1.OnReceiveData:=Comm1ReceiveData;comm1.StartComm;end;//打开串口procedure TForm1.Button2Click(Sender: TObject);begincomm1.StopComm;end;//关闭串口procedure m1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);vari:integer;beginviewstring:='' ;move(buffer^,pchar(@rbuf)^,bufferlength);for i:=1 to bufferlength doviewstring:=viewstring+ inttohex(rbuf[i],2)+'' ;viewstring:='接收'+ viewstring;memo1.lines.add(viewstring);memo1.lines.add('');end;//接收数据procedure m1ModemStateChange(Sender: TObject;ModemEvent: Cardinal);beginend;end.运行测试,顺利通过,接收到单片机发送的数据,感谢百度好友的帮助。
电子书e书Delphi串口通信编程
在DTE发出数据终端就绪信号(DTR)期间,DTE的控 制软件监视数据设备就绪信号(DSR)是否有效,当 DSR为ON状态后,DTE便知道Modem已准备建立数据 链路,于是DTE开始检测载波信号(DCD),以检查 数据链路是否已经建立
当主叫Modem的载波信号出现在电话线上时,被叫 Modem发出载波信号(DCD),以检查数据链路是否 已经建立
7位:ASCII码,每个字节留一个备用位 8位:前128个遵循ASCII码规则,其余的
128个用来做扩展字符、数字符号、图形 字符等编码。
非文本编码
某些可执行指令文件和图形图像文件就是 以二进制形式而不是ASCII码形式存储的。 一个数据可用二进制形式存储,可以占多 个字节。 在通信领域,常常把这种类型的资料叫做 二进制数据。
将数据转换成串行通信有两种方式 同步方式:接收设备能自动与发送计算机同步,接收
字符有规则的分割开来,以块为单位,没有起始位和 停止位,效率高。 异步方式:以字符为传送单位,传送的字符之间有无 规律的间隔,这样可能使接收设备不能正常接收数据, 因为每接收完一个字符都不能确切地知道下一个接收 的字符从何时开始。(通过加开始位和停止位实现) 传输效率低,成本也低。
常用的9条RS-232信号线
引脚 信号名称 1 载波检测 2 接收数据 3 发送数据 4 数据终端就绪 5 信号地 6 数据设备就绪
信号方向 DCE-DTE DCE-DTE DTE-DCE DTE-DCE DCE-DTE
7 请求发送 DTE-DCE
8 清除发送 DCE-DTE
9 振铃指示 DCE-DTE
通信参数
数据的传送速度 数据的传送单位
数据的传送速度
波特率:每秒所能产生的最大电压状态改变率(一秒 钟可以振荡的次数)bps
温控表modbus协议
现有协议说明:
(一次通讯只可以读写一个寄存器;仪表地址就是仪表参数中的通讯地址(具体设置参见仪表说明书))
(1)各个参数的通讯地址见下表:
参数通讯代号
参数名
含义
参数设置范围
00H
SU
主路设定
01H
AL1
第一路报警值
在设置量程的范围内(或0~50)
02H
AL2
第二路报警值
在设置量程的范围内(或0~50)
03H
PV
测量值
04H
P
比例带
0-100
05H
I
积分时间
0-3000
06H
D
微分时间
0-2000
07H
LIN
输出限制
20-100
08H
M50
比例偏置
0-3200
09H
dPU
自整定偏置
0-20
0AH
db
主路回差
0.2-20.0
0BH
Add
通讯地址
0-63
0CH
bnd
通信波特率
0-3
0DH
FIL
滤波时间常数
20-120
0ቤተ መጻሕፍቲ ባይዱH
Crl
控制方式
0-4
0FH
Inp
输入信号定义
0-11
10H
dPL
量程下限
视输入信号的测量范围(表1)
11H
dPH
量程上限
视输入信号的测量范围(表1)
12H
AP1
报警2输出定义
0-6
13H
AP2
报警2输出定义
0-6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Button5: TButton; Label5: TLabel; Button6: TButton; Label1: TLabel; Label6: TLabel; Label4: TLabel; Label7: TLabel; ComboBox3: TComboBox; ComboBox4: TComboBox; ComboBox5: TComboBox; Comm1: TComm; GroupBox3: TGroupBox; Panel1: TPanel; Panel2: TPanel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label15: TLabel; Panel3: TPanel; Panel4: TPanel; Button7: TButton; Button9: TButton; Button10: TButton; Timer1: TTimer; Label14: TLabel; Panel5: TPanel; Label16: TLabel; Edit1: TEdit; Label17: TLabel; Edit2: TEdit; Label18: TLabel; Edit3: TEdit; Label19: TLabel; Edit4: TEdit; Edit5: TEdit; Label20: TLabel; Label21: TLabel; Edit6: TEdit; Button8: TButton; Label22: TLabel; Edit7: TEdit; Button12: TButton; Edit8: TEdit; Label23: TLabel; Edit9: TEdit;
设备响应:如果成功把计算机发送的命令原样返回,否则不响应。 4、读可读写模拟量寄存器(保持寄存器): 计算机发送命令:[设备地址] [命令号 03] [起始寄存器地址高 8 位] [低 8 位] [读取的寄存器数高 8 位] [低 8 位] [CRC 校验的低 8 位] [CRC 校验的 高 8 位] 例:[10][03][00][6B][00][03][CRC 低][CRC 高] 意义如下: <1>设备地址和上面的相同。 <2>命令号:读模拟量的命令号固定为 03。 <3>起始地址高 8 位、低 8 位:表示想读取的模拟量的起始地址(起始地址为 0)。比如例子中的起始地址为 107。 <4>寄存器数高 8 位、低 8 位:表示从起始地址开始读多少个模拟量。例子中为 3 个模拟量。注意,在返回的 信息中一个模拟量需要返回两个字节 。
Label25: TLabel; Panel6: TPanel; Edit10: TEdit; Label24: TLabel; Edit11: TEdit; Label26: TLabel; Label27: TLabel; Button11: TButton; Button13: TButton; Timer2: TTimer; procedure SetComPort();
设备响应:[设备地址] [命令号 01] [返回的字节个数][数据 1][数据 2]...[数据 n][CRC 校验的低 8 位] [CRC 校验的 高 8 位] 例:[10][01][05][CD][6B][B2][0E][1B][CRC 低][CRC 高] 意义如下: <1>设备地址和命令号和上面的相同。 <2>返回的字节个数:表示数据的字节个数,也就是数据 1,2...n 中的 n 的值。
数据的结构、命令和就答的方式,数据
通讯采用 Maser/Slave 方式,Master 端发出数据请求消息,Slave 端接收到正确消息后就可以
发送数据到
Master 端以响应请求;Master 端
也可以直接发消息修改 Slave 端的数据,实现双向读写。
Modbus 协议需要对数据进行校验,另外,Modbus 采用主从方式定时收发数据,在实际使用中如果某 Slave
设备响应:[设备地址] [命令号 03] [返回的字节个数][数据 1][数据 2]...[数据 n][CRC 校验的低 8 位] [CRC 校验的 高 8 位] 例:[10][03][06][02][2B][00][00][00][64][CRC 低][CRC 高] 意义如下: <1>设备地址和命令号和上面的相同。 <2>返回的字节个数:表示数据的字节个数,也就是数据 1,2...n 中的 n 的值。例子中返回了 3 个模拟量的数据, 因为一个模拟量需要 2 个字节所 以共 6 个字节。 <3>数据 1...n:其中[数据 1][数据 2]分别是第 1 个模拟量的高 8 位和低 8 位,[数据 3][数据 4]是第 2 个模拟量的 高 8 位和低 8 位,以此类推。例子中 返回的值分别是 555,0,100。 <4>CRC 校验同上。
<3>数据 1...n:由于每一个数据是一个 8 位的数,所以每一个数据表示 8 个开关量的值,每一位为 0 表示对应 的开关断开,为 1 表示闭合。比如例 子中,表示 20 号(索引号为 19)开关闭合,21 号断开,22 闭合,23 闭合,24 断开,25 断开,26 闭合,27 闭合... 如果询问的开关量不是 8 的整倍数 ,那么最后一个字节的高位部分无意义,置为 0。 <4>CRC 校验同上。 2、读只可读数字量寄存器(输入状态): 和读取线圈状态类似,只是第二个字节的命令号不再是 1 而是 2。 3、写数字量(线圈状态): 计算机发送命令:[设备地址] [命令号 05] [需下置的寄存器地址高 8 位] [低 8 位] [下置的数据高 8 位] [低 8 位] [CRC 校验的低 8 位] [CRC 校验的 高 8 位] 例:[10][05][00][AC][FF][00][CRC 低][CRC 高] 意义如下: <1>设备地址和上面的相同。 <2>命令号:写数字量的命令号固定为 05。 <3>需下置的寄存器地址高 8 位,低 8 位:表明了需要下置的开关的地址。 <4>下置的数据高 8 位,低 8 位:表明需要下置的开关量的状态。例子中为把该开关闭合。注意,此处只可以 是[FF][00]表示闭合[00][00]表示断 开,其他数值非法。 <5>注意此命令一条只能下置一个开关量的状态。
DELPHI SPCOMM 温控器 Modbus 协议通讯设计
——QQ:64782489 陈建光
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SPComm, ExtCtrls,StrUtils;
CRC 校验:CRC 域是两个字节,包含一 16 位的二进制值。它由传输设备计算后加入到消息中。接收设备 重新计算收到消息的 CRC,并与接收到 的 CRC 域中的值比较,如果两值不同,则有误。
1、读可读写数字量寄存器(线圈状态): 计算机发送命令:[设备地址] [命令号 01] [起始寄存器地址高 8 位] [低 8 位] [读取的寄存器数高 8 位] [低 8 位] [CRC 校验的低 8 位] [CRC 校验的 高 8 位] 例:[10][01][00][13][00][25][CRC 低][CRC 高] 意义如下: <1>设备地址:在一个 485 总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。例子中为想 和 16 号(十进制的 16 是十六进制的 10)通讯。 <2>命令号 01:读取数字量的命令号固定为 01。 <3>起始地址高 8 位、低 8 位:表示想读取的开关量的起始地址(起始地址为 0)。比如例子中的起始地址为 19。 <4>寄存器数高 8 位、低 8 位:表示从起始地址开始读多少个开关量。例子中为 37 个开关量。 <5>CRC 校验:是从开头一直校验到此之前。在此协议的最后再作介绍。此处需要注意,CRC 校验在命令中的 高低字节的顺序和其他的相反。
procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject);
站点断开后(如故障或关机),
Master 端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus 协议的可靠性较好。
ASCII 协议和 RTU 协议进行的比较:
协议 开始标记 结束标记 校验 传输效率
程序处理
ASCII :(冒号) CR,LF
LRC 低
直观,简单,易调试
U 无
无
CRC 高
不直观,稍复杂
LRC 校验:LRC 域是一个包含一个 8 位二进制值的字节。LRC 值由传输设备来计算并放到消息帧中,接收 设备在接收消息的过程中计算 LRC,并 将它和接收到消息中 LRC 域中的值比较,如果两值不等,说明有错误。LRC 校验比较简单,它在 ASCII 协议 中使用,检测了消息域中除开始的冒号 及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加 1 即可。