RS232通信程序设计
基于modbus通信协议的rs232通信

};
#endif __SERIALPORT_H__
2.串口的一些成员函数实现(CSerialPort.cpp)
2.1串口线程函数
UINT CSerialPort::CommThread(LPVOID pParam)
{
CSerialPort *port = (CSerialPort*)pParam;
port->m_bThreadAlive = TRUE;
class CSerialPort
{
public:
// contruction and destruction
CSerialPort();
virtual~CSerialPort();
// port initialisation
BOOLInitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 512);
if (port->m_hComm)// check if the port is opened
PurgeComm(port->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
40 RS232标准串口设计的单电源电平转换芯片_MAX232_中文资料及应用

max232中文资料及应用一.max232资料简介该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。
由于电脑串口rs232电平是-10v +10 v,而一般的单片机应用系统的信号电压是ttl电平0 +5v,max232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。
该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-V TTL/CMOS电平。
每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。
主要特点1、单5V电源工作2、 LinBiCMOSTM工艺技术3、两个驱动器及两个接收器4、±30V输入电平5、低电源电流:典型值是8mA6、符合甚至优于ANSI标准 EIA/TIA-232-E及ITU推荐标准V.287、ESD保护大于MIL-STD-883(方法3015)标准的2000V下图为MX232双串口的连接图,可以分别接单片机的串行通信口或者实验板的其它串行通信接口:三.max232应用电路,注意电容接法。
232是电荷泵芯片,可以完成两路TTL/RS-232电平的转换,它的的9、10、11、12引脚是TTL电平端,用来连接单片机的。
制作at89s51单片机器编程器的电路图MAX232获得正负电源的另一种方法在单片机控制系统中,我们时常要用到数/模(D/A)或者模/数(A/D)变换以及其它的模拟接口电路,这里面要经常用到正负电源,例如: 9V,-9V; 12V,-12V.这些电源仅仅作为数字和模拟控制转换接口部件的小功率电源。
在控制板上,我们有的只是5V电源,可又有很多方法获得非5V电源。
1.外接;2.DC-DC变换......在这里我介绍一块大家常用的芯片:MAX232. MAX232是TTL--RS232电平转换的典型芯片,按照芯片的推荐电路,取振荡电容为uF的时候,若输入为5V,输出可以达到-14V左右,输入为0V ,输出可以达到14V,在扇出电流为20mA的时候,处处电压可以稳定在 12V和-12V.因此,在功耗不是很大的情况下,可以将MAX232的输出信号经稳压块后作电源使用。
RS232和RS485-PPT课件

第17页
Hale Waihona Puke 智能电子技术实践MDOBUS通信协议的基本格式
序号 1 1 SOI 2 1 ADR 3 1 特征码 4 1 长度 5 1 查询/回应 6 N 信息 7 2 CRC1 6 8 1 EOI
项 目 六 : 串 行 通 信
字节 数 格式
SOI为起始位标志当值为F1H时为主发标志,值为F3H时为响应标志; ADR是信息帧的第一字节(8位)设备地址描述。 特征码是设备特征描述代码。 长度是该整条指令的总字节数(包括起始位标志、结束码)。 查询/回应是控制标识码, 也称功能码:查询消息中的功能代码告之 被选中的从设备要执行何种功能。 CRC16是冗余循环码包含2个字节,即16位二进制。 EOI为结束码当值为F2H是为主发结束,值为F4H时为响应结束。
2019/3/9
第14页
智能电子技术实践
任务提出
项 目 六 : 串 行 通 信 实现任务如下图:
PC通过RS232与485 转换接口与多个站点的 智能机相连接,每个站 点有一MAX485连接一个 温度传感器DS18B20。可 将每个站点的温度传送 到PC 微机屏幕显示。
2019/3/9
第15页
智能电子技术实践
2019/3/9
第3页
智能电子技术实践
知识链接
项 目 六 : 串 行 通 信
一、串行口有关的概念
UART(Universal Asynchronous Receive/Transmitter通用异步收发器。在异步串行通信 总线中,RS-232C和RS485是比较广泛的两 种总线标准 。这两种标准只是在电平标准上作了一定的约定。串行异 步通信的数据格式。
2019/3/9
VB及RS232及485

vb是Visual Basic的简称,是由美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发Windows 环境下的各类应用程序。
它简单易学、效率高,且功能强大可以与Windows 专业开发工具SDK相媲美。
在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。
Visual 意为可视的、可见的,指的是开发像Windows操作系统的图形用户界面(Graphic User Interface,GUI)的方法,它与其他编程软件不同的是不需要编写大量代码去描述界面元素的外观和位置,只要把预先建立好的对象拖放到屏幕上相应的位置即可。
应该说,这是一次质的飞跃,是一次编程技术的革命。
VB的特点1.面向对象VB采用了面向对象设计思想,它基本思路是把复杂的设计问题分解为多个能够完成独立功能且相对简单的对象集合。
所谓“对象”就是个可操作实体如窗体、窗体中命令按钮、标签、文本框等,面向对象编程就是指程序员可根据界面设计要求直接在界面上设计出窗口、菜单、按钮等类型对象并为每个对象设置属性。
2.事件驱动在Windows环境下是以事件驱动方式运行每个对象的都能响应多个区别事件,每个事件都能驱动段代码事件过程,该代码决定了对象功能。
通常称这种机制为事件驱动的编程机制。
可由用户操作触发也可以由系统或应用触发例如单击个命令按钮就触发了按钮Click(单击)事件该事件中代码就会被执行,若用户未进行任何操作(未触发事件)则就处于等待状态整个应用就是由彼此独立事件过程构成。
3.软件Software集成式开发VB为编程提供了个集成开发环境在这个环境中编程者可设计界面、编写代码、调试直至把应用编译成可在Windows中运行可执行文件并为它生成安装VB集成开发环境为编程者提供了很大方便4.结构化设计语言VB具有丰富数据类型是种符合结构化设计思想语言而且简单易学此外作为种设计语言VB还有许多独到的处5.强大数据库访问功能VB利用数据Control控件可以访问多种数据库VB 6.O提供ADOControl 控件不但可以用最少代码实现数据库操作和控制也可以取代DataControl 控件和RDOControl控件6.支持对象链接和嵌入技术VB核心是对对象链接和嵌入(OLE)技术支持它是访问所有对象种思路方法利用OLE技术能够开发集声音、图像、动画、字处理、Web等对象于一体的功能强大的软件。
PLC 通讯原理和程序设计

PLC通讯原理和程序设计通讯程序设计在自动化系统的应用越来越广泛,例如plc 与操作界面的数据交换,通过通讯对变频器的控制,plc 的连网等等。
要想实现plc 的通讯编程,首先所选的plc 必须有强大的通讯能力,就是说plc 的操作系统能够支持多种通讯格式,通常一种品牌的plc 如果能够提供给用户更多的编程自由度,那么这种品牌的技术开发能力就越强大,大多数品牌只能提供固定格式的通讯格式或协议,这就大大局限了plc 与其他智能设备的数据交换。
我们的plc 产品具有RS232 和光电隔离的RS485 两个自由通讯口, 两个通讯口可以同时收发数据,几乎可以适应所有通讯格式,可以提供CRC 和BCC 等多种校验方式。
以一台PLC 通过485 通讯控制多个某品牌的变频器为例:如果该变频器的波特率是9600b/s ,8 个数据位,奇校验, 1 个停止位。
那么首先必须在plc 的嵌入 C 窗口的初始化代码区编程一个通讯口设置语句:Set485Port(9600,o,8,1); 仅仅一个语句就完成了对485 通讯口的编程。
由于485 通讯必须设定主从关系,这里是plc 控制多台变频器,所以plc 必须设置为主,因此还需在初始化代码区增加一个地址和主从设定语句:SetAddress(1,MASTER); 事实上,对于主控制器来说,地址已经失去意义。
通讯口已经设置完毕,下面就是如何根据要求将数据发送给变频器。
例如一组8 字节控制数据如下所示:01h ----> 变频器编号03h ----> 命令21h ----> 两字节参数地址02h00h ----> 两字节参数02hCRC ---> 两字节CRC 校验马CRCPLC 程序:Set485TBAddPointer(0);AddNumberTo485TB(0x1);AddNumberTo485TB(0x3);AddNumberTo485TB(0x21);AddNumberTo485TB(0x2);AddNumberTo485TB(0x0);AddNumberTo485TB(0x2);AddCRCTo485TB();Start485Transmit();PLC基础知识简介在自动化控制领域,PLC 是一种重要的控制设备。
威佛微电子 MDB -RS232 通信适配器说明书

上海威佛微电子有限公司.上海市浦东新区东方路8号良丰大厦23E Tel.: (0086)21 6845-8945 Fax: (0086)21 5045-4820MDB硬币器,纸币接收器以及MDB刷卡器等MDB 设备RS-232通信PC转接盒Model: MDB-RS232(新版)技术规格通信格式. (主机(PC)向MDB-RS232发送指令为HEX格式,MDB-RS232发给PC的格式为ASCII)波特率9600BPS起始位 1数据位数8奇偶校验NO停止位 1硬件规格.供电电压最小20 VDC (特殊情况下,可以根据外围设备需要的供电电压进行选择)正常供电范围:Nominal 24...34 VDC (或者24...30VAC)静态电流< 0.05A在接收纸币的时候电流会有0.5A 持续大概1 秒数据线标准电脑串口通信线规格尺寸大约80 x 50 mm重量大约0.1kg图中:(1)RS232串口插头(如果用户设备没有串口,则需要增加一个串口转USB的适配器)(2)DC24V电源输入接头,不需要区分正负极(3)为MDB接头,直接和同样MDB接口的纸币器,硬币器以及刷卡器相接即可安装MDB-RS232并连接到PC:MDB-RS232的安装相对很简单,只有三个接口需要连接,包括电源接口,MDB接口,RS232通信接口。
盒子上的RS232串口可以直接或者通过串口延长线连接MDB盒子到电脑后面的COM口。
然后在盒子上会发现有两个6-pin Molex接头(一公一母),只要分别接上MDB接口纸币接收器,硬币器等MDB设备,最后给MDB转接盒上电,供电电压一般使用直流DC24V,即可完成安装。
安装后,一定要弄清楚电脑的串口的串口号,如果是通过USB转串口方式得到的串口,可以在WINDOWS的“设备管理器”里看具体生成的虚拟串口号。
如果是刚开始通过测试软件测试,则注意,在“Serial Setting”那里,要打开对应的串口号,同时软件的”mode”那里要勾选上”HEX”。
甲乙两机串口通信双向控制系统软件设计与系统仿真课案

case 0: transfer('D');
led1=1; led2=1;
break;
case 1: transfer('A');
led1=0; led2=1;
break;
case 2: transfer('B');
led1=1; led2=0;
break;
case 3: transfer('C');
1.
题目设计要求:
甲乙两机串口双向通信设计
要求:利用51单片机,RS232芯片,LED灯,数码管进行双机通信设计。甲机可按键控制乙机的LED显示;乙机可按键控制甲机的数码管显示。完成以下设计环节:
1)使用Altium Desinger开发工具,设计电路原理图。
2)使用Uvision2开发平台,采用C语言或汇编语言设计软件程序。
TMOD=0x20;//定时器T1工作在方式2
PCON=0x00;
TH1=(256-253)/32;
TL1=(256-253)%32;
RI=0;
TI=0;
TR1=1;
IE=0x90;//串行口中断打开
while(1)
{
if(key==0)
{
while(key==0);
num=(num+1)%4;
}
switch(num)
图2.1总体框图
双机通信系统通过甲乙单片机的串行口来实现数据的收发。
甲单片机通过开关电路来启动发送程序,甲机当开关按下时向乙机发送一个数据,乙机上蜂咛器发出声音提示有数据发送过来,乙机通过接收中断来接收和开关判断是否接收甲机发送过来的数据,并通过编写好的数据代码在8个发光二极管上显示主机发送过来的数据。
RS232,RS422,RS485 临时接线解决方案

RS-232、RS-485、RS-422接线的临时的解决方案收藏RS-232、RS-485、RS-422 在现场调试经常遇到多种方式的串口通讯的问题,如RS-232、RS-485、RS-422不同口的通讯连接问题,通常RS-485和RS-422之间转换很方便。
但遇到RS-232口要和RS-422口通讯,现场无其他转换方式,如果再邮寄可能等的时间较长。
现在可以有一种临时的解决方案。
(1).RS-232和RS-422 将RS-422的R+、T+短接,和RS-232的GND相连。
RS-422的R-和RS-232的Txd相连,RS-422的T-和RS-232的Rxd相连即可。
.原理如下:RS-232-C接口的电气特性是电压均为负逻辑关系。
即:逻辑“1”,-5—-15V;逻辑“0”+5—+15V 。
噪声容限为2V。
即要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号作为逻辑“1”。
RS-485的电气特性:逻辑“1”以两线间的电压差为+(2—6)V表示;逻辑“0”以两线间的电压差为-(2—6)V 表示。
所以当RS-232发送“1”时,Txd和GND的电压差为-3—-15V,在RS-422的R+和R-之间形成逻辑“1”的电平(注:线路电平衰减较小)。
当RS-422发送“1”时,RS-422的T+和T-之间形成逻辑“1”的电平为+(2—6)V ,在RS-232的Txd和GND的之间形成逻辑“1”的电平(注:由于RS-422通讯采用差动电平,线路较长衰减也较小,RS-232接收的电平基本维持在5伏)。
通讯距离可以认为以RS-232为准。
即一般小于50米。
我在宝塔石化临时测试过,达40米后还好的很。
(2).RS-232和RS-485 将RS-485的R+、T+短接,和RS-232的GND相连。
RS-485的R-、T-短接,将RS-232的Rxd、Txd短接,两者相连即可。
由于RS-232为全双工,RS-485为半双工,如要通讯则要在通讯程序中做处理才可,但临时使用(如电度表连在NAS-968D/E,用DEBUG设电度表的地址)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RS232通信程序设计
标签:it
【实验目的】
1、理解串口通信的原理。
2、设计在Windows环境下通过串口相互进行计算机会话的基本通信程序。
【实验性质】
综合与设计性实验
【实验条件】
需要带有RS232接口的计算机,一条RS232连接线(双机互联或一台计算机的两个串口互联)。
【实验指导】
在Windows环境下设计串口通信程序,一种途径是利用Microsoft公司提供的ActiveX控件MSComm.ocx。
它为开发RS232通信程序提供了简便方法。
1、MSComm控件的属性和事件
一个MSComm控件仅对应一个串行端口。
如果应用程序需要访问多个串口,必须使用多个控件。
MSComm控件有很多重要的属性,下面是几个最常用的属性:
1)CommPort:用于设置并返回连接的串口号,Windouws将使用该串口和外界通信。
2)Settings:用于设置并返回数据传输的通信参数。
例如设置值为:“4800,n,8,1”时,表示数据传输速率为4800bit/s,没有奇偶校验,数据位是8位,停止位是1位。
3)PortOpen:取值为true或flase,用于打开或者关闭端口。
4)InputMode:取值及其含义如表2-1所示,用于设置或返回Input属性取回的数据的类型。
5)Inputlen:设置或返回依次从接收缓冲区读取的字节数。
6)InPut:用于从接收缓冲区读取Inputlen长度的数据,并将接收数据赋予变量。
7)OutPut:用于向发送缓冲区写数据,OutPut属性可以发送文本或二进制数据。
8)Rthreshold:该属性为一阀值,当接收缓冲区中字符数达到该值时,MSComm 控件设置Commevent属性为ComEvReceive,并产OnComm事件,用户可在OnComm 事件处理程序中进行相应处理,若Rthreshold属性设置为0,则不产生OnComm 事件。
9)Sthreshold:该属性为一阀值,当发送缓冲区中字符数小于该值时,MSComm 控件设置Commevent属性为ComEvSend,并产OnComm事件,若Sthreshold属性设置为0,则不产生OnComm事件。
要特别注意的是,仅当发送缓冲区中字符数小于该值的瞬间才产生OnComm事件,其后就不再产生OnComm事件。
10)Handshaking:用于设置或返回硬件握手协议,即PC机和通信设备之间为了
控制流速而设定的内部协议,取值及其含义如表2-2所示。
Value默认值为ComNone,无握手协议。
11)InBufferSize:设置或返回接收缓冲区的大小,默认值为1024B。
12)InBufferCount:设置或返回接收缓冲区等待计算机接收的字节数。
13)OnBufferSize:设置或返回发送缓冲区的大小,默认值为512B。
14)OnBufferCount:设置或返回发送缓冲区等待计算机发送的字节数。
15)CommEvent:该属性设计时无效,运行时只读。
一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。
用户程序就可以在OnComm事件处理程序中针对不同的代码,进行相应的处理。
CommEvent属性的代码、常数及含义如表2-3及表2-4所示。
MSComm控件只有一个事件,即OnComm事件。
当CommEvent属性的值发生变化时,就产生OnComm事件,标志发生了一个通信事件或一个错误。
在事件处理程序设计中可以根据CommEvent属性值来执行不同的操作。
2、C# 编程要点
MSComm控件可以为C#.NET、VC、VB、Delphi等Windows的编程语言所引用,下面以C#.NET为例说明在编写RS232通信程序的要点。
1)添加MSComm控件。
C# 开发平台在默认状态下工具箱中并无MSComm控件,需要在“项目”→“添加引用” →“COM”菜单栏加入Microsoft Comm Control 6.0组件,并在“工具” →“自定义工具箱”菜单中选择Microsoft Comm Control组件,这样就可以在工具箱中找到MSComm控件,把MSComm控件添加到FORM中。
2)串口属性设置。
在添加MSComm控件后,在通信之前要对属性进行设置。
根据前面的介绍,对MSComm控件设置如下:
AxMSCommLib.AxMSComm com; //定义MSComm控件变量
mPort=1; //设定串口号
If( com.PortOpen )
Com.PortOpen=false; //若该端口已经打开,则关闭该端口
Com.Rthreshold=1; //当接收到数据时就触发OnComm事件
Com.Settings=” 9600,n,8,1”; //设置参数:数据传输速率为9600bit/s,没有奇偶校验,数据//位是8位,停止位是1位
Com.Handshaking=None; //没有使用握手
协议
Com.InputMode=InputModeText; //文本形式取回
Com.InputLen=0; //当设置为0时,在Input可用时读取所有的数据
Com.OnComm+=new System.EventHandler(this.OnComm); //OnComm事件发生加入列表
Com.PortOpen=true; //打开端口
3)发送和接收数据。
数据发送容易实现,只需将要发送的数据赋值给Output,代码如下:
axMSComml.Output=”This is a test”; //发送的数据字符串
MSComm控件采用查询或事件驱动方法从串口获取数据,由于前面Rthreshold属性设置为1,所以只要有数据到达就会产生OnComm事件,实现接收数据代码如下:
Private void OnComm(object sender,System.Eventargs e)
{
string recievemsg;
if(com.InBufferCount>0) //检查接收到的数据长度是否大于0,若大于0表示接//收到数据
recievemsg= (string com.Input);
}。