读取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

相关推荐

  • S7200 网络读写

    现在有两个S7200的PLC, 由于相互读写的数据量比较大,一个网络向导24条不够用,能不能在两个PLC都调用网络读写向导 问题补充:网络读写向导你们没用过哇,一个PLC…

    SIMATIC S7-200 2020年10月31日
  • 笔记本(STEP 7 – MicroWIN)和CPU226连接问题

    我是做仪表维护的,公司有很多S7-200的PLC,想用笔记本通讯学习,但是不知道怎么连接,用485转232的转化接头就可以吗?谢谢 最佳答案 最好用西门子原装的PPI编程电缆。如没…

    SIMATIC S7-200 2020年11月1日
  • 刘缆条不见了

    我的系统刘缆条没了, 最佳答案 可以设置出现,步骤如下: 查看/框架/浏览条/就出来了 提问者对于答案的评价:谢了哦 

    SIMATIC S7-200 2021年7月5日
  • 200cpu使用modbus协议进行无线通讯

    现在除了cpu和电台外,还需要什么模块?是否需要em241? 最佳答案 不用,200有自带的modbus主站库,你用这个主站库来控制电台间数据交换就行了。 提问者对于答案的评价:不…

    SIMATIC S7-200 2021年7月5日
  • PTO控制伺服遇到点问题请高手伺教

    用包络的方式控制伺服电机做往复运动,每次发的都是固定的脉冲数,我用高速计数器HC0的12号模式记录PLC所发的脉冲数。HC0记录的数值等于包络设定的脉冲数时设备才能执行正转或反转,…

    SIMATIC S7-200 2020年10月31日
  • s7-200与LED显示屏通讯

    S7-200 CPU226与LED显示屏通讯,用modbus通讯协议ASCII码,LED的通讯协议:1、波特率9600 2位停止位,无校验码(要求数据格式ASC…

    SIMATIC S7-200 2017年11月20日
  • 程序扫描

    网络1  LDN    M0.0 TON    T33, 1…

    SIMATIC S7-200 2021年7月5日
  • 新手阿娣工作所迫,上司要我学PLC

    网上各位好心大哥大姐,PLC专家: 本人今年大专毕业,分配到一家设备制厂控制部门做控制箱见习设计员,小女子在学校没有学过PLC(对电更不感兴趣).现上司要我学PLC(先从…

    SIMATIC S7-200 2021年7月5日
  • 为什么Micro ‘n Power V1.3.chm不能正常显示中文

    我电脑安装的win7系统,下载Micro ‘n Power V1.3.chm无法打开。见图。请求指导。 图片说明:    最佳答案…

    2017年8月16日
  • 高速计数器如何复零

    情况是这样的:我用PTO做了一个单段管线脉冲输出程序,当输入端每给一个信号时,输出端Q0.0就发出1200个脉冲.电机旋转120度。我用高速计数器SHC0,模式12进行计数,在35…

    SIMATIC S7-200 2020年11月1日

发表回复

登录后才能评论