我試圖通過配置爲8n1而沒有握手的rs485連接與win ce設備進行通信。問題是該設備有兩種操作模式,充當接收器或發射器。爲了在兩種操作模式之間切換,我需要打開/關閉rts。 我試過這樣做,但該設備永遠不會改變模式,除非我在啓用或禁用rts的地方使用斷點。這導致我相信有一個時間問題,並且在我設法發送任何東西(默認模式是接收)之前,rts被打開和關閉。 我試過看關於這個話題的前幾個問題,我試過谷歌,但到目前爲止,我還沒有遇到任何東西。任何人都可以幫忙嗎?串口服務器;配置rts
這裏是我的代碼:
public static ushort Send_rs485(byte[] ToSend)
{
try
{
rs485.Write(ToSend, 0, ToSend.Length);
}
catch (TimeoutException)
{
MessageBox.Show("COM port error");
}
return (0);
}
private void button2_Click(object sender, EventArgs e)
{
if (COM_opened)
{
bool CTS = false;
rs485.RtsEnable = true;
rs485_Execute_cmd(on_off);
on_off = !on_off;
rs485.RtsEnable = false;
}
else
{
MessageBox.Show("COM port not opened");
}
//rs485.RtsEnable = false;
}
解決方法是簡單地將兩個Thread.Sleep放在Execute_cmd調用的周圍(或至少在它之後)。我似乎記得在使用COM端口時,經常在生產中看到這種情況,無論是在C#還是在各種設備的C代碼中。 – Luaan
你嚴重低估了現代處理器的速度。正如所寫的,您只需將信號打開幾個*納秒*即可。該設備可以看到的可能性非常低。它在你調試時起作用,因爲你放慢了速度。你需要一個定時器來關閉它。該方案設計得不好,如果設備沒有給你提示它切換模式,你永遠不能完全確定你保持足夠長的時間。如果確實如此,您似乎可以檢測到它不處於正確的模式,那麼當您檢測到模式開關後,當然就會將其關閉。 –
謝謝你的幫助。我現在已經解決了這個問題,不幸的是(就像Luaan提到的那樣)它只是感覺很髒 –