首页 上一页 1 2 下一页 尾页

VB实现modbus通信 点击:4196 | 回复:28



bhdxzgp

    
  • 精华:5帖
  • 求助:8帖
  • 帖子:141帖 | 5451回
  • 年度积分:0
  • 历史总积分:21609
  • 注册:2006年4月16日
发表于:2011-09-21 21:35:03
楼主

对于初学modbus;通过VB来测试modbus通信;有一点帮助;如果要原代码的话,可以留下邮箱,我给你传过去!

1 Private Sub Command1_Click() ‘设置按钮
2 Dim bisend() As Byte
3 Dim crc
4 Dim btLoCRC As Byte, btHiCRC As Byte
5 Dim Data As Integer
6 If MSComm1.PortOpen = True Then
7 If Combo5.ListIndex = 0 Then
8 ReDim bisend(7) ‘重新定义数组长度
9 bisend(0) = "&h" + Hex(Val(Text1.Text)) ‘地址码
10 bisend(1) = "&h" + Hex(3) ‘功能码 读寄存器
11 bisend(2) = "&h" + Hex(0) ‘起始地址高位
12 bisend(3) = "&h" + Hex(0) ‘起始地址低位
13 bisend(4) = "&h" + Hex(0) ‘寄存器个数高位
14 bisend(5) = "&h" + Hex(Combo6.ListIndex + 1) ‘寄存器个数低位
15 crc = CRC16(bisend, 6, btLoCRC, btHiCRC)
16 bisend(6) = "&h" + Hex(btLoCRC) ‘CRC高位
17 bisend(7) = "&h" + Hex(btHiCRC) ‘CRC低位
18 ‘发送数据
19 MSComm1.Output = bisend
20 Else
21 ReDim bisend(10) ‘一次只能写一个寄存器
22 bisend(0) = "&h" + Hex(Val(Text1.Text)) ‘地址码
23 bisend(1) = "&h" + Hex(16) ‘功能码 写寄存器
24 bisend(2) = "&h" + Hex(0) ‘起始地址高位
25 bisend(3) = "&h" + Hex(0) ‘起始地址低位
26 bisend(4) = "&h" + Hex(0) ‘寄存器个数高位
27 bisend(5) = "&h" + Hex(1) ‘寄存器个数低位
28 bisend(6) = "&h" + Hex(2) ‘字节数
29 Data = Val(Trim(Text3.Text))
30 bisend(7) = "&h" + Hex(Data \ 256) ‘要写入寄存器的值的高字节
31 bisend(8) = "&h" + Hex(Data Mod 256) ‘要写入寄存器的值的低字节
32 crc = CRC16(bisend, 9, btLoCRC, btHiCRC)
33 bisend(9) = "&h" + Hex(btLoCRC) ‘CRC高位
34 bisend(10) = "&h" + Hex(btHiCRC) ‘CRC低位
35 MSComm1.Output = bisend
36 End If
37 Else
38 MsgBox "串口没有打开"
39 End If
40 End Sub
41 Private Sub Command2_Click() ‘实时采集按钮
42 Timer1.Enabled = Not Timer1.Enabled ‘进行状态切换
43 End Sub
44 Private Sub Command3_Click()
45 ‘初始化,并打开串口
46 With MSComm1
47 If .PortOpen = False Then
48 .CommPort = Combo7.ListIndex + 1 ‘打开串口1
49 .Settings = Combo1.Text + "," + Combo2.Text + "," + Combo3.Text + Combo4.Text
50 .InputMode = 1
51 .InputLen = 50 ‘一次性从接收缓冲区中读取所有数据(8个字节为一组!!)
52 .InBufferC = 0 ‘清空接收缓冲区
53 .OutBufferCt = 0 ‘清空发送缓冲区
54 .RThreshold = 5 + (Combo6.ListIndex + 1) * 2
55 .InBufferSize = 1024
56 .OutBufferSize = 1024
57
58 .PortOpen = True
59 Else
60 MsgBox "串口已经打开"
61 End If
62 End With
63 End Sub
64 Private Sub Command4_Click() ‘关闭串口按钮
65 If MSComm1.PortOpen = True Then
66 MSComm1.PortOpen = False
67 End If
68 End Sub
69 Private Sub Form_Load()
70 Dim i As Integer
71
72 ‘波特率设置
73 Combo1.AddItem "4800", 0
74 Combo1.AddItem "9600", 1
75 Combo1.AddItem "115200", 2
76 ‘校验位设置
77 Combo2.AddItem "N", 0
78 Combo2.AddItem "E", 1
79 Combo2.AddItem "O", 2
80 ‘数据位设置
81 Combo3.AddItem "7", 0
82 Combo3.AddItem "8", 1
83 ‘停止位设置
84 Combo4.AddItem "1", 0
85 Combo4.AddItem "2", 1
86 ‘功能码选择
87 Combo5.AddItem "读寄存器03", 0
88 Combo5.AddItem "写寄存器16", 1
89 ‘寄存器个数设置
90 Combo6.AddItem "1", 0
91 Combo6.AddItem "2", 1
92 Combo6.AddItem "3", 2
93 Combo6.AddItem "4", 3
94 Combo6.AddItem "5", 4
95 Combo6.AddItem "6", 5
96 Combo6.AddItem "7", 6
97 Combo6.AddIt




