丹佛斯(Danfoss FC51)与VB6.0 串口RS485通讯实例

丹佛斯(Danfoss FC51)与VB6.0 串口RS485通讯实例
丹佛斯(Danfoss FC51)与VB6.0 串口RS485通讯实例

丹佛斯(Danfoss FC51)与VB6.0 串口RS485通讯实例

通过实验室功能测试和现在使用稳定性测试,VB源码如下:

‘****************************************************************************** ******************************************************************************* *******************************************************************************

Dim HiByte As Byte

Dim LoByte As Byte

Dim CRC16Lo As Byte

Dim CRC16Hi As Byte

Dim ReturnData(1) As Byte

Dim k As Integer

Private Sub Command1_Click()

k = Text9.Text '写6 个字节

'=========== 数组赋值输入代码=============================================================================== ========

'<< 算法一>>

Dim WriteStr() As Byte

Dim u As Integer

ReDim WriteStr(k + 2)

For u = 0 To k

WriteStr(u) = Val("&H" & Text1(u).Text)

Next

'<< 算法二>>

Dim CRC_2() As Byte

Dim v As Integer

ReDim CRC_2(k)

For v = 0 To k

CRC_2(v) = Val("&H" & Text1(v).Text)

Next

'============================================================================== ====================

Call CRC161(CRC_2())

Call CRC16(WriteStr(), k)

MSComm1.InBufferCount = 0

'========== 显示发送代码=============================================================================== =========

Dim m As Integer

For m = 0 To 23

If m <= k Then

Text8(m).Text = Hex(WriteStr(m))

Else

Text8(m).Text = ""

End If

Next

'============================================================================== ====================

WriteStr(k + 1) = LoByte

WriteStr(k + 2) = HiByte

' 发送代码

Text4.Text = ""

Dim g As Integer

For g = 0 To k + 2

Text4.Text = Text4.Text + " " + Hex(WriteStr(g))

Next

MSComm1.Output = WriteStr

'写命令发送后,当接收到8 个字节时中断

CmdLenth = 8

MSComm1.RThreshold = CmdLenth

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Command3_Click()

Dim inx() As Byte

Select Case https://www.360docs.net/doc/03501052.html,mEvent

Case comEvReceive '判断为接收事件

MSComm1.InputLen = CmdLenth '接收数据的长度

inx = MSComm1.Input '接收数据

MSComm1.InBufferCount = 0

For k = 3 To CmdLenth - 3

tmpstr = tmpstr & "/" & Hex(inx(k))

Next

Text14.Text = tmpstr '以十六进制显示所接收长度的数据Beep

End Select

' Dim n As Integer

' Dim tmp As String

' Do While Len(tmp) < 8

' tmp = tmp + MSComm1.Input

' n = n + 1

' If n >= 3000 Then

' MSComm1.PortOpen = False

'

' End If

' Loop

' tmp = Mid$(tmp, 2, 4)

' Text13.Text = tmp

'Word_Read = Hex2Dec(Right$(tmp, 2) + Left$(tmp, 2))

' MSComm1.PortOpen = False

End Sub

Private Sub Form_Load()

MSComm1.Settings = "9600,N,8,1"

https://www.360docs.net/doc/03501052.html,mPort = 1

MSComm1.SThreshold = 0

If Not MSComm1.PortOpen Then MSComm1.PortOpen = True End Sub

Private Sub Timer1_Timer()

'显示<< 算法一>>结果Text2.Text = Hex(HiByte)

Text3.Text = Hex(LoByte)

'显示<< 算法二>>结果

Text6.Text = Hex(CRC16Hi)

Text7.Text = Hex(CRC16Lo)

If Text5.Text <> "" Then '十进制转十六进制

Text10.Text = Hex(Text5.Text)

End If

If Text11.Text <> "" Then '十六进制转十进制

Text12.Text = Val("&H" & Text11.Text)

End If

Text14.Text = MSComm1.OutBufferCount

End Sub

'========== CRC校验<< 算法一>> =============================================================================== =========

Function CRC16(ByRef cmdstring() As Byte, ByVal j As Integer)

Dim data As Integer

Dim I As Integer

Addressreg_crc = &HFFFF

For I = 0 To j

Addressreg_crc = Addressreg_crc Xor cmdstring(I)

For j = 0 To 7

data = Addressreg_crc And &H1

If data Then

Addressreg_crc = Int(Addressreg_crc / 2) '右移1位,除2取整就可以做到右移。Addressreg_crc = Addressreg_crc And &H7FFF '最高位用“0”补齐

Addressreg_crc = Addressreg_crc Xor &HA001 '与A001异或

