实例介绍
【实例截图】
【核心代码】
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论