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

三菱PLC与PC上位机VB通讯 点击:12225 | 回复:25



水中鱼

    
  • 精华:35帖
  • 求助:3帖
  • 帖子:239帖 | 3802回
  • 年度积分:0
  • 历史总积分:15036
  • 注册:2011年11月10日
发表于:2012-01-20 20:11:51
楼主

三菱PLC与PC上位机VB通讯

三菱PLCFX1N + FX1N-232-BD

          FX2N + FX2N-232-BD

计算机:Windows XP中文企业版 + Visual Basic 6.0中文企业版

Windows 98中文版 + Visual Basic 6.0 中文企业版

两者之间连接使用的是FX-232CAB-1电缆线(2-33-24-68),5-5

一. 三菱PLC的设置

三菱FX PLC在进行计算机链接(专用协议)和无协议通讯(RS指令)时均须对通讯格式(D8120)进行设定。其中包含有波特率、数据长度、奇偶校验、停止位和协议格式等。在修改了D8120的设置后,确保关掉PLC的电源,然后再打开。

此外,对于采用RS485形式1:N计算机链接的还必须对站点号(D8121)进行设定。设定的范围从00H0FH(即0到15)。

在这里对D8120采用下述设置:

b15              b0

0110 1000 1000 1110

  6    8    8    E

即数据长度为7位,偶校验,2位停止位,波特率为9600bps,无标题符和终结符,采用计算机链接(RS-232C),自动添加和校验码,采用专用协议格式1。

同时设定站号为0。具体设定如下所示:

FX PLC进行计算机链接时可用的专用协议有两种:格式1和格式4。两种格式的差别在于是否在每一个块上添加了CR + LF,其中添加了CR + LF的是格式4。在这里采用格式1

二. 上位机程序的编制

这里采用Microsoft公司的Visual Basic 6.0中文企业版编制上位机程序。

Visual Basic中提供了一个名为MSComm的通信控件便于设计串行通信的程序。MSComm控件的主要属性有:

1. CommPort属性

CommPort属性用于指定所要使用的串行端口的号码。虽然Windows操作系统可以容纳最多256个串行通信端口,不过Visual BasicMSComm控件则仅限于16个端口。

2. Settings属性

Settings属性用于设置初始化参数。以字符串的形式设置波特率、奇偶校验、数据位、停止位等4个参数。其格式为“BBBB,P,D,S”,其中BBBB表示波特率,P表示奇偶校验位检查方式,D表示数据位数,S表示停止位数。一般情况下,欧美仪器习惯使用“9600,n,8,1”当成设置值;而日本仪器则习惯使用“9600,e,7,2”作为设置值。Settings设置完成之后,所传输及接受的字符串便以此设置为准,使用RS-232通信的双方,Settings必须完全一样,彼此才能顺利地通信,否则双方将无法正确接收到彼此所传输的信号。所以,该属性的设置必须和三菱PLC中D8120的相关设置保持一致。在这里,统一采用“9600,e,7,2”的设定。

3. PortOpen属性

PortOpen属性用于设置通信连接端口的状态。在使用串行端口之前必须先将要使用的串行端口打开。在上位机程序中应进行如下设定:

Private Sub Form_Load()          ‘窗体载入事件

MSComm1.CommPort = 1             ‘选择端口号

MSComm1.Settings = "9600,e,7,2"  ‘设置端口属性

MSComm1.PortOpen = True          ‘打开端口

End Sub

4. Output属性

MSComm控件的Output属性提供了发送的功能,当从计算机向可编程控制器写入数据或从可编程控制器读取数据时,上位机应当先发出以下格式(格式1)的指令字符串: 

ENQ 站号 PC号 命令 消息等待时间 字符区域A 和校验代码

其中站号为在D8121中的设定值,这里是:00PC号对于FX系列为:FF

因为ENQACKNAK等通信控制字符是不可见字符,所以先用Chr函数对其进行赋值:

ENQ=Chr5) ACK=Chr6) NAK=Chr&H15

然后在上位机程序中写入以下代码即可发出指令:

MSComm1.Output=ENQ &00FF<命令><消息等待时间><字符区域A><和校验代码>”

5. Input属性

Output属性相反,Input属性提供了接收数据的功能。它将对方传到输入缓冲区中的数据读进程序中,并清除缓冲区中已被读取的数据。

a. 如果是从计算机向可编程控制器写入数据时,接收到从可编程控制器返回的应该是以下格式的字符串:

ACK 站号 PC  或者  NAK 站号 PC 错误代码

前一种表示可编程控制器已经正确接收到从计算机发来的指令,后一种表示可编程控制器未正确接收到从计算机发来的指令。