Else

Addressreg_crc = Addressreg_crc / 2 '右移1位

Addressreg_crc = Addressreg_crc And &H7FFF '最高位用“0”补齐

End If

Next j

Next I

If Addressreg_crc < 0 Then

Addressreg_crc = Addressreg_crc - &HFFFF0000

End If

LoByte = Addressreg_crc And &HFF

HiByte = (Addressreg_crc And &HFF00) / &H100

End Function

'========== CRC校验<< 算法二>> =============================================================================== =========

Function CRC161(data() As Byte) As String 'CRC计算函数

' Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器

Dim CL As Byte, CH As Byte '多项式码&HA001

Dim SaveHi As Byte, SaveLo As Byte

Dim I As Integer

Dim Flag As Integer

CRC16Lo = &HFF

CRC16Hi = &HFF

CL = &H1

CH = &HA0

For I = 0 To UBound(data)

CRC16Lo = CRC16Lo Xor data(I) '每一个数据与CRC寄存器进行异或

For Flag = 0 To 7

SaveHi = CRC16Hi

SaveLo = CRC16Lo

CRC16Hi = CRC16Hi \ 2 '高位右移一位

CRC16Lo = CRC16Lo \ 2 '低位右移一位

If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1

CRC16Lo = CRC16Lo Or &H80 '则低位字节右移后前面补1

End If '否则自动补0

If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或

CRC16Hi = CRC16Hi Xor CH

CRC16Lo = CRC16Lo Xor CL

End If

Next Flag

Next I

Dim ReturnData(1) As Byte

ReturnData(0) = CRC16Hi 'CRC高位

ReturnData(1) = CRC16Lo 'CRC低位

asd = Right("00" + Hex(CRC16Lo), 2) + Right("00" + Hex(CRC16Hi), 2)

End Function

RS232串口通信实验报告

RS232串口通信实验报告 学院:电子信息学院 班级:08031102 姓名:张泽宇康启萌余建军 学号:2011301966 2011301950 2011301961 时间:2014年11月13日 学校:西北工业大学

一.实验题目: 设计一个简单的基于串口通信的信息发送和接受界面 二.实验目的: 1.熟悉并掌握RS232串口标准及原理。 2.实现PC机通过RS232串口进行数据的收发。 3.熟悉VC语言编写程序的环境,掌握基本的VC语言编程技巧。 三.实验内容 程序代码: P// PC1PC2Dlg.cpp : implementation file // #include "stdafx.h" #include "PC1PC2.h" #include "PC1PC2Dlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

单片机串口通信C程序及应用实例

一、程序代码 #include//该头文件可到https://www.360docs.net/doc/03501052.html,网站下载#define uint unsigned int #define uchar unsigned char uchar indata[4]; uchar outdata[4]; uchar flag; static uchar temp1,temp2,temp3,temp; static uchar R_counter,T_counter; void system_initial(void); void initial_comm(void); void delay(uchar x); void uart_send(void); void read_Instatus(void); serial_contral(void); void main() { system_initial(); initial_comm(); while(1) { if(flag==1) { ES = 0; serial_contral(); ES = 1; flag = 0; } else read_Instatus(); } } void uart_send(void) { for(T_counter=0;T_counter<4;T_counter++) { SBUF = outdata[T_counter]; while(TI == 0);

TI = 0; } T_counter = 0; } uart_receive(void) interrupt 4 { if(RI) { RI = 0; indata[R_counter] = SBUF; R_counter++; if(R_counter>=4) { R_counter = 0; flag = 1; } } } void system_initial(void) { P1M1 = 0x00; P1M0 = 0xff; P1 = 0xff; //初始化为全部关闭 temp3 = 0x3f;//初始化temp3的值与六路输出的初始值保持一致 temp = 0xf0; R_counter = 0; T_counter = 0; } void initial_comm(void) { SCON = 0x50; //设定串行口工作方式:mode 1 ; 8-bit UART,enable ucvr TMOD = 0x21; //TIMER 1;mode 2 ;8-Bit Reload PCON = 0x80; //波特率不加倍SMOD = 1 TH1 = 0xfa; //baud: 9600;fosc = 11.0596 IE = 0x90; // enable serial interrupt TR1 = 1; // timer 1 RI = 0; TI = 0; ES = 1; EA = 1; }

RS232串口通信详解

串口是计算机上一种非常通用的设备通信协议。 --------------------------------- 串口的引脚定义: 两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。--------------------------------- 串口的电气特性: 1)RS-232串口通信最远距离是50英尺 2)RS232可做到双向传输,全双工通讯,最高传输速率20kbps 3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3 ~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片:

