智慧互联 下载中心 联系我们 关于我们 留言反馈
设为首页
收藏本站
网站导航
  首 页 培训课程 企业培训 项目合作 学员中心 技术分享 下载中心 联系方式 产品展示 淘宝店铺
  资讯检索
 
 
  课程中心

PLC类培训课程
S7-200/Smart系列培训
S7-1200/1500PLC培训
S7-300/400PLC培训
三菱Q和FX系列培训
欧姆龙CP/CJ系列培训
台达|永宏|信捷PLC培训
其他品牌PLC培训
通讯|伺服|控制器培训
分项分小专题培训
嵌入式与单片机开发
51/AVR八位单片机系列
STM32系列嵌入式培训
零基础入门课程
上位机编程
标准课程
高级课程
零基础入门课程
电类软件培训
AutoCAD应用班
AD/Protel培训
EPLAN 培训
三维与机械类软件
UG/NX建模与自动编程
SolidWorks建模与加工
自动化部品销售
工控自动化元件
PLC及周边成品

  资讯排行
1 S7-200SMAR
2 S7-1500系列P
3 PLC初学辅导-电机
4 MicroSD卡与西
5 C#利用接受事件通过
6 S7-200SMAR
7 如何用 S
8 西门子S7-1500
9 c#利用TCP/IP
10 三菱Q系列PLC以太
11 FB100和PID控
12 西门子S7-1500
13 造成PLC输出点烧坏
14 S7-200 Mod
15 自动化装备里面的工业
16 vb.net利用Se
17 TIA Portal
18 VB编写的MODBU
19 S7-200smar
20 用VB实现PLC与计
 
地区分布:滁州、安徽、宣城、池州、巢湖、六安、黄山、安庆、铜陵、芜湖、淮南、蚌埠、阜阳、宿州、合肥、马鞍山、淮北、澳门、北京、宁德、福建、泉州、漳州、龙岩、福州、南平、莆田、厦门、三明、兰州、甘肃、嘉峪关、金昌、宁夏、韶关、广东、潮州、梅州、河源、清远、珠海、汕尾、东莞、佛山、深圳、广州、汕头、湛江、江门、肇庆、云浮、阳江、茂名、中山、惠州、钦州、广西、北海、玉林、柳州、百色、贵港、梧州、柳州、桂林、南宁、贵州、遵义、六盘水、贵阳、海口、海南、三亚、琼山、文昌、琼海、万宁、通什、儋州、许昌、河南、三门峡、郑州、新乡、鹤壁、安阳、濮阳、焦作、商丘、洛阳、漯河、平顶山、南阳、信阳、济源、周口、驻马店、开封、沧州、河北、保定、石家庄、邯郸、邢台、衡水、秦皇岛、廊坊、承德、张家口、唐山、佳木斯、黑龙江、哈尔滨、齐齐哈尔、大兴安岭、大庆、鹤岗、牡丹江、伊春、宜昌、湖北、荆门、黄石、咸宁、荆州、鄂州、孝感、黄冈、十堰、随州、仙桃、天门、武汉、潜江、襄樊、益阳、湖南、常德、长沙、永州、怀化、岳阳、株洲、郴州、衡阳、湘潭、昭阳、张家界、长春、吉林、白城、吉林、四平、辽源、通化、白山、松原、扬州、江苏、苏州、无锡、常州、镇江、泰州、盐城、淮阴、宿迁、连云港、徐州、南京、南通、景德镇、江西、鹰潭、新余、萍乡、赣州、上饶、抚、宜春、九江、吉安、南昌、辽阳、辽宁、新、营口、盘锦、大连、锦州、铁岭、抚顺、丹东、鞍山、沈阳、本溪、朝阳、葫芦岛、赤峰、内蒙古、呼伦贝尔、呼和浩特、包头、银川、宁夏、石嘴山、西宁、青海、滨州、山东、青岛、日照、临沂、济宁、威海、莱芜、枣庄、菏泽、泰安、济南、烟台、潍坊、淄博、东营、德州、聊城、阳泉、山西、太原、朔州、晋城、临汾、大同、延安、陕西、宝鸡、渭南、铜川、西安、咸阳、上海、自贡、四川、南充、攀枝花、宜宾、泸州、绵阳、成都、德阳、天津、香港、乌鲁木齐、新疆、石河明、舟山、浙江、宁波、绍兴、金华、嘉兴、湖州、杭州、丽水、温州、重庆
 
 
VB编写的MODBUS通讯上位机的简单程序
双击自动滚屏 恒邦现代智造技术培训2017-09-28 阅读:12994次 关注微信公众号 PLC958,获取最快捷,最有用的技术资讯
恒邦培训机构为您提供如下课程:VB.net 上位机编程培训,垂询电话:0553-5848750,18055386918
VB.net 上位机编程培训
恒邦培训机构为您提供如下课程:C#语言-上位机编程培训,垂询电话:0553-5848750,18055386918
C#语言-上位机编程培训

  我们最常用的是在RS-485上使用MODBUS协议。其中最重要指令是读写寄存器,介绍如下:

    03功能码 功能:读保持寄存器

