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

相关推荐

  • plc收到条形码数据的处理

    224xp cn与条形码设备连接,扫描的条形码是:692、7762、13024、7,在v存储区产生了如下数据(自定义从vb1400开始):vb1400 &nbs…

    SIMATIC S7-200 2020年11月1日
  • pnp 还是npn

    一直对pnp和npn接近开关有点晕,下图的PLC图用的是PNP常开还是NPN常开,我的目的很简单就是让他有信号时灯亮就行给PLC输入一点高电位24V 图片说明:  &nb…

    2021年7月5日
  • 求助:STEP7 连不上S7200smart了。

    STEP7 连不上S7200smart了,我是用网线直接把电脑和PLC连一起了。 图片说明:    最佳答案 产生此问题的原因有很多,可按照如下步骤逐…

    2017年6月4日
  • TD_CurScreen_xxx的值

    屏幕是第1个菜单项屏幕0时,TD_CurScreen_xxx的值为0,那么屏幕是第1个菜单项屏幕1时,TD_CurScreen_xxx的值是多少? 以下为数据块部分:&n…

    SIMATIC S7-200 2021年7月5日
  • PID数字量输出需要选择占空比周期,可是占空比是多少呢

    用PID向导时,为控制电磁阀的开关,选择数字量输出,不知道占空比是多少,如果我想设定为0或1,能否修改。。。期待高人赐教 问题补充:谢谢阿鸣和莘莘学子的热心回答,更谢谢啊哈11的答…

    SIMATIC S7-200 2020年10月31日
  • s7-200 pid

    s7-200 PID 自整定过程是否不仅要求PLC处于RUN状态下,而且需要整个控制系统处于工作中,即PLC模拟量输入随着PID应有变化,从而完成PID 最佳答…

    SIMATIC S7-200 2021年7月5日
  • PLC上电延迟运行

    S7-200如何上电5S后在进入主程序运行 钻石用户推荐最佳答案 西门子S7-200具有你说的功能,你这个是很简单的问题,上电就stop就可以了,至于你说的5秒还是多长时间你随意好…

    2021年7月5日
  • 西门子200自由口通讯两个停止位怎么解决

    西门子是226 最佳答案 参考链接:http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=850148&b_id=3 提…

    SIMATIC S7-200 2021年7月5日
  • 读写cpu222

    想在实时的读取cpu中的数据和向cpu中写入数据,原来走的是自由口协议,现在感觉自由口通讯老出问题,很是头疼,PCaccess只能读取cpu中的数据,是否有其他的软件可以向cpu中…

    SIMATIC S7-200 2021年7月5日
  • S7 300/400编程软件

    Step 7 V5.6 梯形图编程界面输入变量,回车后自动跳转到其它窗口(类似按alt + tab) 最佳答案 是用的中文版吧?我…

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论