--------------------------------- 串口通信参数: a)波特率:RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、 4800、9600、19200波特。b)数据位:标准的值是5、7和8位,如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位);扩展的ASCII码是0~255(8位)。 c)停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。d)奇偶校验位:在串口通信中一种简单的检错方式。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为 0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。 --------------------------------- 串口通信的传输格式:串行通信中,线路空闲时,线路的TTL电平总是高,经反向RS232的电平总是低。一个数据的开始RS232线路为高电平,结束时Rs232为低电平。数据总是从低位向高位一 位一位的传输。示波器读数时,左边是数据的高位。 例如,对于16进制数据55aaH,当采用8位数据位、1位停止位传输时,它在信号线上的波形如图1(TTL电平)和图 2(RS-232电平)所示。 55H=01010101B,取反后10101010B,加入一个起始位1,一个停止位0,55H的数据格式为1010101010B; aaH=10101010B,取反后01010101B,加入一个起始位1,一个停止位0,55H的数据格式为1101010100B;

Qt编写串口通信程序

Qt编写串口通信程序图文详解 (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动。) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类。我们可以去 https://www.360docs.net/doc/03501052.html,/projects/qextserialport/files/ 进行下载,也可以去下载我上传到网上的: https://www.360docs.net/doc/03501052.html,/bbs/read.php?tid=22847 下载到的文件为:qextserialport-1.2win-alpha.zip 其内容如下图: 我们在windows下只需要使用其中的6个文件: qextserialbase.cpp和qextserialbase.h,qextserialport.cpp和qextserialport.h,win_qextseri alport.cpp和win_qextserialport.h 如果在Linux下只需将win_qextserialport.cpp和win_qextserialport.h 换为posix_qextserialpo rt.cpp和posix_qextserialport.h即可。 第一部分: 下面我们将讲述编程的详细过程,这里我们先给出完整的程序,然后到第二部分再进行逐句分析。 1.打开Qt Creator,新建Qt4 Gui Application,工程名设置为mycom,其他使用默认选项。(注意:建立的工程路径不能有中文。) 2.将上面所说的6个文件复制到工程文件夹下,如下图。

基于VerilogHDL的RS-232串口通信在CPLD上的实现综述

基于Verilog的RS-232串口通信在CPLD上的实现 CPLD(Complex Programable Logic Device)是一种复杂的用户可编程逻辑器件。采用连续连接结构,延时可预测,从而使电路仿真更加准确。CPLD 是标准的大规模集成电路产品,可用于各种数字逻辑系统的设计。开发工具Quartus II、ISE等功能强大,编程语言灵活多样,使设计开发缩短了周期。 随着嵌入式的发展,对数据的传输和人机交互通信的要求越来越高。而串口通信因其资源消耗少、技术成熟而被广泛应用。系统中上位机与嵌入式芯片之间的交互通信可以通过专用集成芯片作为外设RS-232异步串行接口,如TI、EXAR、EPIC公司的550、452等系列UAWT集成电路,或在拥有Nios系统的FPGA上可以方便地嵌入UART模块。但是在设计中用户会提出自己的要求,如:数据加密或只使用UART部分功能等,即要求更灵活的UART。而且有时CPLD资源剩余,出于成本考虑也会要求设计一种模拟的UART。对于上述的两种情况,就可以在CPLD其丰富的资源上制作一款UART,实现PC机与嵌入式系统之间的数据交换。 1 串口通信协议 1.1 UART简介 通用异步收发器(Universal Asynchronous Receiver Transmitter,UART)。

异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小。具有相关工业标准提供的标准的接口电平规范等优点,在工业控制领域被广泛采用。 异步通信一帧字符信息由4部分组成:起始位、数据位、奇偶校验位和停止位。 本设计基于RS-232的数据帧结构,设置数据帧结构如图1所示:1 bit起始位,8 bit数据位,1 bit停止位,无校验位。每帧实质上传送1 Byte数据。 1.2 自定义数据包格式 多个上文所描述的帧就可以组成一个数据包。串口通信是在RS-232数据帧结构的基础上定义的,传输以数据包为单位进行。包结构如图2所示。 本文采用和校验的结构,一个数据包包含15 Byte。其中第1个字节是数据包头即握手字符。第2字节为控制字符,EE代表写命令,DD代表读命

java串口通讯程序

