zoukankan      html  css  js  c++  java
  • C#与西门子PLC通讯

    1.0  通讯组件概述

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

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

    2.0  通讯组件名称

         

    3.0  数据类型

         通讯组件能对PLC的输入、输出端口,以及内部中间继电器存储区域、内部数据存储区域,以及扩展存储区域进行读写操作,支持以下数据类型:

         0  BOOL1:    1位布尔型数据;

         1  INT16:    16位有符号整数;

         2  UINT16:   16位无符号整数;

         3  DINT32:   32位有符号整数;  

         4  HEX32:    32位16进制字符;

         5  REAL32:   32位单精度浮点数据;

         6  BIN16:    16位二进制字符串;

         7  CHAR8:    8位单个字符(ASCII)

         8  BYTE8:    8位单字节数据;

         9  STRING:   多个字符或数字组成的字符串(ASCII)

    4.0  函数与参数

    4.1  函数参数 

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

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

             pcPort , Uint16, 本地端口,即PC端的网络端口,默认为0

             plcIP , String ,远程地址,即PLC的IP地址

             plcPort ,Uint16,  远程端口,即PLC的通讯端口

             Rack ,Uint16,  PLC的机架号码

             Slot ,Uint16, PLC的CPU的插槽号码

             Handle, Integer ,DLL组件返回网络中PLC的连接句柄 *1

             SN , String,调用序列号码,可联系本公司获

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

    返回值: Int16,函数执行结果,见4.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,函数执行结果,见4.3详细说明

    [DeLink]    断开与PLC的连接;

    参数:   Handle, Integer , 通过EntLink函数获取的网络中PLC的句柄 *1

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

    [CmdRead]   批量读取PLC的数据;

    参数:   Handle, Integer , 通过EntLink函数获取的网络中PLC的句柄 *1

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

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

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

    Address ,Uint16, 要读取的存储区域起始地址

    Count ,Uint16, 要读取的数量,以ValType对应的数据类型为单位

    ReData() ,Object/String,读取到的数据(传地址方式的形式参数)

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

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

    参数:   Handle, Integer , 通过EntLink函数获取的网络中PLC的句柄 *1

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

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

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

    Address ,Uint16, 要写入的存储区域起始地址

    Count ,Uint16, 要写入的数量,以ValType对应的数据类型为单位

    Data() ,Object/String,要写入PLC的数据(传地址方式的形式参数)

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

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

    参数:   Handle, Integer , 通过EntLink函数获取的网络中PLC的句柄 *1

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

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

    Address ,Uint16, 要读取的位所在的字或字节地址

    Bit,Uint16, 要读取的位在Address中的位号码

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

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

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

    参数:   Handle, Integer , 通过EntLink函数获取的网络中PLC的句柄 *1

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

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

    Address ,Uint16, 要设置的位所在的字或字节地址

    Bit,Uint16, 要设置的位在Address中的位号码

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

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

    参数:   Handle, Integer , 通过EntLink函数获取的网络中PLC的句柄 *1

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

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

    Address ,Uint16, 要复位的位所在的字或字节地址

    Bit,Uint16, 要复位的位在Address中的位号码

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

    [CmdReadString]   读取PLC中的字符串;

    参数:   Handle, Integer , 通过EntLink函数获取的网络中PLC的句柄 *1

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

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

    Address ,Uint16, 要读取的存储区域起始地址

    PlcDataSize ,Uint16, PLC内定义的存放字符的最大字符数

    返回值: String,正常时为读到的字符串,异常时为空

    [CmdWriteString]   写入字符串到PLC;

    参数:   Handle, Integer , 通过EntLink函数获取的网络中PLC的句柄 *1

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

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

    Address ,Uint16, 要写入的存储区域起始地址

    PlcDataSize ,Uint16, PLC内定义的存放字符的最大字符数

             Data ,String, 要写入到PLC的符数,长度应≤PlcDataSize

    返回值: String,正常时为读到的字符串,异常时为空

    [DataConvert]   数据类型转换函数; 

    参数:   SourType,DataType, 数据类型枚举,见4.2详细说明

    SourData , Object,需要转换的源数据

    DestType ,DataType, 数据类型枚举,见4.2详细说

    DestData ,Object,转换后的目标数据(传地址方式的形式参数)

    StartByte ,Int16,目标数据从源数据取数的起始字节(可选参数)

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

         *1: Handle参数说明

         为方便同一应用程序连接多台PLC而设置的参数,在通讯组件外部调用时,定义一个全局变量,DLL在与PLC网络连接成功以后,自动分配PLC句柄数据,外部程序通过该句柄区分操作不同的PLC;变量为输入输出型参数,即传地址方式的形式参数,外部赋值无效。

    4.2  枚举结构体参数说明:

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

         DI:   数字输入端口;

         DQ:   数字输出端口;

         MR:   内部中间继电器区域;

         DR:   内部数据寄存器V/DB区域;

    --PrtType  串口通讯的校验方式

         None: 无校验

         Odd:奇校验

         Even:偶检验

    4.3  返回值说明:

         0 执行成功;

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

    -2  网络连接错错误;

    -3  连接参数错误导致连接失败(如Rack>7 、Slot>15等);

    -4  PLC握手连接异常;

    -5  PLC握手无响应;

    -6  PLC握手响应错误;

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

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

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

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

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

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

    -18 PLC的网络句柄解析错误;

    -19 PLC的网络句柄数据错误;

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

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

    -22 写数据PLC响应超时;

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

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

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

    -28 PLC的网络句柄解析错误;

    -29 PLC的网络句柄数据错误;

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

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

    -41 位操作函数的参数错误;

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

    -80 PC系统中无网卡;

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

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

    -83 PING命令返回错误;

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

    5.0  组件使用步骤

    5.1 基本步骤

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

    b. 注册DLL、OCX文件(VS.NET平台的DLL程序集组件不用注册);

    c. 在项目开发环境里引用DLL文件,不同的开发环境引用方式有区别,具体参见所用语言的帮助文档;

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

    5.2  DLL注册方法

    VS.NET平台的DLL程序集组件不用注册,ActiveX的COM组件(*.dll/*.ocx)须要在系统下注册才能正常使用,注册的方法主要有两种:

    a. 代码注册:用Windows提供的Shell命令,Shell “regsvr32 s ” + 组件的完整路径及文件名称;

    b. 手动注册:同时按下 “Win”键 +“R”建,在弹出的运行对话框中输入: 

    “Regsvr32 ” + 空格 + 组件的完整路径及文件名称,然后点“确认”按钮;

    Windows7 及以上的系统下注册,建议对用户账户作以下设置:

    控制面板->用户账号和家庭安全->用户账户->更改用户账户控制设置,把滑竿拖到最下面,即“从不通知”。

    Windows7 及以上系统64位注册方法:

    a. 在C:WindowsSysWOW64下新建目录(以 regdll 为例),复制需要注册的dll到这个目录下(以WinTcpS7.dll为例);

    b. 点击开始,在“搜索程序和文件”里键入cmd,然后在搜索出来的cmd菜单上右键,以管理员的权限运行;

    c. 此时cmd提示符为C:WindowsSystem32,键入: Regsvr32 C:WindowsSystem32 egdllWinTcpS7.dll

    d. 按回车键,然后提示注册成功(注意此时使用的是syswow64目录下的regsvr32.exe,而不是system32下的regsvr32.exe)。

  • 相关阅读:
    97. Interleaving String
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    94. Binary Tree Inorder Traversal
    odoo many2many字段 指定打开的form视图
    docker sentry 配置文件位置
    postgres 计算时差
    postgres 字符操作补位,字符切割
    postgres判断字符串是否为时间,数字
    odoo fields_view_get
  • 原文地址:https://www.cnblogs.com/DreamRecorder/p/9359435.html
Copyright © 2011-2022 走看看