|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using HslCommunication.Core.Address;
|
|
|
using HslCommunication.Profinet.Melsec;
|
|
|
|
|
|
|
|
|
namespace HslCommunication.Profinet.Keyence
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 基恩士PLC的数据读写类
|
|
|
/// </summary>
|
|
|
/// <remarks>
|
|
|
/// 地址的输入的格式说明如下:
|
|
|
/// <list type="table">
|
|
|
/// <listheader>
|
|
|
/// <term>地址名称</term>
|
|
|
/// <term>地址代号</term>
|
|
|
/// <term>示例</term>
|
|
|
/// <term>地址进制</term>
|
|
|
/// <term>字操作</term>
|
|
|
/// <term>位操作</term>
|
|
|
/// <term>KV-7500/7300</term>
|
|
|
/// <term>KV-5500/5000/3000</term>
|
|
|
/// <term>KV Nano</term>
|
|
|
/// </listheader>
|
|
|
/// <item>
|
|
|
/// <term>输入继电器</term>
|
|
|
/// <term>X</term>
|
|
|
/// <term>X100,X1A0</term>
|
|
|
/// <term>16</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>R00000~R99915</term>
|
|
|
/// <term>R00000~R99915</term>
|
|
|
/// <term>R00000~R59915</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>输出继电器</term>
|
|
|
/// <term>Y</term>
|
|
|
/// <term>Y100,Y1A0</term>
|
|
|
/// <term>16</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>R00000~R99915</term>
|
|
|
/// <term>R00000~R99915</term>
|
|
|
/// <term>R00000~R59915</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>链接继电器</term>
|
|
|
/// <term>B</term>
|
|
|
/// <term>B100,B1A0</term>
|
|
|
/// <term>16</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>B0000~B7FFF</term>
|
|
|
/// <term>B0000~B3FFF</term>
|
|
|
/// <term>B0000~B1FFF</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>内部辅助继电器</term>
|
|
|
/// <term>M</term>
|
|
|
/// <term>M100,M200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>MR00000~MR99915</term>
|
|
|
/// <term>MR00000~MR99915</term>
|
|
|
/// <term>MR00000~MR59915</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>锁存继电器</term>
|
|
|
/// <term>L</term>
|
|
|
/// <term>L100,L200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>LR00000~LR99915</term>
|
|
|
/// <term>LR00000~LR99915</term>
|
|
|
/// <term>LR00000~LR19915</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>控制继电器</term>
|
|
|
/// <term>SM</term>
|
|
|
/// <term>SM100,SM200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>CR0000~CR7915</term>
|
|
|
/// <term>CR0000~CR3915</term>
|
|
|
/// <term>CR0000~CR8915</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>控制存储器</term>
|
|
|
/// <term>SD</term>
|
|
|
/// <term>SD100,SD200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>×</term>
|
|
|
/// <term>CM0000~CM5999</term>
|
|
|
/// <term>CM0000~CM5999</term>
|
|
|
/// <term>CM0000~CM8999</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>数据存储器</term>
|
|
|
/// <term>D</term>
|
|
|
/// <term>D100,D200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>×</term>
|
|
|
/// <term>DM00000~DM65534</term>
|
|
|
/// <term>DM00000~DM65534</term>
|
|
|
/// <term>DM00000~DM32767</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>扩展数据存储器</term>
|
|
|
/// <term>D</term>
|
|
|
/// <term>D100000~D165534</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>×</term>
|
|
|
/// <term>EM00000~EM65534</term>
|
|
|
/// <term>EM00000~EM65534</term>
|
|
|
/// <term>×</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>文件寄存器</term>
|
|
|
/// <term>R</term>
|
|
|
/// <term>R100,R200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>×</term>
|
|
|
/// <term>FM00000~FM32767</term>
|
|
|
/// <term>FM00000~FM32767</term>
|
|
|
/// <term>×</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>文件寄存器</term>
|
|
|
/// <term>ZR</term>
|
|
|
/// <term>ZR100,ZR1A0</term>
|
|
|
/// <term>16</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>×</term>
|
|
|
/// <term>ZF000000~ZF524287</term>
|
|
|
/// <term>ZF000000~ZF131071</term>
|
|
|
/// <term>×</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>链路寄存器</term>
|
|
|
/// <term>W</term>
|
|
|
/// <term>W100,W1A0</term>
|
|
|
/// <term>16</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>×</term>
|
|
|
/// <term>W0000~7FFF</term>
|
|
|
/// <term>W0000~3FFF</term>
|
|
|
/// <term>W0000~3FFF</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>定时器(当前值)</term>
|
|
|
/// <term>TN</term>
|
|
|
/// <term>TN100,TN200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>×</term>
|
|
|
/// <term>T0000~T3999</term>
|
|
|
/// <term>T0000~T3999</term>
|
|
|
/// <term>T000~T511</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>定时器(接点)</term>
|
|
|
/// <term>TS</term>
|
|
|
/// <term>TS100,TS200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>T0000~T3999</term>
|
|
|
/// <term>T0000~T3999</term>
|
|
|
/// <term>T000~T511</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>计数器(当前值)</term>
|
|
|
/// <term>CN</term>
|
|
|
/// <term>CN100,CN200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>×</term>
|
|
|
/// <term>C0000~C3999</term>
|
|
|
/// <term>C0000~C3999</term>
|
|
|
/// <term>C000~C255</term>
|
|
|
/// </item>
|
|
|
/// <item>
|
|
|
/// <term>计数器(接点)</term>
|
|
|
/// <term>CS</term>
|
|
|
/// <term>CS100,CS200</term>
|
|
|
/// <term>10</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>√</term>
|
|
|
/// <term>C0000~C3999</term>
|
|
|
/// <term>C0000~C3999</term>
|
|
|
/// <term>C000~C255</term>
|
|
|
/// </item>
|
|
|
/// </list>
|
|
|
/// </remarks>
|
|
|
public class KeyenceMcAsciiNet : MelsecMcAsciiNet
|
|
|
{
|
|
|
#region Constructor
|
|
|
|
|
|
/// <summary>
|
|
|
/// 实例化基恩士的Qna兼容3E帧协议的通讯对象
|
|
|
/// </summary>
|
|
|
public KeyenceMcAsciiNet() : base( )
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 实例化一个基恩士的Qna兼容3E帧协议的通讯对象
|
|
|
/// </summary>
|
|
|
/// <param name="ipAddress">PLC的Ip地址</param>
|
|
|
/// <param name="port">PLC的端口</param>
|
|
|
public KeyenceMcAsciiNet( string ipAddress, int port ) : base( ipAddress, port )
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Address Overeride
|
|
|
|
|
|
/// <summary>
|
|
|
/// 分析地址的方法,允许派生类里进行重写操作
|
|
|
/// </summary>
|
|
|
/// <param name="address">地址信息</param>
|
|
|
/// <param name="length">数据长度</param>
|
|
|
/// <returns>解析后的数据信息</returns>
|
|
|
protected override OperateResult<McAddressData> McAnalysisAddress( string address, ushort length )
|
|
|
{
|
|
|
return McAddressData.ParseKeyenceFrom( address, length );
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Object Override
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取当前对象的字符串标识形式
|
|
|
/// </summary>
|
|
|
/// <returns>字符串信息</returns>
|
|
|
public override string ToString()
|
|
|
{
|
|
|
return $"KeyenceMcAsciiNet[{IpAddress}:{Port}]";
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
}
|