java串口通讯程序 1、下载java Communications api开发包。| 是Sun公司提供的,用于开发平台独立的通讯应用程序的扩展API。 2、将拷贝入C:\j2sdk1.4.2_04\bin 3、将拷贝入C:\j2sdk1.4.2_04\jre\lib\ext 4、将拷贝入C:\j2sdk1.4.2_04\jre\lib 5、编译文件 import .*; import .*; import .*; public class CommTest{ public static void main(String[] args){ SerialPort serialPort=null; DataOutputStream doutput=null; InputStream inputStream; CommPortIdentifier portId=null; String messageString="hello \n"; try{ portId=("COM1"); }catch(NoSuchPortException ne) { "ne"); (); } try{ serialPort=(SerialPort) ("TestComm", 5); OutputStream output = (); doutput=new DataOutputStream(output); inputStream = (); }catch(PortInUseException ex) { "ex"); (); }catch(IOException ie) { "ie"); (); //(); } try { (9600, , , ; } catch (UnsupportedCommOperationException e) {} } try { ()); } catch (IOException e) {}

用C编写的RS232串口通信程序

void main() { delayms(100); init(); //初始化系统 delayms(100); init_wdt(); //初始化看门狗 while(1) { while(!RI_0) //是否收到数据 { clr_wdt(); } RI_0=0; //清除接收中断标志 buffer=S0BUF; if(buffer==0x5a) //检测祯头0 start0=1; if(buffer==0x54) //检测祯头1 start1=1; if(buffer==0x5a) //检测祯尾0 end0=1; if(buffer==0xfe) //检测祯尾1 end1=1; if((start0==1)&(start1==1)) { buff[i]=buffer; //从祯头1开始存储数据 i++; } if((end0==1)&(end1==1)) //是否已经接收祯尾 { count=i; //数据长度为count个 i=1; if((buff[2]==0x03)&(count==107)) //是否422指令 { buff[0]=0x5a; //重填祯头0 buff[count-4]=0; //校验和清零 for(k=2;k<(count-4);k++) //计算校验和 { buff[count-4]+=buff[k]; } for(k=0;k

S0BUF=buff[k]; while(!TI_0); //等待发送完成 TI_0=0; //清除发送中断标志 } reset(); } else if((buff[2]==0x05)&(count==7)) //是否AD测试指令 { sendad(); reset(); } else if((buff[2]==0x18)&(count==7)) //是否发送时序信号指令 { sendpaulse(); reset(); } else //如果接收错误,则恢复各标志位为初始状态以便下次接收 { reset(); } } } } void reset() { start0=0; //祯头祯尾标志位清零 start1=0; end0=0; end1=0; for(k=0;k

RS232串口通信详解

. 串口是计算机上一种非常通用的设备通信协议。 --------------------------------- 串口的引脚定义: 9芯信号方向来自缩写描述 1调制解调器CD载波检测 2调制解调器RXD接收数据 3PC TXD发送数据 4PC DTR数据终端准备好 5GND信号地 6调制解调器DSR通讯设备准备好 7PC RTS请求发送 8调制解调器CTS允许发送 9调制解调器RI响铃指示器 两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。--------------------------------- 串口的电气特性: 1)RS-232串口通信最远距离是50英尺 2)RS232可做到双向传输,全双工通讯,最高传输速率20kbps 3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3 ~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片:

--------------------------------- 串口通信参数: a)波特率:RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、 4800、9600、19200波特。b)数据位:标准的值是5、7和8位,如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位);扩展的ASCII码是0~255(8位)。 c)停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。d)奇偶校验位:在串口通信中一种简单的检错方式。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为 0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。 --------------------------------- 串口通信的传输格式:串行通信中,线路空闲时,线路的TTL电平总是高,经反向RS232的电平总是低。一个数据的开始RS232线路为高电平,结束时Rs232为低电平。数据总是从低位向高位一 位一位的传输。示波器读数时,左边是数据的高位。 例如,对于16进制数据55aaH,当采用8位数据位、1位停止位传输时,它在信号线上的波形如图1(TTL电平)和图 2(RS-232电平)所示。 55H=01010101B,取反后10101010B,加入一个起始位1,一个停止位0,55H的数据格式为1010101010B; aaH=10101010B,取反后01010101B,加入一个起始位1,一个停止位0,55H的数据格式为1101010100B;

PC机串口通信的工作原理

PC机串口通信的工作原理 MCU资料2008-08-27 09:03:59 阅读22 评论0 字号:大中小订阅 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB 混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步 ------------------------- 一、RS485串口通信电路图

CT1150 4串口通讯管理服务器产品说明书V1.0

