如何用C#往PLC某个端口写数据
我用C#基于SOCKET写了个接口程序,能够实现电脑与电脑间的通信,但往PLC中写数据时,电脑端显示写信息成功,但PLC端接不到数据,为什么呢?我的写数据的代码如下:
建立连接:
public Socket ConnectServer( )
{
Socket s = null;
string errmessage;
try
{
IPAddress ipAddress = IPAddress.Parse ( ip_address );
IPEndPoint ipEndPoint = new IPEndPoint ( ipAddress,port_num );
s = new Socket ( ipEndPoint.AddressFamily ,SocketType.Stream ,ProtocolType.Tcp );
s.Connect ( ipEndPoint );
if ( s.Connected== false )
{
s = null;
}
}
catch ( Exception e ) { errmessage = e.Message ;}
return s;
}
往端口写数据:
socket.Send (buffer,sndLen ,left ,SocketFlags.None );
[解决办法]
PLC不都用梯型图么.楼主用C#怎么能运行在PLC上
[解决办法]
发送的格式是否有错,不同品牌好象不样的哈,我给你一个参考:
UdpClient PLCUdpClient = new UdpClient();//PLC的UDP连接
/// <param name= "open "> 电源开关,1为开,0为关 </param>
public void OpenPower(int open, string addr)
{
Fins_Send[0] = 128;//&H80;
Fins_Send[1] = 0;// &H0;系统保留
Fins_Send[2] = 2;// &H2;允许的网关数
Fins_Send[3] = 0;// &H0;远程Fins网络地址
Fins_Send[4] = (byte)PLCnod;//远程Fins节点地址31
Fins_Send[5] = 0;// &H0;远程ETN单元地址2
Fins_Send[6] = 0;// &H0;本地网络号2
Fins_Send[7] = (byte)LocNod;// &H20;本地网络节点号32
Fins_Send[8] = 3;// &H3;本地网络单元号 17
Fins_Send[9] = 170;//&HAA;service ID
//设置Fins命令
Fins_Send[10] = 1;// &H1; // 写内存命令
Fins_Send[11] = 2;// &H2; // SRC
//设置Fins参数
Fins_Send[12] = 128;// &H80; //变量区命令DM 82,CIO 80
string addr_ciostr = Convert.ToString(Convert.ToInt32(addr), 16).PadLeft(4, '0 ');
Fins_Send[13] = Convert.ToByte(addr_ciostr.Substring(0, 2), 16); // 写DM区开始地址为DM00
Fins_Send[14] = Convert.ToByte(addr_ciostr.Substring(2, 2), 16);
Fins_Send[15] = 0;// &H0;
Fins_Send[16] = 0;// &H0; //写1个字
Fins_Send[17] = 1;// &H1;
Fins_Send[18] = 0;// &H0;
Fins_Send[19] = (byte)open;// &H1为开,&H0为关
IPEndPoint PLCIPEndPoint = new IPEndPoint(IPAddress.Parse(PLCIP), PLCPort);//PLC控制器IP和端口初始化
PLCUdpClient.Send(Fins_Send, Fins_Send.Length, PLCIPEndPoint);//向PLC控制器发送命令
}
立即成为编程经验丰富的程序员不是梦,详见:http://www.psec.net.cn
[解决办法]
mark
学习
[解决办法]
感觉在.net上套字总是会有漏的.
观摩学习
[解决办法]
UP
[解决办法]
呵呵,直接看也能看出是数据类型吧
private byte[] Fins_Send = new byte[20]; //定义一字节数组存储发往下位PLC的Fins命令格式
轻松编程:http://www.psec.net.cn
[解决办法]
需要有指令性格式
------解决方案--------------------
你的是什么牌子的PLC?
各牌子的PLC都有它的通讯组件
三菱PLC MX Component v3.0
西门子PLC Prodave MPI v6.0
它们都有详细的开发文档和例子!
他们都支持各系列的PLC,用他们提供的接口很容易就可以与
PLC进行通讯了,他们都不是免费的,在网上也很难能下载到,
如果你需要我可以给你一份!
[解决办法]
学习,学习。
[解决办法]
12楼的哥们,我用的是三菱PLC ,你有 MX Component v3.0
和它们都有详细的开发文档和例子! 给我一份好吗?
我的邮箱是junruzh@126.com
[解决办法]
12楼的哥们,我用的是三菱PLC和西门子的PLC ,你有 MX Component v3.0 和PRODAVE
和它们都有详细的开发文档和例子! 给我一份好吗?
我的邮箱是PZBPZBPZB751123@163.COM 非常感谢
[解决办法]
顶顶,定完就睡觉了
[解决办法]
学习
[解决办法]
学习
[解决办法]
pc机与plc通讯和pc机与pc机不同,与plc通讯时,plc要求指定端口对指定端口。
pc机与plc通讯时,把pc机设成被动接收,plc设成主动发送,当plc连接pc成功时,pc机沿通讯连路向plc发送消息,即可通讯成功。