读取VB100或者VW100的数据

小弟最近在搞一个工程在论坛也看过不少东西了   但是由于实力不够(自己比较笨)还不能读懂 所以也不会写  于是我在网络找到一个PPI读取VB100和写入VB100的东西 我把那文章发给大家看看  希望大家能写出  读取VB100 和写入VB100的代码给我参考一下 特别是验证那部分的代码更加头疼  希望大家能帮助下我们这些新人成才(一点要PPI协议的方法哦  不要写modbus协议或者调用动态数据库) 多多指点 我的QQ 345324289  邮箱345324289@qq.com希
 1、串口初始化程序: 
    MSComm1.CommPort = 1 
    MSComm1.Settings = "9600,e,8,1" 
    MSComm1.InputLen = 0 
    MSComm1.RThreshold = 1 
 MSComm1.InputMode = comInputModeBinary 
   PPI协议定义串口为以二进制形式收发数据,这样报文的通讯效率比ASCII码高。 
   2、串口读取数据程序,以读取VB100数据单元为例: 
   Dim Str_Read(0 To 32) ‘定义发送的数据为字节为元素的数组。 
   Str_ Read (32) = &H16 ‘相应的数组元素赋值,按照以下格式: 
   Str_ Read (29) = (100*8) \ 256 ‘地址为指针值,先取高位地址指针 
   Str_ Read (30) = (100*8) Mod 256 ‘取低位地址指针 
   Str_ Read (24) = 1 ‘读取的数据长度(Byte的个数) 
   For I=4 to 30 
    Temp_FCS = Temp_FCS + Str_Read(i) 
   Next I 
   Str_Read(31)= Temp_FCS Mod 256 ‘计算FCS校验码,其它数组元素赋值省略。 
   68 1B 1B 68 2 0 6C 32 1 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0 1 0 1 84 0 3 20 8B 16  
   PLC返回数据 E5 后,确认读取命令,发送以下数据: 
   10 2 0 5C 5E 16 
   然后上位机VB程序接受到以下数据: 
   68 16 16 68 0 2 8 32 3 0 0 0 0 0 2 0 5 0 0 4 1 FF 4 0 8 22 78 16 
   首先识别目标地址和源地址,确认是这次申请的返回数据,然后经过校验检查,正确后解析出第26号数据(&H22)即为VB100字节的数据。 
    3、串口写入数据程序,以写VB100数据单元为例: 
   Dim Str_Write(0 To 37) ‘定义发送的数据为字节为元素的数组。 
   Str_Write (37) = &H16 ‘相应的数组元素赋值,按照以下格式 
   Str_Write (35) = &H10 ‘要写入的数据值 
   68 20 20 68 2 0 7C 32 1 0 0 0 0 0 E 0 5 5 1 12 A 10 2 0 1 0 1 84 0 3 20 0 4 0 8 C B9 16  
   PLC返回数据 E5 后,确认写入命令,发送以下数据: 
   10 2 0 5C 5E 16 
   然后上位机VB程序接受到以下数据: 
   68 12 12 68 0 2 8 32 3 0 0 0 0 0 2 0 1 0 0 5 1 FF 47 16 
   这是PLC正确接收并写入信息的返回数据。 
   4、串口接收程序: 
   在数据接收程序中,利用VB中MSComm控件,一次接收缓冲区中的全部数据,存放到数组形式的暂存单元中,然后分析每个元素的值,得到读写的数据。 
   Dim RCV_Array() As Byte 
   Dim Dis_Array As String 
   Dim RCV_Len As Long 
   RCV_Array = MSComm1.Input ‘取出串口接收缓冲器的数据。 
   RCV_Len = UBound(RCV_Array) 
   ReDim Temp(0 To UBound(RCV_Array)) 
   For i = 0 To RCV_Len 
   Dis_Array = Dis_Array & Hex(RCV_Array (i)) & " " 
   Next i 
   Text1.Text = Dis_Array ‘接收到的数据送显示。

最佳答案

你在网上找的PPI协议只能读写VB的数据,而不能读写VW和VD的数据。
 我根据PPI协议的VB读写部分,推导过VW和VD的,但是没有成功,应该不是简单的数据长度和地址变化的问题。西门子的PPI协议是不公开的,但是可以购买PPI协议,估计价格应该很高。
 如果你急于实现PLC和VB编程软件的通讯,建议使用自由口通讯或者modbus协议。
 自由口通讯要求PLC和VB编程软件都要编写程序,比较繁琐。
 modbus协议在PLC部分仅仅需要调用modbus库,VB编程软件部分使用MSComm控件(编程不难)。
 modbus通讯方式我已经实现了。你下载的东西就是VB编程软件部分的程序。
 如果不是很复杂,我应该可以帮的了你。

提问者对于答案的评价:
谢谢您的指导

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345854.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日 下午10:47
下一篇 2021年7月4日 下午10:48

相关推荐

发表回复

登录后才能评论