?以下为简单通讯测试源码,只提供参考
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("127.0.0.1", 4545);//端口默认4545
{
//建立通讯
var command = "00200001000000000000" + (char)0;
byte[] commandbyte = Encoding.Default.GetBytes(command);
tcpClient.Client.Send(commandbyte, SocketFlags.None);
byte[] byteCommand = new byte[1024];
int icommand= tcpClient.Client.Receive(byteCommand);
var outputCommandValue = System.Text.Encoding.ASCII.GetString(byteCommand,0,icommand);
Console.WriteLine(outputCommandValue);
}
{
//发送心跳
var heart = "00209999000000000000" + (char)0;
byte[] heartData = Encoding.Default.GetBytes(heart);
tcpClient.Client.Send(heartData);
byte[] byteheart = new byte[1024];
var iheartdata=tcpClient.Client.Receive(byteheart);
string outputHeartValue = System.Text.Encoding.ASCII.GetString(byteheart,0,iheartdata);
Console.WriteLine(outputHeartValue);
}
{
//发送订阅拧紧数据
var tightening = "00200060000000000000" + (char)0;
byte[] tighteningbyte = Encoding.Default.GetBytes(tightening);
tcpClient.Client.Send(tighteningbyte);
byte[] bytesTightening = new byte[1024];
var itightening=tcpClient.Client.Receive(bytesTightening);
var outputTighteningValue = System.Text.Encoding.ASCII.GetString(bytesTightening,0,itightening);
Console.WriteLine(outputTighteningValue);
}
tcp 建立建立连接后,需要发送开始通讯指令(和S7等私有协议一样,连接后有两次通讯握手,拧紧控制器只有一次),拧紧控制器未收到通讯指令15秒后会强制断开连接。
开始通讯指令代码
00200001000000000000+(char)0;
拧紧控制器确认收到开始指令后回回复允许通讯指令(回复指令为测试指令,每把控制器可能略有差异,主要构成部分,由消息长度0000? 指令代码0000 以及后续信息为主,以下回复报文不准确只作为解读参考)
如下:
0057代表报文长度,0002代表功能码
如上《开始通讯报文指令》组成结构一致? 0020? ?0001,拼接时一定要注意长度是否满足规范,否则将无法通讯,马头控制器通讯报文结尾需要NUL 为标示符
拧紧控制器允许通讯指令
00570002001 ? ? ? ? 010000020003 ? ? ? ? ? ? ? ? ? ? ? ? ?
|