b. 如果是从计算机向可编程控制器读取数据时,接收到从可编程控制器返回的应该是以下格式的字符串:

STX 站号 PC 字符区域B ETX 和校验代码 或者 NAK 站号 PC 错误代码

如果要连续读取数据可以利用Timer控件。将OutputInput放在Timer控件的Timer事件中即可。程序会以Timer控件的Interval属性中设置的间隔去发送指令和接收数据。

对于MSComm控件的其他一些属性使用VB的默认值即可。

在串行通信传输的应用中,经常使用的Visual Basic中的字符串处理函数如下:

Chr函数:返回含有特定ANSIDBCS字符码的字符串。

Asc函数:返回字符串第一个字符的ANSIDBCS字符码。

Len函数:返回以字符数为单位的字符串长度。

Mid函数:取得字符串中特定数量的字符,可指定开始获取的位置和长度。

Left函数:取得字符串的左边固定字符数的字符串。

Right函数:取得字符串的右边固定字符数的字符串。

Val函数:把字符串转换为数值,可以将8进制或16进制的字符串转换为10进制。

Hex函数:返回以十六进制数值表示的字符串。

RS指令应用一

三菱PLC与计算机利用RS指令进行通讯(通讯手册9-14例)

三菱PLCFX1N + FX1N-232-BD

计算机:Windows XP中文企业版 + Visual Basic 6.0中文企业版

Windows 98中文版 Visual Basic 6.0中文企业版

两者之间连接使用的是FX-232CAB-1电缆线(2-33-24-68),5-5

一.三菱PLC的设置

三菱FX PLC在进行计算机链接(专用协议)和无协议通讯(RS指令)时均须对通讯格式(D8120)进行设定。其中包含有波特率、数据长度、奇偶校验、停止位和协议格式等。在修改了D8120的设置后,确保关掉PLC的电源,然后再打开。

在这里对D8120采用下述设置:

b15              b0

0000 0100 1000 1111

  0    4    8    F

即数据长度为8位,偶校验,2位停止位,波特率为9600bps,无标题符和终结符,没有添加和校验码,采用无协议。

PLC程序如下:

上位机程序的编制

完整程序代码及注释如下:

Private Sub cmd1_Click()     ‘发送按钮

lbl1.Caption = ""

If txt1.Text = "" Then       ‘若发送数据栏中未键入指令则提示键入指令

lbl1.Caption = "Please input data"

Else

MSComm1.Output = txt1.Text   ‘发送指令

Timer1.Enabled = True        ‘触发延时接收

End If

End Sub

Private Sub Form_Load()          ‘窗体载入事件

MSComm1.CommPort = 1             ‘选择端口号

MSComm1.Settings = "9600,e,8,2"  ‘设置端口属性

MSComm1.PortOpen = True          ‘打开端口

End Sub

Private Sub Timer1_Timer()   ‘延时500ms接收

NAK = Chr(&H15)

If MSComm1.InBufferCount > 0 Then

txt2.Text = ""

a = MSComm1.Input

txt2.Text = a                ‘在接收数据栏中显示接收到的数据

Else

lbl1.Caption = "No response"

End If

Timer1.Enabled = False

END sub



楼主最近还看过



青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-01-20 22:29:36
1楼
简单实用,楼主的VB代码写的很紧凑阿

水中鱼

  • 精华:43帖
  • 求助:4帖
  • 帖子:324帖 | 3802回
  • 年度积分:0
  • 历史总积分:15038
  • 注册:2011年11月10日
发表于:2012-01-21 13:49:34
2楼

希望对大家有帮助!!

Trevan

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 36回
  • 年度积分:0
  • 历史总积分:259
  • 注册:2012年2月07日
发表于:2012-04-19 11:28:46
3楼
有没有vb.net的,感谢!三菱工控学习交流群群号:148014756
资源共享,一起交流、相互学习、共同进步!欢迎大家加入。

Trevan

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 36回
  • 年度积分:0
  • 历史总积分:259
  • 注册:2012年2月07日
发表于:2012-04-27 11:20:14
4楼

这个是我做的,有兴趣的朋友可以交流一下。

 

程序设计为实时通讯,不做任何延迟处理,比延迟接收快很多倍,并且更加稳定。

当当发送命令发出去的通讯,马上设定接收事件的门限值,只要返回数据一到就马上处理接收。并传统的用延迟快很多倍,并且更加稳定。

高顺周

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 191回
  • 年度积分:0
  • 历史总积分:973
  • 注册:2010年11月04日
发表于:2012-11-21 11:12:15
5楼
引用 Trevan 的回复内容: 这个是我做的,有兴趣的朋友可以交流一下。 程序设计为实时通讯,不做任何延迟处理,比延迟接收快很多倍,并且更加稳定。当当发送命令发出去的通讯,马上设定接收事件的门限值,只要返回数据一到就马上处理接收。并传统的用延迟快很多倍,并且更加稳定。


