工控网首页
>

应用设计

>

利用VB6.0与莱恩达的智能模块实现通讯设计

利用VB6.0与莱恩达的智能模块实现通讯设计

2004/12/17 20:23:00
一、 引言: 在工业现场中,人们常常面临着数据采集和管理的任务。而且工业现场有时各个传感器分布在不同的位置,距离较远,传感器的信号一般为电压信号,一旦传送距离远了,会造成信号衰弱。因此人们提出了传感器信号在监测点处理,然后再传回监控室,分布式监控的概念就此诞生。智能模块由于其灵巧方便而且RS485传送距离远,在分布式监控系统中得到了广泛的采用。 二、 硬件介绍: 1、FBMOD-8AI现场总线智能节点的通信采用了MODBUS协议,通信为异步半双工模式,结构为主-从结构,格式如下: 串口通信格式: 1位---起始位、8位---数据位、2位(默认)/1位(可选)---停止位、无奇偶校验 发送格式(主机): 01 04 00 00 00 10 CRCL CRCH 01:节点地址 04:功能号 00 00:读寄存器的起始地址 00 10:读取寄存器长度 CRCL CRCH:CRC校验码 接收格式(主机): 01 04 20 …… CRCL CRCH 01:节点地址 04:功能号 20:数据长度 ……:数据 CRCL CRCH:CRC校验码 2、FBMOD-8DO现场总线智能节点的通信采用了MODBUS@RTU协议,通信为异步半双工模式,结构为主-从结构,格式如下: 串口通信格式: 1位---起始位、8位---数据位、2(默认)/1(可选)位---停止位、无奇偶校验 发送格式(主机): 02 05 00 01 FF/00 00 CRCL CRCH 02:节点地址 05 :功能号 00 01:地址,00~07 FF/00 00:置“1”/清“0” CRCL CRCH:CRC校验码 接收格式(主机): 02 05 00 01 FF/00 00 CRCL CRCH 02:节点地址 05 :功能号 00 01:地址,00~07 FF/00 00:置“1”/清“0” CRCL CRCH:CRC校验码 三、 软件说明: 在VB软件编程方面关键是通讯参数的设定,上位机与模块通讯时要把数据设成子节型数进行传送,CRC16校验码的计算。 MSCOMM.OCX(): 打开串口 Private Sub Command1_Click() MSComm1.CommPort = 1 If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If MSComm1.Settings = "9600,n,8,2" Command1.Enabled = False End Sub 关闭串口 Private Sub Command3_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If End End Sub 计算CRC16校验码 Function CRC16(data() As Byte) As Byte() 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 Dim L As Integer Dim data1 As Byte 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) = CRC16Lo returndata(1) = CRC16Hi CRC16 = returndata End Function 注意:在数据传输时CRC的低位可能在前,而高位在后。 计算出命令的crc码 通道置一子程序 Private Sub DOCRC1(ByVal data As Byte) Dim a(8) As Byte 发送数据 Dim d(5) As Byte 待传输数据 Dim crc() As Byte d(0) = &H3 d(1) = &H5 d(2) = &H0 d(3) = data d(4) = &HFF d(5) = &H0 crc = CRC16(d) 得到CRC16校验码 a(0) = &H3 a(1) = &H5 a(2) = &H0 a(3) = data 要发送的通道号 a(4) = &HFF a(5) = &H0 a(6) = crc(0) a(7) = crc(1) MSComm1.Output = a End Sub 通道清零子程序 Private Sub DOCRC0(ByVal data As Byte) Dim a(8) As Byte 发送数据 Dim d(5) As Byte 待传输数据 Dim crc() As Byte d(0) = &H3 d(1) = &H5 d(2) = &H0 d(3) = data d(4) = &H0 d(5) = &H0 crc = CRC16(d) a(0) = &H3 a(1) = &H5 a(2) = &H0 a(3) = data a(4) = &H0 a(5) = &H0 a(6) = crc(0) a(7) = crc(1) MSComm1.Output = a End Sub 通道0按钮 Private Sub Command4_Click() Dim data1 As Byte Dim cmd As Boolean data1 = &H0 If cmd = 0 Then Call DOCRC1(data1) Command4.Caption = "开" cmd = 1 Else Call DOCRC0(data1) Command4.Caption = "关" cmd = 0 End If End Sub 四、结束语 RS485串行通信是目前计算机与其他设备之间通信广泛采用的方式之一,传送数据准确,程序稳定运行是系统开发的主要目的。分布式系统现在广泛应用于工业现场,智能模块在远离传送中起到了关键的作用,避免了信号的大幅度衰减。 1、李鸿吉·Visual Basic 6.0编程方法详解 2、范逸之·Visual Basic与分布式监控系统——RS-232/RS485串口通信
投诉建议

提交

查看更多评论
其他资讯

查看更多

通过C语言控制OMRON PLC的RS232通讯