鑫悦自动化

  • 精华:0帖
  • 求助:0帖
  • 帖子:26帖 | 923回
  • 年度积分:0
  • 历史总积分:4903
  • 注册:2004年7月07日
发表于:2011-09-21 21:53:15
1楼

对新手应该有帮助的

 

sophymei

  • 精华:0帖
  • 求助:8帖
  • 帖子:17帖 | 920回
  • 年度积分:0
  • 历史总积分:5514
  • 注册:2008年11月24日
发表于:2011-09-22 08:43:34
2楼

我正在學VB,樓主好人,給我發一份,謝謝!meiyanhong2005@yahoo.com.cn

 

bhdxzgp

  • 精华:5帖
  • 求助:8帖
  • 帖子:141帖 | 5451回
  • 年度积分:0
  • 历史总积分:21609
  • 注册:2006年4月16日
发表于:2011-09-22 18:06:45
3楼
我已经把这个程序发送到原创例程分享里面了!

zysheng

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 7回
  • 年度积分:0
  • 历史总积分:71
  • 注册:2009年8月30日
发表于:2011-09-25 18:27:46
4楼
我正在學VB,樓主好人,給我發一份,謝謝!jxzysheng@163.com

thomastop

  • 精华:0帖
  • 求助:0帖
  • 帖子:46帖 | 865回
  • 年度积分:390
  • 历史总积分:4076
  • 注册:2006年4月04日
发表于:2011-09-27 12:50:01
5楼

楼主好人。。个人认为MODBUS的最主要的是CRC和数据转换

工控秘书

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 64回
  • 年度积分:0
  • 历史总积分:257
  • 注册:2010年7月18日
发表于:2011-09-27 12:57:55
6楼

楼主好,我也是刚学VB的,给我一份原代码。谢谢

QQ邮箱:1941804631

WJY18

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:41
  • 注册:2008年8月16日
发表于:2011-10-08 11:26:50
7楼

楼主你好,我刚接触VB,能发一份给我吗?多谢。

邮箱:wjy770218@gmail.com

丁宁

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:34
  • 注册:2010年3月19日
发表于:2011-12-08 09:00:34
8楼

楼主,我是新手..有两个问题请教下楼主 问题问的很白 希望楼主别笑话

第一个是:在下面的代码中crc = CRC16(tbisend, 6, btLoCRC, btHiCRC) 是什么意思?程序中其他地方也没用到CRC
为什么还要把CRC16的值给CRC?

第二个是:下面代码中tbisend(6) = "&h" + Hex(btLoCRC) ‘CRC高位
                                         tbisend(7) = "&h" + Hex(btHiCRC) ‘CRC低位

这两段中的btLoCRC,btHiCRC两个参数是CRC16计算出来的结果么?

