嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
namespace SocketClient
{
class Program
{
static void Main(string[] args)
{
IPAddress remote = IPAddress.Parse("127.0.0.1");
Client c = new Client(8088, remote); //连接本机服务程序
//IPAddress remote = IPAddress.Parse("10.178.2.101");
//Client c = new Client(9600, remote); //连接PLC设备
c.connect();
Console.WriteLine("服务器连接成功!");
//头(FINS) 长度(Hex0C) 命令(00000000) 错误码(00000000) 客户机节点地址
//46494E53是FINS的ASCII码值,即命令头
//0000000C是命令长度12,总长度20
//00000000是命令码
//00000000是错误码
//00000019是客户节点地址,即电脑IP地址的末位25
string input = "46 49 4E 53 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 19";
Byte[] buffer = Trans2Bates(input, 20);
c.Send(buffer);
// c.send(input);
string result = string.Empty;
byte[] mm = c.ReveiveByte();
for (int i = 0; i < mm.Length; i )//逐字节变为16进制字符
{
//头(FINS) 长度(Hex10) 命令(00000001) 错误码 客户机电脑节点地址 服务器PLC地址
result = Convert.ToString(mm[i], 16).PadLeft(2, '0').ToUpper();
}
string sss = Encoding.ASCII.GetString(mm).ToUpper();
Console.WriteLine("握手成功:" result.Substring(0, 100));
while (true)
{
Console.Write("send>");
string Readmsg = Console.ReadLine();
if (Readmsg == "exit")
break;
//握手成功后,读取DM100后2位。检查当前资料是否可读 82 读取D1000 3E8
string _getDataFromPLC = "46494E530000001A0000000200000000800002006500001900FF0101820003E80002";
if (Readmsg == "3F2")//设备状态
_getDataFromPLC = "46494E530000001A0000000200000000800002006500001900FF01018203F200001F";
if (Readmsg == "3E8")//扫码值读取
_getDataFromPLC = "46494E530000001A0000000200000000800002006500001900FF01018203E800002F";
if (Readmsg == "38E")//扫码值读取
_getDataFromPLC = "46494E530000001A0000000200000000800002006500001900FF010182038E00001F";
if (Readmsg == "3C0")//扫码值读取
_getDataFromPLC = "46494E530000001A0000000200000000800002006500001900FF01018203C000002F";
if (Readmsg == "3E9")//扫码读取完成
_getDataFromPLC = "46494E53 0000001A 00000002 00000000 80000200 65000019 00FF0102 8200D200 00010388";
if (Readmsg == "410")//第一条码
_getDataFromPLC = "46494E530000001A0000000200000000800002006500001900FF010182041000002F";
if (Readmsg == "42E")//第2条码
_getDataFromPLC = "46494E530000001A0000000200000000800002006500001900FF010182042E00002F";
if (_getDataFromPLC == "") return;
Byte[] sendBytes = Trans2Bates(_getDataFromPLC, 34);
Byte[] sendBytes2 = System.Text.Encoding.ASCII.GetBytes("@00FA0000000000102B100D200000103E873*CR");
c.Send(sendBytes);
string receiveMsg = string.Empty;
try
{
byte[] receiveBytes = c.ReveiveByte();
for (int i = 0; i < receiveBytes.Length; i )//逐字节变为16进制字符
{
//头(FINS) 长度(Hex10) 命令(00000001) 错误码 客户机电脑节点地址 服务器PLC地址
receiveMsg = Convert.ToString(receiveBytes[i], 16).PadLeft(2, '0').ToUpper();
}
string XXX = Encoding.ASCII.GetString(sendBytes).ToUpper();
XXX = Encoding.ASCII.GetString(receiveBytes).ToUpper();
string[] XX = XXX.Replace("\0", "").Split(new string[] { "\u0001-", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
string X1 = XX[3] " " XX[2];
Console.WriteLine("GetData1:" X1);
}
catch(Exception ex)
{
Console.WriteLine("GetData Error!");
}
}
c.disconnect();
Console.ReadLine();
}
static Byte[] Trans2Bates(string strSource, int intlength)
{
Byte[] buffer = new Byte[intlength];
string strSource1 = strSource.Trim(); ;
string strSource2 = "";
for (int i = 0; i < intlength; i )
{
strSource2 = strSource1.Substring(0, 2);
buffer [i] = Convert.ToByte( Convert.ToInt32(strSource2, 16));
strSource1 = strSource1.Substring(2).Trim();
if (strSource1.Length < 2) break;
}
return buffer;
}
}
}
【源码目录】
PLC
├── OMRON_FINS协议说明.docx
├── Socket_Server
│ ├── SocketClient
│ │ ├── Client.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── SocketClient.csproj
│ │ ├── bin
│ │ │ └── Debug
│ │ │ ├── SocketClient.exe
│ │ │ ├── SocketClient.pdb
│ │ │ ├── SocketClient.vshost.exe
│ │ │ └── SocketClient.vshost.exe.manifest
│ │ └── obj
│ │ └── Debug
│ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ ├── SocketClient.csproj.FileListAbsolute.txt
│ │ ├── SocketClient.csprojResolveAssemblyReference.cache
│ │ ├── SocketClient.exe
│ │ ├── SocketClient.pdb
│ │ └── TempPE
│ ├── Socket_Server
│ │ ├── BufferManager.cs
│ │ ├── IOCPServer.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── SocketAsyncEventArgsPool.cs
│ │ ├── Socket_Server.csproj
│ │ ├── bin
│ │ │ └── Debug
│ │ │ ├── Socket_Server.exe
│ │ │ ├── Socket_Server.pdb
│ │ │ ├── Socket_Server.vshost.exe
│ │ │ └── Socket_Server.vshost.exe.manifest
│ │ └── obj
│ │ └── Debug
│ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ ├── Socket_Server.csproj.FileListAbsolute.txt
│ │ ├── Socket_Server.csprojResolveAssemblyReference.cache
│ │ ├── Socket_Server.exe
│ │ ├── Socket_Server.pdb
│ │ └── TempPE
│ └── Socket_Server.sln
└── 地址分配(1).xlsx
15 directories, 31 files