注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- PLC论坛 -- AB PLC论坛 -- PLC网络通信

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

发表人:liaotianshi 发表时间:2007/5/26 20:04:00  

 

 本栏论题: 编程远程读取AB PLC的数据  [7319]

    AB公司开发的RSLink是读取远程AB PLC数据的上佳工具,它能实现读取AB PLC的名种要求。但在实际的系统集成中,由于远程PLC的类型多种多样,于是,我接到一个任务,自主开发程序读取各种PLC。
   
    在我们使用的远程设备中,有AB的PLC,西门子的PLC,LG的PLC,还有多种的RTU,但都有一个共通的特点:通过串口访问,只是数据协议不同,找出各方的数据协议,就一切OK了。为此,我对AB PLC进行了一番研究。
   
    AB公司提供了软件,它的资料就有点语焉不详,我不得不得用串口监听技术进行串口监听以获取更为直观的资料。
   
    一、 串口的监听
    我利用PORTMON.EXE来监听串口,以下是运行RSLink时我监听到的数据:
   
    IRP_MJ_WRITE 41 54 5A 0D
   
    IRP_MJ_READ 41 54 5A 0D
   
    IRP_MJ_WRITE 10 02 01 00 06 00 01 08 03 10 03 01 65
   
    IRP_MJ_READ 10 06 10 02 00 01 46 00 01 08 00 EE 34 49 64 35 2F 30 33 20
   
    20 20 20 20 20 20 00 00 86 10 10 8D A3 10 10 FC 10 03 18 55
   
    IRP_MJ_WRITE 10 06
   
    IRP_MJ_WRITE 100201000F002704A1C80789001003A3F3
   
    IRP_MJ_READ
   
    10 06 10 02 00 01 4F 00 27 04
   
    00 00 C7 0C CF 0C C8 0C C6 0C 88 0C EC 0C AA 0C 00 00 00 00
   
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
   
    F3 FF 0D 00 0D 00 00 00 00 00 4C 04 52 03 20 04 8B 03 84 03
   
    00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
   
    00 00 00 00 02 00 00 00 00 00 00 00 1F 00 00 00 00 00 00 00
   
    00 00 00 00 01 00 02 00 00 00 00 00 00 00 01 00 02 00 03 00
   
    04 00 05 00 06 00 07 00 00 00 00 00 00 00 00 00 C8 00 00 00
   
    C2 01 00 00 00 00 76 02 B6 03 00 00 00 00 00 00 00 00 00 00
   
    00 00 00 00 00 00 00 00 00 00 CF 03 00 00 00 00 00 00 00 00
   
    5D 00 C7 0C CF 0C C8 0C C6 0C 86 0C EC 0C AA 0C 00 00 00 00
   
    10 03 8D D8
   
    IRP_MJ_WRITE 10 06
   
    由此可以看出,RSLink运行时进行三步:
   
    1、 初始化MODEM:发送ATZ,确认MODEM存在。
   
    2、 查看PLC的数据结构,收到后发1006确认
   
    3、 查看N7的数据,收到后发1006确认
   
    现在所要做的事步骤都很清楚了,下面的工作是理解发出的与返回的数据的含义。
   
   
   
    二、 发送数据请求的格式
    对于查询PLC的数据结构,每次都是相同的请求,没有必要去花费时间。我们着力在读取N7数据的处理方面:
   
    发出的数据含义:
   
   
   
    *10
    *02
    01
    00
    0F
    00
    27
    04
    A1
    C8
    07
    89
    00
    *10
    03
    A3
    F3
   
    起始位
    起始位
    目的址
    目的址
    读数据
    保留
    ID号
    ID号
   
    字个数
    区域
    整数型
    起始字
    结束标志
    结束标志
    校验位
    校验位
   
   
    *:加*不参与CRC32运算。
   
    CRC32的计算方法:VB代码如下:
   
   
   
    Function CalcCRC(DATA(), Arraylen) As Long
   
    Dim I, J, K, H As Integer
   
    For I = 0 To Arraylen
   
    J = J Xor DATA(I)
   
    For K = 1 To 8
   
    H = J Mod 2 'test if bit will be shifted out
   
    J = Int(J / 2) 'shift right
   
    If H Then
   
    J = J Xor &H1000A001 'xor with constant
   
    J = J - &H10000000 'clear top word
   
    End If
   
    Next K
   
    Next I
   
    CalcCRC = J
   
    End Function
   
   
   
   
   
    Private Sub Command1_Click()
   
    Dim I, J As Long
   
    Length = (Len(Text3.Text)) / 2 - 1
   
    ReDim Init(Length)
   
    For I = 0 To Length
   
    Init(I) = Val("&H" + Mid(Text3.Text, 2 * I + 1, 2))
   
    Next I
   
    J = CalcCRC(Init(), Length)
   
    Text2.Text = Hex(J Mod 256)
   
    Text1.Text = Hex(Int(J / 256))
   
    End Sub
   
   
   
    发送这串字符将会能得到得到N7的数据返回,返回的数据以字为单位,开始字与字个数决定返回的内容。
   
    三、 接收到的数据
   
    如上接收到的数据,以 10 06 10 02开始,00 01 4F 00 27 04为目的址与ID号,现再接着是返回的数据,每两个字节是一组数据:如我的PLC中的定义如下:
   
   
   
    Tagname
    address
    description
   
    Compressure
    n7:68
    控制流量
   
    flue_1
    n7:33
    1#瞬时流量
   
    flue_2
    n7:34
    2#瞬时流量
   
    Inpressue
    n7:37
    总入口压力
   
    lowp_alarm
    n7:28
    总压力报警下限
   
    lowp_set
    n7:106
    总压力控制设置下限
   
    Lowpressure
    n7:26
    总压力控制下限
   
    midtank_p
    n7:36
    中间罐压力
   
    outp_low_alarm
    n7:29
    出口压力当前报警下限值
   
    outp_low_set
    n7:109
    出口压力报警下限设置
   
    Outpressure
    n7:35
    出口压力
   
    p_c_down
    n7:125
    降低入口压力
   
    p_c_up
    n7:124
    提高入口压力
   
    upp_alarm
    n7:27
    总压力报警上限
   
    upp_set
    n7:105
    总压力控制设值上限
   
    Uppressure
    n7:25
    总压力设值上限
   
   
    地址为字,即两个字节。
   
    这样,我们可以读取指定的区域数据,并根据你在PLC中的设定分解数据你就可以通过自编的程序读取AB PLC的数据了。
   
    结语
    这就是AB PLC的数据协议,由于AB 的说明书中所言不详,而我读取的PLC是另一个公司开发的程序,所以在数据的含义方面花费了不少时间,而在编程方面的时间倒时不多。这次总结出来与大家共享,应能使大家免去摸索之苦。
   

