| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 942 人关注过本帖, 1 人收藏
标题:求助:VB与施奈德PLC的通讯
只看楼主 加入收藏
ltyblrs
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-11
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:4 
求助:VB与施奈德PLC的通讯
本人正在做一个项目,就是利用VB作为上位机读取施奈德PLC中的几个特定地址的数据(模拟量的数值)。请高手指教,谢谢。
搜索更多相关主题的帖子: 施奈德 通讯 PLC 
2009-10-11 15:24
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
不知道你的PLC与PC的通讯接口是什莫?

串口可以考虑用MSComm通讯控件,只要了解施奈德的串口通讯协议就行了。

不过,这个速度比较慢。

高速的可以考虑Profibus板卡或工业以太网通讯。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-11 15:37
ltyblrs
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-11
收藏
得分:0 
施奈德CPU为232端口,PC机为485口,中间用了一个232与485的转接卡,VB代码如何编写请指教
2009-10-11 16:40
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
下面代码,仅作参考。具体通讯协议、数据校验算法清参考你的PLC通讯手册。

另外,你说反了吧?一般PC上的都是232口,除非你用别的串口卡。而PLC自带接口是422或485的。

程序代码:
1 通信控件MSComm1属性设置:  
   = 1 设置端口号 
  MSComm1.Settings = "19200,E,7,2" 设置通信参数 
  MSComm1.InputLen = 0 设置读入字符串长度 
  MSComm1.PortOpen = True 设置通信端口状态 
2 运行程序: 
  STX$ = "::" 
  TransmitBuf$ = "01?5RUN" 
  sum$ = CheckSum(transmitBuf$) 
  ETX$ = Chr$(13) 
  SXD$ = STX$ + transmitBuf$ + sum$ + ETX$ 
  MSComm1.Output = SXD$ 
  Do 
  DoEvents 
  Loop Until MSComm1.InBufferCount >= 12 
  In1$ = MSComm1.Input 
 
3 从PLC读取资料,将寄存器内的数据资料在PC上显示以便观察监控(反应时间50ms): 
  STX$ = "::" 
  transmitBuf$ = "01?5MRVD000102" 
  sum$ = CheckSum(transmitBuf$) 
  ETX$ = Chr$(13) 
  SXD$ = STX$ + transmitBuf$ + sum$ + ETX$ 
  MSComm1.Output = SXD$ 
  Do 
  DoEvents 
  Loop Until MSComm1.InBufferCount >= 20 
  InData$ = MSComm1.Input 
  Label2.Caption = Mid$(InData$, 10, 4) 
  Label3.Caption = Mid$(InData$, 14, 4) 
   
4 从PLC读取资料,将RelayC0001状态通过PC显示进行监控(反应时间50ms): 
  STX$ = "::" 
  transmitBuf$ = "01?5MCRC0001" 
  sum$ = CheckSum(transmitBuf$) 
  ETX$ = Chr$(13) 
  SXD$ = STX$ + transmitBuf$ + sum$ + ETX$ 
  MSComm1.Output = SXD$ 
  Do 
  DoEvents 
  Loop Until MSComm1.InBufferCount >= 13 
  In4$ = MSComm1.Input 
  Coil$ = Mid$(In4$, 10, 1) 
  C1% = CInt(Coil$) 
  Label6.Caption = C1% 
 
5 设定Relay状态,将Relay设定为ON(反应时间50ms): 
  Dim C1 As Integer 
  STX$ = "::" 
  transmitBuf$ = "01?5SCSY00011" 
  sum$ = CheckSum(transmitBuf$) 
  ETX$ = Chr$(13) 
  SXD$ = STX$ + transmitBuf$ + sum$ + ETX$ 
  MSComm1.Output = SXD$ 
  Do 
  DoEvents 
  Loop Until MSComm1.InBufferCount >= 12 
  In2$ = MSComm1.Input 
 
6 停止运行: 
  STX$ = "::" 
  transmitBuf$ = "01?5STP" 
  sum$ = CheckSum(transmitBuf$) 
  ETX$ = Chr$(13) 
  SXD$ = STX$ + transmitBuf$ + sum$ + ETX$ 
  MSComm1.Output = SXD$ 
  Do 
  DoEvents 
  Loop Until MSComm1.InBufferCount >= 12 
  In3$ = MSComm1.Input 
   
7 VB6.0下CheckSum函数代码如下: 
  Private Function CheckSum(transmitBuf$) 
  L = Len(transmitBuf$) 
  Add = 0 
  Dim k, sum As Integer 
  For k = 1 To L 
  TJ$ = Mid$(transmitBuf$, k, 1) 
  Add = Add + Asc(TJ$) 
  Next k 
  Do While Add >= 256 
  Add = Add - 256 
  Loop 
  Add = 255 - Add + 1 
  tempBuf$ = Hex$(Add) 
  CheckSum = LTrim(tempBuf$) 
  End Function 


[ 本帖最后由 东海一鱼 于 2009-10-11 19:49 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-11 19:46
ltyblrs
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-11
收藏
得分:0 
多谢高手指教,我们这两天正在进行设备大检修,检修后我试试,遇到问题在请教你,非常感谢,能直接用电话沟通么?
2009-10-12 18:26
快速回复:求助:VB与施奈德PLC的通讯
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030612 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved