实例介绍
【实例截图】
【核心代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | 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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论