CT1150 4串口通讯管理服务器 产品说明书 一、产品概述 CT1150 4串口通讯管理服务器是实现PCS1800分布式控制系统接入第三方设备的一种网关设备,满足系统网络对第三方带Modbus-RTU协议的控制器、通用I/O、智能仪表等的协议转换、数据的实时采集、控制、集中管理等功能。它采用目前工业控制系统成熟的技术平台:嵌入式高性能处理器及嵌入式操作系统、智能通讯冗余技术、现场总线技术、端口保护技术等,具有功能强大、运行稳定、可靠性高等特点。 CT1150 4串口通讯管理服务器支持标准的DIN型导轨安装,提供4路RS-485串行接口实现外部设备接入,2个以太网接口实现SNet A、B网络冗余接入到PCS1800系统。 系统网络图

二、性能指标 三、产品特点 1、高性能工业级嵌入式处理器,能够胜任高强度的通讯数据处理任务; 2、实时多任务操作系统,为系统运行提供实时、可靠的平台; 3、多功能、冗余以太网接口,为系统提供冗余、多操作站以及符合TCP协议智能 设备的连接; 4、多层网络结构,高效通讯处理机制。真正意义上的多层网络架构设计使得不同网 络层次上的设备同步运行,分线程的自主的通讯轮询处理机制,为整个系统的实时性提供了坚实的基础; 5、串行端口参数灵活组态。串行端口的数量、类型、地址、波特率、协议等通讯参数 可通过管理软件进行组态和设定; 6、串行端口静电、浪涌保护。为系统对环境的适应性提供了保障; 7、双路24V直流电源输入,方便用户灵活使用; 8、安装方便,标准的DIN导轨安装。 四、外形说明 外形设计为DIN导轨安装结构,其外形图如下:

①双路24VDC电源输入端口 ②接地螺丝 ③PW1、PW2为24V电源指示灯,SF为系统故障指示灯 ④系统网络接口(SNet1、SNet2,100M以太网) ⑤RS-485串行端口(COM1、COM2、COM3、COM4)五、端口定义 7.1、串口定义

51单片机与蓝牙串口通信程序

#include #include #include #include "LCD1602.h" #include "matrix_key.h" #define uint unsigned int #define uchar unsigned char #define Nop() _nop_() sbit P10 = P1^0; /*定义独立对地按键端口*/ sbit P11 = P1^1; /*定义独立对地按键端口*/ sbit P12 = P1^2; /*定义独立对地按键端口*/ sbit P13 = P1^3; /*定义独立对地按键端口*/ //shift键 bit shift_flag; bit call_flag ; bit CallIn_flag=0; bit reci_flag; bit reci_flag1; sbit sled_en_port = P3^6; /*定义数码管数据锁存器控制端口*/ sbit led_en_port = P2^5; /*定义发光二极管数据锁存器控制端口*/ sbit ds1302_en_port = P2^2; /*定义时钟的选片脚*/ uchar CallIn_Num[15];//={"00000000000"}; uchar CallOut_Num[15]={" "}; uchar m=0; //拨号指针 uchar temp='?'; uchar code clr[16]={" "}; uchar code lcd_table[16] = {"Ky: Cm: Re: "}; //uchar send_buff[15]; uchar reci_buff[15]={" "}; uchar z; //接收缓冲区指针 uchar time;//定时器中断次数 uchar code mun_to_char[]={"0123456789ABCDEF"}; /*1MS为单位的延时程序*/ void init(); void send(uchar cc); void send_f(uchar ccc); void interrupt_pro(); void key_pro(); void call_out();

RS232+RS485实现通讯实验板