以下是关于《编程远程读取AB PLC的数据》论题的回复(共16篇,分2页显示)

 共2页  第1页   末页   下一页   

回复人:zehua 

 回复时间:2009/1/6 6:21:00

支持(1541) | 反对(1075)

 

    学习了!

回复人:江面 

 回复时间:2009/8/4 23:06:00

支持(921) | 反对(976)

 

    http://hi.baidu.com/plcjmrj好好学习,但送大家一个好东西,

回复人:jxhnihao 

 回复时间:2009/10/16 8:57:00

支持(1028) | 反对(1000)

 

    有这种书的介绍不

回复人:hzl 

 回复时间:2010/1/28 23:55:00

支持(1633) | 反对(970)

 

    谢谢分享.

回复人:dksghww21 

 回复时间:2010/2/23 11:51:00

支持(999) | 反对(1088)

 

    谢谢楼主,分析得很透彻详细

回复人:qwe134qwe 

 回复时间:2010/10/3 10:47:00

支持(1018) | 反对(1195)

 

    用梯形图不是很好igenghaoma

回复人:renguang 

 回复时间:2011/8/2 11:57:00

支持(939) | 反对(983)

 

    高手,太高了

回复人:haozigy 

 回复时间:2011/9/4 22:41:00

支持(1026) | 反对(953)

 

    谢谢楼主分享了,刚学习AB

回复人:DYLCHS 

 回复时间:2011/9/14 14:43:00

支持(848) | 反对(1139)

 

    高人

回复人:忘川之殇 

 回复时间:2012/7/17 9:12:00

支持(877) | 反对(797)

 

    谢谢楼主分享啊
   

回复人:忘川之殇 

 回复时间:2012/7/17 9:13:00

支持(858) | 反对(769)

 

    不过确实为高人

回复人:jwencan 

 回复时间:2013/5/9 6:19:00

支持(1347) | 反对(1237)

 

    高人,学习了

回复人:cwtgtp 

 回复时间:2017/8/23 10:33:00

支持(571) | 反对(491)

 

    高手

回复人:QWERTY225 

 回复时间:2019/2/25 14:28:00

支持(335) | 反对(406)

 

    学习了

回复人:xsliweju 

 回复时间:2019/12/15 11:18:00

支持(418) | 反对(652)

 

    学习了,高手

 共2页  第1页   末页   页次: 1  2      下一页  

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