如何解决在Windows窗体C#中从Modbus EasyModbus.dll库读取FT300传感器数据时出现问题
我现在正试图通过USB-RS485转换器并利用C#中的EasyModbus.dll来读取传感器数据。
但是,我一直在ReadHoldingRegister
部分收到 CRC检查失败。连接和读取部分如下所示。
我已经做了很多研究,但仍然无法解决问题。有人可以帮我吗?
CRC检查失败的地址将发生在
int[] Read = modbusClient.ReadHoldingRegisters(179,6);
FT300 Modbus设置也如下所示:
Image is stolen from this manual,page 34
void getavailableports() // get available COM
{
comboBox1.Items.Clear();
string[] ports = SerialPort.GetPortNames();
comboBox1.Items.AddRange(ports);
}
private void comboBox1_MouseClick(object sender,MouseEventArgs e) //let user choose COM
{
getavailableports();
}
private void Start_Click(object sender,EventArgs e) // Start button being pressed
{
try
{
Invoke(new EventHandler(ChangeColor));
//FT300Port.PortName = comboBox1.Text;
//.Baudrate = Convert.ToInt32(Baudrate.Text);
//FT300Port.open();
modbusClient.UnitIdentifier = 9; // default slaveID = 1
modbusClient.Baudrate = Convert.ToInt32(Baudrate.Text); // default baudrate = 9600
modbusClient.Parity = System.IO.Ports.Parity.None;
modbusClient.StopBits = System.IO.Ports.StopBits.One;
modbusClient.ConnectionTimeout = 500;
modbusClient.Connect();
lb_status.Text = "Connected";
timer_Modbus.Enabled = true;
}
catch(Exception ex)
{
lb_status.Text = ex.ToString();
throw;
}
}
private void ChangeColor(object sender,EventArgs e)
{
Start.Text = "Streaming";
Start.BackColor = Color.Red;
}
private void disconnect_Click(object sender,EventArgs e)
{
modbusClient.disconnect();
Start.Text = "Start";
Start.BackColor = Color.DarkGray;
lb_status.Text = "disconnected";
timer_Modbus.Enabled = false;
}
private void timer_Modbus_Tick(object sender,EventArgs e)
{
timer_Modbus.Enabled = false;
//modbusClient.WriteMultipleCoils(179,new bool[] { true,true,true});
//Write Coils starting with Address 180
//bool[] readCoils = modbusClient.ReadCoils(179,6);
**int[] Read = modbusClient.ReadHoldingRegisters(179,6);**
/*textBox1.Text = Convert.ToString(Read[0]);
textBox2.Text = Convert.ToString(Read[1]);
textBox3.Text = Convert.ToString(Read[2]);
textBox4.Text = Convert.ToString(Read[3]);
textBox5.Text = Convert.ToString(Read[4]);
textBox6.Text = Convert.ToString(Read[5]);*/
timer_Modbus.Enabled = true;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。