RS232+RS485实现通讯实验板 1 引言 计算机控制系统中经常采用多机系统进行通信,在由PC机和单片机构成的分布式控制系统中,往往以PC机为上位机完成较为复杂的数据处理和对前沿机的监督管理,以及对下位机进行多机协调,本文介绍一种将 RS232,RS485,及红外接口集成在一起的PC机--单片机多功能通讯实验板,用于实现PC机与单片机间的串口通信、红外通信及PC机与PC机间的通讯实验。 2 实验板的组成原理与设计 2.1 串行通信 串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线,以每次一个二进制位移动的,他的优点是只需一对传输线进行传送信息,因此其成本低,适用于远距离通信,他的缺点是传送速度低,串行通信有异步通行和同步通信两种基本通信方式,同步通信适用于传送速度高的情况,其硬件复杂,而异步通信应用于传送速度在50-19200波特之间,是比较常用的传送方式,在异步通信中,数据是一帧一帧传送的,每一串行帧的数据格式由1位起始位,5-8位的数据位,1位的奇偶校验位(可省略)和1位停止位4部分组成,在串行通信前,发送方和接收方要约定具体的数据格式和波特率(通信协议)。 2.2 AT89C51微控制器 AT89C51单片机系统具有设计简单、性能可靠、功耗低等优点,它为用户预留下足够的软硬件资源,可供用户进行再开发应用,该系统除内部已有的 4K FLASH存储器外,还可以扩展选址64K ROM区和64K RAM区,供用户使用,用户在系统开发时,可以将自己的数据块和程序段、数据表,以若干控制子程序、数据块形式存放于AT89C51单片机的扩展ROM或 RAM 区中,以便系统工作时重复使用和反复调用。 2.3 RS232C通信接口 RS232C是一种电压型总线标准,可用于设计计算机接口与终端或外设之间的连接,以不同的极性的电压表示逻辑值。-3~-25V表示逻辑"1"。+3~+25V表示逻辑"0"。其电平与TTL和CMOS电平是不同的,所以在通信时必须进行电平转换。 2.4 MAX232芯片 MAXIM公司的MAX232/MAX232A接收/发送器是MAXIM公司特别为满足EIA/TEA2232E的标准而设计的,他们在 EIA/TIA2232E标准串行通信接口中日益得到广泛的应用,他们具有功耗低、工作电源为单电源、外接电容仅为0.1μF或1μF,采用双列直插封装形式、接收器输出为三态TTL/CMOS等优越性,为双组RS 232接收发送器,工作电源为+5V,波特率高,仅需外接0.1μF或1μF的电容,其价格低,可在一般需要串行通信的系统中使用,MAX232外围需要 4个电解电容,是内部电源转换所需电容,其取值均为1μF/25V宜选用钽电容并且应尽量靠近芯片。。 2.5 红外发送、接收电路 红外通讯以红外线作为通讯载体,通过红外光在空中的传播来传输数据,他由红外发射器和红外接收器来完成,在发射端,发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外脉冲发射到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换,解调译码后恢复出原信号。 红外发送电路中采用的红外发射器件是塑封的TSAL6200红外发射二极管,他将周期的电信号转变成一定频率的红外光信号,他是一种时断时续的高频红外脉冲信号,但脉冲串时间长度是恒定的,根据脉冲串之间的间隔大小,表示传输的是数据"0"还是

51单片机串口通信的原理与应用流程解析

51单片机串口通信的原理与应用流程解析 一、原理简介 51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。 与之前一样,首先我们来了解单片机串口相关的寄存器。 SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。 串行口控制寄存器SCON(见表1)。 表1 SCON寄存器 表中各位(从左至右为从高位到低位)含义如下。 SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。 表2 串行口工作方式控制位 其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。 SM2 :多机通信控制位。该仅用于方式2 和方式3 的多机通信。其中发送机SM2 = 1(需要程序控制设置)。接收机的串行口工作于方式2 或3,SM2=1 时,只有当接收到第9 位数据(RB8)为1 时,才把接收到的前8 位数据送入SBUF,且置位RI 发出中断申请引发串行接收中断,否则会将接受到的数据放弃。当SM2=0 时,就不管第位数据是0 还是1,都将数据送入SBUF,并置位RI 发出中断申请。工作于方式0 时,SM2 必须为0。

串口服务器连接西门子PLC进行编程和监控

串口服务器连接西门子PLC 进行远程编程和监控方法讨论 今天想跟大家讨论一下PC 机如何机使用低成本串口服务器和西门子PLC 进行远程编程和监控的方法,现在工控市场现在有多种品牌的串口服务器,前一段时间我做过一个测试,今天把方法和结果做成一个应用方案,跟大家讨论,本方法只是与西门子PLC 通讯方法的一种补充和扩展。欢迎各位高手捧场,错误不祥之处请原谅! 讨论QQ: 125745783 EMAIL:HGANYAN@https://www.360docs.net/doc/03501052.html, 测试环境如下: PC 机:CPU 赛扬4 2.4G 、 XP+SP2 、组态王6.51、STEP 7 MicroWIN (V4.0E ) 其它硬件:10~100M 交换机、JR45网线、串口服务器一套、DB9公头一只、电线若干。 我们首先连接好硬件各个硬件,电脑网卡通过网线连接到交换机,把串口服务器的网口也连接到交换机。给串口服务器通上电。参照说明书和各个设备的工作指示灯确保硬件连接正常。通常网卡有一个绿色指示灯用来提示网线连接状态,绿色灯亮起表示网络线连接好。 下面是主要的两个接线图: RS 485 通讯线 RJ45网线 工业以太网 系统硬件结构图

完成硬件连接后,接下来需要配置网络和串口以太桥的参数,为了更容易理解这些参数我们先在下面给出与PLC 通讯的2种简易流程图: 通讯的普通流程 PPI 电缆

