zoukankan      html  css  js  c++  java
  • PC高级语言与施耐德、罗克韦尔、台达等PLC的Modbus通讯源代码(ModbusTCP.DLL/ModbusRTU.DLL)

    1.0  通讯组件概述

    该类通讯组件适用于基于PC高级语言的工业自动化控制系统,用于PC与可编程控制器(PLC)、智能仪表等进行数据通讯。组件采用动态链接库文件(*.DLL)的形式,在PC系统的项目工程里引用该组件,调用相应的属性与方法函数,即可快速实现PC与PLC的数据高效交换。

    DLL通讯组件无须安装,直接复制到工程文件目录,方便打包安装部署;无须任何配置,直接调用函数,与应用开发无缝衔接;多年工程经验的软件团队开发测试,经过本公司及客户的海量实际应用检验,稳定可靠;采用稳定高效的内部协议,无须编写PLC内部程序配合,直接访问PLC的内存,通讯响应快速;内建动态管理的多独立线程连接,同时支持外部应用的多线程结构调用;兼容WINDOWS系统下的所有开发环境,包括各种版本的VB.NET、C#、VC++,以及DEIPHI 、VB、LabView等;支持几乎所有PLC的CPU自带通讯口、通讯扩展模块。

    2.0  相关资料下载地址

    ModbusTCP 客户端DLL:      ModbusTCP.DLL

    ModbusTCP 服务端DLL:      ModbusTCP_Server.DLL

    ModbusRTU DLL程序:       ModbusRTU.DLL

    网口透传RTU DLL程序:      TransModRTU.DLL

    台达、永宏、信捷等PLC的Modbus地址表:   PLC地址表

    3.0  数据类型

    INT16:    16位有符号整数;         DINT32:   32位有符号整数;     

    UINT16:   16位无符号整数;         HEX32:    32位16进制字符;

    BIN16:   16位二进制字符串;       REAL32:  32位单精度浮点数据;

    4.0  DLL支持的功能

        01  读取线圈状态     取得一组逻辑线圈的当前状态( ON/OFF)       

        02   读取输入状态     取得一组开关输入的当前状态( ON/OFF)       

        03   读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值       

        04    读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值  

        15    强置多线圈 强置一串连续逻辑线圈的通断       

        16   预置多寄存器 把具体的二进制值装入一串连续的保持寄存器  

    5.0  函数与参数

         5.1  函数参数 

    [EntLink]   设置PC、PLC的通讯参数,建立与PLC的以太网联接;  

    参数:pcIP,String,PC端的IP地址

    pcPort , Uint16, PC端的网络端口

    plcIP , String ,PLC的IP地址

    plcPort ,Uint16,  PLC的通讯端口

     Rack ,Uint16,  PLC的机架号码(除西门子外,其它品牌为0)

    Slot ,Uint16, PLC的CPU的插槽号码(除西门子外,其它品牌为0)

    Handle, Integer ,返回网络句柄,多PLC网络时通过该句柄操作不同的PLC

    SN , String,调用系列号码,与DLL成对使用,可联系本公司获取

    返回值: Int16,函数执行结果,见5.3详细说明。

    [ComLink]   设置PC、PLC的通讯参数,建立与PLC的串口联接; 

    参数:CommPort,Uint16,联接PLC的PC通讯端口

    CommRate,Int32,与PLC通讯的速率

    DataBit, Uint16, 通讯数据位数

    StopBit,Uint16, 数据的停止位数

    Parity,PrtType, 数据校验方式

    Station, Uint16, PLC的站号码

    OverTime,Uint16, 通讯超时时间限制,毫秒单位

    SN , String,调用系列号码,通过联系本公司获取

    返回值: Int16,函数执行结果,见5.3详细说明。

    [DeLink]    断开与PLC的连接;

        参数:Handle, Integer , 网络句柄,多PLC网络时通过该句柄操作对应的PLC

    返回值: Int16,函数执行结果,见5.3详细说明

       

    [CmdRead]   读取多个PLC内存数据;

    参数:Handle, Integer , 网络句柄,多PLC网络时通过该句柄操作对应的PLC

    Memory , PlcMemory, PLC数据区域枚举,见5.2详细说明

    ValType, DataType, 数据类型枚举,见5.2详细说明

    Block ,Uint16, DB块的号码,非DB数据为0

    Address ,Uint16, 要操作的字的起始地址

    Count ,Uint16, 要操作的字的个数

    ReData() , Object,读取到的数据(传址参数)

    返回值: Int16,函数执行结果,见5.3详细说明

    [CmdWrite]    批量写入数据到PLC内存;

    参数:Handle, Integer , 网络句柄,多PLC网络时通过该句柄操作对应的PLC

    Memory , PlcMemory, PLC数据区域枚举,见5.2详细说明

    ValType, DataType, 数据类型枚举,见5.2详细说明

    Block ,Uint16, DB块的号码,非DB数据为0

    Address ,Uint16, 要操作的字的起始地址

    Count ,Uint16, 要操作的字的个数

    Data() , Object,要写入PLC的数据(传址参数)

    返回值: Int16,函数执行结果,见5.3详细说明

    [Bit_Test]   以Bit(位)的方式读取其状态;

    参数:Handle, Integer , 网络句柄,多PLC网络时通过该句柄操作对应的PLC

    Memory , PlcMemory, PLC数据区域枚举,见5.2详细说明

    Block ,Uint16, DB块的号码,非DB数据为0

    Address ,Uint16, 要操作的位所在的字地址

    Bit,Uint16, 要操作的位在字地址内的位号码

    State , Boolean,读取到的位的状态(传址参数)

    返回值: Int16,函数执行结果,见5.3详细说明

    [Bit_Set]    以Bit(位)的方式设置其状态为ON;

    参数:Handle, Integer ,网络句柄,多PLC网络时通过该句柄操作对应的PLC

    Memory , PlcMemory, PLC数据区域枚举,见5.2详细说明

    Block ,Uint16, DB块的号码,非DB数据为0

    Address ,Uint16, 要操作的位所在的字地址

    Bit,Uint16, 要操作的位在字地址内的位号码

    返回值: Int16,函数执行结果,见5.3详细说明

    [Bit_Reset]   以Bit(位)的方式复位其状态为OFF;

    参数:Handle, Integer ,连接句柄,多PLC网络时通过该句柄操作对应的PLC

    Memory , PlcMemory, PLC数据区域枚举,见5.2详细说明

    Block ,Uint16, DB块的号码,非DB数据为0

    Address ,Uint16, 要操作的位在字地址内的位号码

    Bit,Uint16, 要操作的位号码

    返回值: Int16,函数执行结果,见5.3详细说明

       5.2  枚举结构体参数说明:

    --PlcMemory   要操作的PLC的内存区域类型:

    DI:   输入端口;

    DQ:   输出端口;

    DR:   数据寄存器D区域

    HR:   保持区域H区域

    5.3  返回值说明:

     0 执行成功;

    -1  IP地址或端口参数错误;

    -2  网络连接错误;

    -3  连接参数错误导致连接失败;

    -4  PLC握手连接异常;

    -5  PLC握手无响应;

    -6  PLC握手响应错误;

    -10 读数据超过最大数据量限制;

    -11 读数据时数据发送异常;

    -12 读数据时PLC响应超时;

    -13 读数据PLC返回格式错误;

    -14 读数据PLC返回数据错误;

     -15 读数据PLC返回数据校验错误;

    -20 写数据超过最大数据量限制;

    -21 写数据时数据发送异常;

    -22 写数据PLC响应超时;

    -23 写数据PLC返回格式错误;

    -24 写数据PLC返回数据错误;

    -25 写数据PLC返回数据校验错误;

    -31 数据转换时源数据处理错误;

    -32 数据转换时目标数据处理错误;

    -70 PLC内存区域的功能受限制;

    -80 PC系统中无网卡;

    -81 PC的IP地址格式错误;

    -82 PLC的IP地址格式错误;

    -83 PING命令返回错误;

    -99 连接序列号错误或测试次数超过试用限制;

    6.0  组件使用步骤

    a. 复制DLL文件到需要用到该组件的工程项目目录下;

    b. 注册DLL及其相关资源(DotNet框架的DLL程序集组件无需注册);

    c. 在项目编程软件里面引用该组件,不同的编程语言引用方式有区别,具体参见所用语言的MSDN帮助文档;

    d.  参照例程定义、实例化通讯组件,编写相关通讯代码;

      

    7.0   技术支持

        该类DLL组件适用于具有高级语言基础的自动化软件工程师,同时本公司提供定制开发更为简便的PC与PLC通讯的解决方案,包括定制化的OPC数据服务器软件、以太网数据服务器软件等,工业数据采集项目等欢迎交流咨询。

    任意一款DLL通讯组件,以及本公司的OPC数据服务器开发包等工业数据服务产品都会随产品提供多种语言的例程,同时通过以下方式提供24小时技术支持:

  • 相关阅读:
    Git忽略规则.gitignore梳理
    计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解
    Storm:最火的流式处理框架
    vue-自定义组件传
    HashMap与HashTable的区别
    iOS下JS与OC互相调用(二)--WKWebView 拦截URL
    iOS下JS与OC互相调用(一)--UIWebView 拦截URL
    iOS load和initialize的区别
    iOS下nil 、NULL、 Nil 、NSNull的区别
    iOS正确解决隐藏导航栏后push和pop或dismiss和present闪黑问题
  • 原文地址:https://www.cnblogs.com/endv/p/8650554.html
Copyright © 2011-2022 走看看