实例介绍
【实例截图】
【核心代码】
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
标签: PLC
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论