使用串口服务器的流程 参照上面的两个通讯流程图就很容易理解串口服务器在这个通信过程中的角色和作用了。在使用串口服务器来连接PLC后,监控软件使用标准API函数使用串口收发数据,虚拟串口驱动为操作系统模拟出一个标准的串口设备供API调用,这样就保证了不用过多修改监控软件,增强了系统的通用性。虚拟串口驱动得到监控软件的数据后调用TCP/IP驱动库,把数据快速转发给网络上的串口服务器,串口服务器得到数据后立即按设定的串口参数把数据提交给PLC设备处理;同样,PLC的数据经过串口发送并被串口服务器采集缓存,串口服务器按设定把数据封装成TCP/IP数据包通过网络发网PC机,PC机接收到TCP/IP包后立即转发给虚拟串口驱动,虚拟串口驱动把数据返回给API函数,上位机监控软件得到需要的数据。 通过分析我们发现在加入ECOM-6132串口服务器后的通讯流程图上多出了如干个数据处理环节和传输环节,这肯定会给系统带来一定的延时开销,据推测大概是50~80MS,与实际测试相符。但是这个延时在大部分系统是允许的,可以可靠工作,如,西门子的编程软件STEP 7 MicroWIN、组态王使用PPI 和MODBUS两种协议在加入串口服务器通讯的情况下表现相当稳定。 当然也有注意的几个问题,由于增加了数据的处理和传输工作量,需要选择配置较高的PC机做服务器(运行虚拟串口驱动程序)。虚拟串口驱动的效率和工作特性能否能满足需要成为非常重要的关键点,通常串口服务器连接好后,但是上位机软件缺不能稳定的工作都是驱动软件不好造成的。还有就是必须按我们的PLC设备串口参数来配置串口服务器的串口参数,并保证这两个设备的串口参数完全一样,不然就得不到正确的数据了。 如果条件允许我们应适当增加监控软件在发送数据状态和接收数据状态的转换的延时时间,这样可以得到比较好的数据帧,有利于上下位机处理。

MFC实现对串口通信的编写

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。 实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合硬件、软件,重点提及比较新的技术,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助 一.串行通信的基本原理 串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从 CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。 在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。 应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。 串口通信程序的流程如下图: 二.串口信号线的接法 一个完整的RS-232C接口有22根线,采用标准的25芯插头座(或者9芯插头座)。25芯和9芯的主要信号线相同。以下的介绍是以25芯的RS-232C为例。 ①主要信号线定义: 2脚:发送数据TXD; 3脚:接收数据RXD; 4脚:请求发送RTS; 5脚:清除发送CTS; 6脚:数据设备就绪DSR;20脚:数据终端就绪DTR;8脚:数据载波检测DCD; 1脚:保护地; 7脚:信号地。 ②电气特性: 数据传输速率最大可到20K bps,最大距离仅15m. 注:看了微软的MSDN 6.0,其Windows API中关于串行通讯设备(不一定都是串口RS-232C或RS-422或RS-449)速率的设置,最大可支持到RS_256000,即256K bps! 也不知道到底是什么串

TTL与RS232电平模拟转换电路及工作原理

1.先介绍电脑上与单片机进行通讯的接口的名称 (1)一般是用电脑串口来进行通讯的,平常大家说的电脑的串口是指台式电脑主机后面的九针接口,如下图 这个接口有个专业的名称,叫RS23接口,而RS232接口是串口通讯的一种,其实所谓的接口,我的理解就是一种通信协议,规定了传输电平,传输方式,及怎么传输数据等等。 协议标准规定采用一个25个脚的DB25连接器,还规定了连接器的每个引脚的信号内容,同时还对各种信号的电平加以规定。但随着设备的不断改进,出现了代替DB25的DB9接口,现在都把RS232接口叫做DB9。 (2)电脑上的RS232接口采用的是负逻辑电平: -15~-3表示逻辑1; +15~+3表示逻辑0; 电压值通常在7V左右 (3)我们可以使用串口电缆直接连接两台PC机的串口,实现两台PC机的串口通讯。但是PC 机和单片机的通讯却不能够用电缆直接进行连接,原因是PC机RS232串口的电平标准和单片机的TTL电平不一致,因此单片机和PC机之间的串口通讯必须要有一个RS232/TTL电平转换电路。通常这个电路都选择专用的RS232接口电平转换集成电路进行设计,如MAX232、HIN232等。 2.单片机串口输出的逻辑电平 单片机的串口输出电路采用的逻辑电平是TTL电平。这种电平信号由TTL器件产生的,一般的芯片,如运放,数字器件等... TTL:Transistor-Transistor Logic 三极管结构。 Vcc:5V;VOH>=2.4V;VOL<=0.5V; VIH>=2V;VIL<=0.8V 3.单片机与电脑串口的连接 首先解决的就是逻辑接口电平的问题,其次就是通信方法及方式的问题 (1)在这里我们可以使用集成芯片MAX232,这是一款专门用来进行信号电平的转换的芯片,使用起来简单方便,这里把电路贴出。