If MSComm1.PortOpen = True Then
tbisend(0) = "&h" + Hex(Val(Text1.Text)) ‘地址码
tbisend(1) = "&h" + Hex(3) ‘功能码 读寄存器
tbisend(2) = "&h" + Hex(0) ‘起始地址高位
tbisend(3) = "&h" + Hex(0) ‘起始地址低位
tbisend(4) = "&h" + Hex(0) ‘寄存器个数高位
tbisend(5) = "&h" + Hex(Combo6.ListIndex + 1) ‘寄存器个数低位
crc = CRC16(tbisend, 6, btLoCRC, btHiCRC)
tbisend(6) = "&h" + Hex(btLoCRC) ‘CRC高位
tbisend(7) = "&h" + Hex(btHiCRC) ‘CRC低位
‘发送数据
MSComm1.Output = tbisend
End If

丁宁

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:34
  • 注册:2010年3月19日
发表于:2011-12-08 09:00:48
9楼

丁宁

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:34
  • 注册:2010年3月19日
发表于:2011-12-08 09:01:05
10楼

luyanbing

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2012年1月31日
发表于:2012-02-01 15:09:56
11楼

辛苦楼主给我发一份,QQ邮箱,415006846,多谢

hero5202011

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2012年6月07日
发表于:2012-06-07 21:29:26
12楼

349129791@qq.com 谢谢楼主 给我发个

 

badjj

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:12
  • 注册:2011年7月08日
发表于:2012-06-12 14:58:37
13楼
楼主好人,初学modbus,谢谢啦465002969@qq.com

青岛黄工

  • [版主]
  • 精华:3帖
  • 求助:54帖
  • 帖子:108帖 | 4776回
  • 年度积分:0
  • 历史总积分:24297
  • 注册:2007年4月02日
发表于:2012-06-12 16:39:57
14楼

谢谢楼主,正用VB写个上位机的程序,给我个吧,1260887872@qq.com

 

色布欧美

  • 精华:0帖
  • 求助:0帖
  • 帖子:47帖 | 1023回
  • 年度积分:0
  • 历史总积分:1499
  • 注册:2012年3月02日
发表于:2012-06-20 21:20:09
15楼
引用 thomastop 的回复内容: 楼主好人。。个人认为MODBUS的最主要的是CRC和数据转换



z123y

  • 精华:0帖
  • 求助:0帖
  • 帖子:24帖 | 1219回
  • 年度积分:0
  • 历史总积分:1578
  • 注册:2012年3月02日
发表于:2012-06-21 10:47:49
16楼
引用 色布欧美 的回复内容: 引用 thomastop 的回复内容: 楼主好人。。个人认为MODBUS的最主要的是CRC和数据转换



艾诺樱桃帮v

  • 精华:0帖
  • 求助:1帖
  • 帖子:24帖 | 1555回
  • 年度积分:1
  • 历史总积分:1539
  • 注册:2012年3月02日
发表于:2012-06-25 22:41:11
17楼
引用 色布欧美 的回复内容: 引用 thomastop 的回复内容: 楼主好人。。个人认为MODBUS的最主要的是CRC和数据转换



艾诺樱桃帮v

  • 精华:0帖
  • 求助:1帖
  • 帖子:24帖 | 1555回
  • 年度积分:1
  • 历史总积分:1539
  • 注册:2012年3月02日
发表于:2012-06-25 22:42:23
18楼
引用 色布欧美 的回复内容: 引用 thomastop 的回复内容: 楼主好人。。个人认为MODBUS的最主要的是CRC和数据转换



艾诺樱桃帮v

  • 精华:0帖
  • 求助:1帖
  • 帖子:24帖 | 1555回
  • 年度积分:1
  • 历史总积分:1539
  • 注册:2012年3月02日
发表于:2012-06-25 22:43:28
19楼
引用 色布欧美 的回复内容: 引用 thomastop 的回复内容: 楼主好人。。个人认为MODBUS的最主要的是CRC和数据转换



战魂——骑士军团

  • 精华:0帖
  • 求助:1帖
  • 帖子:15帖 | 940回
  • 年度积分:0
  • 历史总积分:2011
  • 注册:2012年3月22日
发表于:2012-06-28 23:25:09
20楼
VB很好用,比较喜欢。                   

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页