我正在尝试为安装了GARECO的Mettler-Toledo Garvens GmbH“X系列”自动检重秤开发应用程序。
什么是检重秤?称重器是生产线的最后一部分,如果产品重量在产品细节的正常参数范围内,则测量产品重量。该设备具有内部存储器,您可以将每个产品的产品规格加载到系统中,并轻松地从设备屏幕更改产品。
什么是GARECO? GARVENS自动检重秤的遥控器名为“GARECO”,是Garvens遥控器的缩写。
远程控制指令可由外部PC通过串行接口传输到称重终端,所有远程控制操作均由PC实现。检重秤对其已识别的指令作出反应并释放相应的动作。指令由ASCII字符串组成,每个字符串以字符CR和LF结尾。
我们的应用程序的目标是什么?当生产线更换我们喜欢的产品时,请更换检重秤产品进行测量。
如果您愿意,可以在以下链接中找到更多信息
我们在使用什么?
•.NET 4.5,
•Windows 10,
•TCP / IP(通过以太网电缆直接连接)
测试:
如上所述,设备应接受来自PC的指令。 我们设法通过以太网与设备建立连接,但是当我们发送指令时,设备没有响应。 下面,您可以看到我们使用的代码。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
TcpClient client = new TcpClient();
private void button2_Click(object sender, EventArgs e)
{
client.Connect("192.168.0.1", 23);
}
string _infoFB = "FB_INFO(CR)(LF)";
byte[] p;
private void button1_Click(object sender, EventArgs e)
{
client.Close();
}
private void button3_Click(object sender, EventArgs e)
{
p = Encoding.ASCII.GetBytes(_infoFB);
NetworkStream ntstream = client.GetStream();
if (ntstream.CanWrite)
{
ntstream.Write(p, 0, p.Length);
byte[] myReadBuffer = new byte[1024];
StringBuilder myCompleteMessage = new StringBuilder();
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = ntstream.Read(myReadBuffer, 0, myReadBuffer.Length);
myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));
}
while (ntstream.DataAvailable);
foreach (var item in myCompleteMessage.ToString())
{
listBox1.Items.Add(item);
}
}
if (ntstream.CanRead)
{
if (ntstream.DataAvailable)
{
byte[] myReadBuffer = new byte[1024];
StringBuilder myCompleteMessage = new StringBuilder();
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = ntstream.Read(myReadBuffer, 0, myReadBuffer.Length);
myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));
}
while (ntstream.DataAvailable);
foreach (var item in myCompleteMessage.ToString())
{
listBox1.Items.Add(item);
}
}
else
{
MessageBox.Show("Sorry. \n You cannot read from this NetworkStream.");
}
}
}
string recivedPulse;
private void button4_Click(object sender, EventArgs e)
{
p = Encoding.ASCII.GetBytes(_infoFB);
recivedPulse = Encoding.ASCII.GetString(p, 0, p.Length);
listBox1.Items.Add(recivedPulse);
}
}
}
答案 0 :(得分:0)
邮件实际上应该是"FB_INFO\r\n"
,而不是"FB_INFO(CR)(LF)"
。
CR
和LF
是“回车”和“换行”的缩写,是2个特殊控制字节。
设备的响应应该类似FB_INF 1 S R
或类似。字符S,R和其他可能的字符(例如G和M)指的是设备的可用许可证。
有关更多信息,您还可以联系公司Objective,该公司为Mettler / Garvens和其他设备(用Java编写)提供了出色的设备驱动程序。
另请注意,有一个更新版本的协议说明:1.10