请求

地址(1 个字节)+ 功能码(0x03)+起始地址(2 个字节)+寄存器数量(2 个字节)+校验码(2 个字节)

应答   

地址(1 个字节)+  功能码 (0x03)+ 字节数( 1 个字节)+寄存器值(寄存器数量×2个字节)+校验码(2 个字节)

例如:   发送     01 03 00 00 00 02 C4 0B  // 读取寄存器地址00和01的值

        接收     01 03 04 00 00 00 01 3B F3   //返回寄存器地址00的值0,寄存器地址01的值01 。

 

 

06 功能码 功能:写单个寄存器

请求

地址(1 个字节)+功能码(0x06)+寄存器地址(2 个字节)+寄存器值2 个字节+校验码(2 个字节)

应答   

地址(1 个字节)+  功能码 (0x03)+寄存器地址(2 个字节)+寄存器值(2 个字节)+校验码(2 个字节)

例如:   发送 01 06 00 01 00 01 19 CA   //写寄存器01值 01

        接收    01 06 00 01 00 01 19 CA 

 

16 功能码 功能:写多个寄存器

请求

地址(1 个字节)+功能码(0x10)+起始地址(2 个字节)+寄存器数量(2 个字节)

+字节数(1 个字节)+寄存器值(寄存器数量×2 个字节)+校验码(2 个字节)

应答

地址(1 个字节)+功能码(0x10)+起始地址(2 个字节)+寄存器数量(2 个字节)

+校验码(2 个字节)

 

例如   发送 01 10 00 00 00 02 04 00 00 00 01 32 6F //寄存器00写入00,寄存器01写入01

接收 01 10 00 00 00 02 41 C8               

    有了以上内容就可以制作上位机软件,由于前面用的一台电脑出故障,使用另台电脑时,发现原来的使用者安装好了VisualBasic6.0,在硬件条件具备的情况下,尝试做了个针对性的测试软件。

里面的设置为大家所熟悉的端口号、波特率、校验位等;因此串口的设置不复杂,与串口调试助手设置差不多。

初始化如下

    MSComm.CommPort=Port  ' 设定端口

    MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位

    MSComm.InBufferSize=1024  ' 设置接收缓冲区为1024字节

    MSComm.OutBufferSize=4096 ' 设置发送缓冲区为4096字节

    MSComm.InBufferCount=0     ' 清空输入缓冲区

    MSComm.OutBufferCount=0    ' 清空输出缓冲区

    MSComm.SThreshold=1        ' 发送缓冲区空触发发送事件

    MSComm.RThreshold=1        ' 每X个字符到接收缓冲区引起触发接收事件

    MSComm.OutBufferCount=0    ' 清空发送缓冲区

    MSComm.InBufferCount=0     ' 清空接收缓冲

MSComm.PortOpen=True       ' 打开串口

 

数据的接收

   ReceiveArr=MSComm.Input           ' 数据放入数组

数据的发送

   MSComm.Output=SendArr               ' 发送数据

 

有了以上的串口内容,笔者就开始尝试编写一个串口调试助手,然后根据接收的数据,经过处理就可以完成一个MODBUS通信测试软件了。但是很快发现制做一个串口调试助手需要花费时间还是比较多的,而且是一个大家常用的软件,那么是否有源代码呢?通过别人的原代码修改可以事半功倍。果然,网上有完整的代码,还有其它语言的代码。这样就找了个功能相对完整的串口RS485调试助手如图:

