C#局域网通信,求教!

nvshenxp 2012-06-05 02:07:28
与下位机之间是无线网的局域网通信(利用WiFi转串口工具,这个应该没有关系),自己用以前写的聊天程序类似的程序测试数据是正确的,但是接到下位机总是没有数据返回,就是说我发给下位机的数据有问题,通信使用modbus协议,传输16进制数据,我用的是Socket,在发送之前由一组16进制字符串转换成字节数组发送,始终没有数据返回。请帮忙分析一下,谢谢!
以下是发送数据时部分代码。



private void OrderProccess()
{
try
{

while (m_flag)
{

for (int k = 0; k < m_clist.Count; k++)
{//构造字节数组
Byte[] sendByte = new Byte[64];
//是这个服务器内的设备IP号
if (m_clist[k].m_name.Contains(m_name))
//起始位和IP号
{
string datastr = "AA" + m_clist[k].ip.ToString("X2");
//CRC校验码
int crc = CRCKey_RTU(datastr);
//待发送内容
string sendStr = datastr + String.Format("{0:X4}", crc);
//转换成字节数组以便发送
sendByte = Encoding.BigEndianUnicode.GetBytes(sendStr.ToCharArray());
// receiveTd.Interrupt();
//向每个设备最多发三次命令
for (int i = 0; i <= 3; i++)
{

//如果接收到的数据包与发送的不一致,重新发送
if (!(Compare(m_rStr, sendStr)) || m_rStr == null)
{
if (i < 3)
{
m_socket.Send(sendByte, sendByte.Length, 0);//发送数据
//每次发送之后延时100毫秒
Thread.Sleep(2000);
}
else
{
//如果三次都没有返回从IP列表中删除
// m_clist.Remove(m_clist[k]);
m_clist[k].isFound = false;
break;
}
}
//接收到相同的数据包,设备搜索成功
else
{
//搜索到的设备个数加1
ipcount++;
m_clist[k].isFound = true;
m_clist[k].m_name = m_name + m_clist[k].ip.ToString();
//更新设备表
UpDateDevice(m_da, m_clist[k].ip.ToString("X2"));
break;

}
}
}
}
//提示实际找到的设备
MessageBox.Show(m_ip.ToString() + "下搜索到" + ipcount + "个设备!");
//计数器清零
ipcount = 0;
//线程挂起
Thread.Sleep(Timeout.Infinite);
break;
}
}
catch (Exception ex)
{

//MessageBox.Show(ex.ToString());
// MessageBox.Show("连接已断开!");

}
}

...全文
206 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nvshenxp 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
自己用以前写的聊天程序类似的程序测试数据是正确的,但是接到下位机总是没有数据返回,就是说我发给下位机的数据有问题


简单看了一下你的代码,再结合你的描述,
就是说我发给下位机的数据有问题

第一:与下位机通信协议你再确认一下(排除简单错误),是否发送16进制命令正确
第二:你的代码里是判断是否一致再处理,并不是有数据不论是否一致就处理。故,你可以先确认数据是否收到再确认是否一致。
[/Quote]


恩,我之前都只是和自己写的程序测试,解码方法都是统一的,改一下编码方式就OK了,谢谢!
风之影子 2012-06-05
  • 打赏
  • 举报
回复
自己用以前写的聊天程序类似的程序测试数据是正确的,但是接到下位机总是没有数据返回,就是说我发给下位机的数据有问题


简单看了一下你的代码,再结合你的描述,
就是说我发给下位机的数据有问题

第一:与下位机通信协议你再确认一下(排除简单错误),是否发送16进制命令正确
第二:你的代码里是判断是否一致再处理,并不是有数据不论是否一致就处理。故,你可以先确认数据是否收到再确认是否一致。
nvshenxp 2012-06-05
  • 打赏
  • 举报
回复
肿么大侠们都不在么?

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