你的群号 在查找的时候找不到  是不是写错了  

 

那个VB的源代码 可否共享一下  群号:170665069

yanghuan2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 12回
  • 年度积分:0
  • 历史总积分:50
  • 注册:2009年5月08日
发表于:2013-04-03 14:38:19
6楼

楼主的VB.net内容过于简单,只把发送文本框和接受文本框表示出来,想要点复杂点的协议处理就更好了!

南山小镇

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2012年3月28日
发表于:2013-08-08 17:29:13
7楼

大侠们, 我用VB做了个工控界面。 采用Modbus协议。 其它问题都解决了。有一个小问题的处理,不知对不对。


在使用滚动条设置参数值时,想将其传递到下位机,但它的CRC校验码一直在变。 我想的方案是,将上位机CRC计算,都放进去。

这样不知行不行。


不知哪位大侠有VB工控界面源码不? 我之前在学校只做过与一台机器通信,且参数只有PID。现在出来实习,但没有源码可以参考对比。 也不知道自己做的算是什么。  


求教 。我关于滚动条方式的处理,对吗?


BERYL0

  • 精华:0帖
  • 求助:2帖
  • 帖子:3帖 | 78回
  • 年度积分:0
  • 历史总积分:199
  • 注册:2012年2月24日
发表于:2013-08-24 15:20:31
8楼

我现在正在写三菱PLC与PC上位机VB通讯,楼主内容对我很有帮助。

suxuyang

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 24回
  • 年度积分:0
  • 历史总积分:107
  • 注册:2004年3月23日
发表于:2014-12-13 09:02:32
9楼

这个要MARK一下。。。。。。。

594392411

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 85回
  • 年度积分:0
  • 历史总积分:324
  • 注册:2014年6月19日
发表于:2014-12-26 18:14:19
10楼

好东西谢谢楼主分享希望多多分享哦

QQ339468465

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 132回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2015年7月26日
发表于:2015-07-26 13:42:41
11楼

这种方式不好,需要两边编程序,可以直接用三菱的OPC软件,呵呵,很方便,

zt乔木

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 31回
  • 年度积分:0
  • 历史总积分:46
  • 注册:2016年3月26日
发表于:2016-09-29 11:50:08
12楼


回复内容:

对: Trevan 这个是我做的,有兴趣的朋友可以交流一下。 程序设计为实... 内容的回复!能发我一份吗,谢谢邮箱地址1987643363@qq.com


阿楼

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 410回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2016年6月28日
发表于:2016-10-07 04:02:14
13楼

这个要MARK一下。。。。。。。

工控小将168

  • 精华:0帖
  • 求助:0帖
  • 帖子:55帖 | 559回
  • 年度积分:5
  • 历史总积分:1315
  • 注册:2016年12月19日
发表于:2016-12-19 10:58:12
14楼

新手学习高级语言,多多指教

ahang623

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:8
  • 注册:2013年12月10日
发表于:2017-01-07 14:20:16
15楼

有谁有通讯读写的简单点的源代码看看啊?一直在看这个可不大看得懂

ahang623

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:8
  • 注册:2013年12月10日
发表于:2017-01-07 14:21:07
16楼

我的邮箱527176864@qq。com

回复内容:

对: ahang623 有谁有通讯读写的简单点的源代码看看啊?一直在看这个可不... 内容的回复!


ZHI_GOOD

  • 精华:0帖
  • 求助:1帖
  • 帖子:14帖 | 541回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2015年10月04日
发表于:2017-04-11 15:07:56
17楼

好东西,谢谢分享!!!!!!

AutoCtrl888

  • 精华:0帖
  • 求助:0帖
  • 帖子:64帖 | 471回
  • 年度积分:7
  • 历史总积分:2478
  • 注册:2007年3月04日
发表于:2017-04-29 17:58:06
18楼

建议看看这篇文章,里面有源代码:

http://blog.sina.com.cn/s/blog_16d7d3ecb0102x6wj.html


wuxin

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 99回
  • 年度积分:0
  • 历史总积分:523
  • 注册:2017年7月19日
发表于:2017-08-29 21:24:07
19楼


回复内容:

对: Trevan 这个是我做的,有兴趣的朋友可以交流一下。 程序设计为实... 内容的回复!

能分享一份通讯源码吗,825976382@qq.com

yhchen2010

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2015年7月07日
发表于:2017-09-09 12:01:30
20楼

12年 都过去5年多了,楼主还在!


热门招聘
相关主题

官方公众号

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