经过测试发现这个软件不完善:1、需要先发送数据之后,才能正常接收数据;2、长的数据被分成几个接收。对于第一问题不影响使用,如前所述MODBUS 是一个请求/应答协议,一发一收,上位机需先发数据。对于第二个问题,修改中断方式,利用定时器中断,然后控制好接收时间就可以了。

接下来就是数据的处理,MODBUS后面两字节采用的是CRC校验,计算效验码是个难点。代码如下:

Dim CRC1 As String

Public Sub CRC(STR1 As String)

Dim CRCREG As Long

Dim MVAL As Long

Dim R As Integer

Dim t As Long

Dim a As Long

Dim B As Long

CRCREG = 65535

For R = 1 To Len(STR1) Step 2

MVAL = Val("&H" + Mid(STR1, R, 2))

CRCREG = CRCREG Xor MVAL

CRCREG = CRCREG And 65535

For t = 1 To 8 Step 1

If (CRCREG And &H1) Then

CRCREG = (CRCREG \ 2) Xor &HA001

CRCREG = CRCREG And 65535

Else:

CRCREG = CRCREG \ 2

CRCREG = CRCREG And 65535

End If

Next

Next

 

a = CRCREG And 255

B = CRCREG And 65280

a = a * 256

B = B / 256

 

If (a + B) < 16 Then

CRC1 = "000" + Hex(a + B)

ElseIf (a + B) < 256 Then

CRC1 = "00" + Hex(a + B)

ElseIf (a + B) < 4096 Then

CRC1 = "0" + Hex(a + B)

Else

CRC1 = Hex(a + B)

End If

End Sub

接下来就是对号入座了。原本打算给每个寄存器放一个读按键和写按键,后面发现单个读取写入不实用,改成一次读取多个参数。由于有一百多个寄存器超过了上限,因此分两条指令,收到第一条应答后发送第二条,写参数也是同样的处理。

读参数的处理

Select Case i 'i代表寄存器

Case 0

Case 1

     c1.Text = ReceiveArr(i * 2 + 4 - commandstart * 2)             

 

写参数的处理:

        Select Case i

            Case 1 '代表寄存器

                DATA_SENT(i * 2 + 7) = 0

                If Int(ADDR.Text) < 100 Then

                DATA_SENT(i * 2 + 7 + 1) = Int(ADDR.Text)

                Else

                err.Show’超过输入范围,跳出提示框

                GoTo Err

                End If

 
   好文推荐
1 如何用 S7-200 实现 Modbus 通信?18056
2 西门子S7-1500和S7-1200之间的Modbus/TCP通信编程和参数化14323
3 S7-200 Modbus RTU 通信23393
4 vb.net利用SerialPort进行读取串口操作13380
5 VB编写的MODBUS通讯上位机的简单程序12994
6 用VB实现PLC与计算机间的串行通信7013
7 上位机通信通过欧姆龙PLC控制变频器7257
8 二极管嵌位原理在控制器通讯电平转换中的运用12715
9 威纶WEINVIEW触摸屏与欧姆龙CP1系列PLC通讯7019
10 看图细说S7-200PLC的RS485通讯6396

18055386918、18055386926学PLC单片机上位机编程咨询PLC培训请学PLC单片机上位机编程 咨询嵌入式培训请 PLC编程与工控技术群
关键词:PLC培训 PLC编程培训 芜湖PLC培训 西门子PLC培训 三菱PLC培训 欧姆龙PLC培训 PLC网络培训 PLC教学视频 PLC教程 PLC编程实例 PLC编程入门
触摸屏培训 伺服系统培训 变频器培训 PLC编程软件下载 安徽PLC培训 学习PLC 设计师证书 PLC培训学校 马鞍山培训 合肥PLC培训 人机界面培训

© copyright all rights reserved
恒邦自动化培训中心 - 芜湖市恒邦科技有限公司 全部资讯 全部课程
地址:芜湖经济技术开发区科创中心C园 邮编:241006 TEL:0553-5848750
未经许可 以上内容不得转载 或用作商业用途 皖ICP备09005786号-1

PLC培训 PLC编程培训 芜湖PLC培训 西门子PLC培训 三菱PLC培训 欧姆龙PLC培训 PLC网络培训 PLC教学视频 PLC教程 PLC编程实例 PLC编程入门
触摸屏培训 伺服系统培训 变频器培训 PLC编程软件下载 安徽PLC培训 学习PLC 设计师证书 PLC培训学校 马鞍山培训 合肥PLC培训 人机界面培训