微机原理串口通信.课程设计概要

1基础理论知识 1.1通信的方式 通信的基本方式可以分为并行通信和串行通信两种。 串行通信时数据用一根传输线逐为顺序传送。并行通信和串行通信是CPU与外部设备之间进行信息交换的基本方法。采用并行通信时,构成一个字符或数据的各位同时传送,每一位都占用一条通信线,另外还需要联络以保证和外围设备协调地工作,它具有较高的传输速度。但由于在长线上驱动和接收信号较困难,驱动和接收电路较复杂,因此并行通信的传输距离受到限制,这种通信方式多用于计算机内部,或者作为计算机与近距离外围设备传输信息用。 1.2串行通信 串行通信分为两种类型:串行异步通信和串行同步通信。 串行异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。 同步通信时指在约定的数据通信数率下,发送方和接收方的时钟信号频率和相位始终保持一致,通信双方发送数据和接收数据具有完全一致的定时关系。 串行通信的数据传输方式分为单工传送,半双工传送,全双工传送。 单工传送:单工传送时指在通信时只能由一方发送数据,另一方接收数据的通信方式。 半双工传送:指在通信时双方都能够接收或者发送,但是不能够同时接收和发送的通信方式。 全双工传送:通信双方之间有两条通路,发送信息和接收信息可以同时进行。

2 串口通信芯片8250 2.1 8250的内部结构 INS 8250是通用异步收发器UART ,用作异步通信接口电路。INS 8250的引脚信号基 本上可 以分为两大类:与 CPU 系统总线相连的信号线和与通信设备 MODEM 连接的信号 线 CTS 2. 8251A 的 数据总线缓冲器 状态字 寄存器 发送数据 寄存器 接收数据 寄存器 发送 缓冲器 并一串 TxD RESET ---- CLK —— C/D --- RD ---- WR —y CS —— DTR ~KC DSR RTS - 读/写 控制逻辑 调制解调 控制逻辑 * TxRDY ■ TxE -TxC --- RxRDY RxC SYDNETZBRKDET 6 ? D ()

串口通讯服务器--RS232串口服务器

串口服务器在调制解调器、短信猫转网口中的应用 1.modem和modem转网口应用 modem的中文名是调制解调器,俗称“猫”。最早的猫主要指电话线拨号上网用的Modem,现在随着手机网络的普及,短信猫、GPRS猫、彩信猫也相应出现了。一般modem(猫)和计算机连接是通过串口的,但是报警系统有时候需要通过网口连接设备,这不仅可以使得猫和计算机的连线距离变得更长,而且可以更加易于扩展。此时一般用串口服务器NETCOM2000实现串口转以太网的功能连接modem和计算机。 2.串口服务器连接Modem步骤 这里以拨号上网调制解调器(型号为金浪的KN-JT560)通过NETCOM2000转为网口为例介绍串口服务器实现猫转网口的步骤。总体来说,NETCOM2000将猫的串口转为网口,之后在计算机端通过ZLVircom虚拟串口将网口转化为虚拟串口,拨号软件通过虚拟串口拨号上网。 2.1 物理连接 将猫的串口和NETCOM2000的串口连接,将NETCOM2000的网口连接到计算机。由于NETCOM2000支持各种硬件流控(CTS/RTS、DTR/CTR)所以可以和Modom配合通信并进行流控。 2.2 绑定虚拟串口 使用ZLVircom软件创建一个计算机上不存在的COM口,例如COM5。将查找到的NETCOM2000设备和COM5绑定。此时COM5实际对应的就是modem的串口。 2.3 安装Modem驱动 1. 在控制面板中双击“电话和调制解调器”选项。 2.选择“不要检测我的调制解调器”,然后点击下一步。

3.在驱动列表中选择您的调制解调器的型号。 4.驱动安装完毕后,可以新建一个以COM5为端口的拨号连接,并开始拨号。之后用户计算机就通过COM5->虚拟串口驱动->NETCOM2000网口->NETCOM2000串口->Modem串口->电话线的方式上网了。

相关文档
最新文档