發(fā)表于:2003/9/14 15:43:00
#0樓
我使用施奈德的TWDLMDA20DRT PLC,采用串口232通訊, 在VC中開發(fā)PC與PLC的通訊程序,但是發(fā)送數(shù)據(jù)幀后,沒有回應(yīng)幀,不知道為什么?
下面是它的文檔的部分說明,請高手指點:
ASCII幀
在ASCII模式中,以(:)號(ASCII3AH)表示信息開始,以回撤一換行鍵(CRLF) (ASCII OD和OAH)表示信息結(jié)束。
對其它的區(qū),允許發(fā)送的字符為16進(jìn)制字符0-9,A-F。網(wǎng)絡(luò)中設(shè)備連續(xù)檢測并接收一個冒號(:)時,每臺設(shè)備對地址區(qū)解碼,找出要尋址的設(shè)備。
字符之間的最大間隔為1S,若大于1S,則接收設(shè)備認(rèn)為出現(xiàn)了一個錯誤。 典型的信息幀見下表
開始 地址 功能 數(shù)據(jù) 縱向冗余檢查 結(jié)束
1字符
: 2字符 2字符 n字符 2字符 2字符
圖3 ASCII信息幀
例外:對于584和984A/B/X控制器,一個ASCII信息可在LRC區(qū)后正常終止,而不需發(fā)送CRLF字符,此時出現(xiàn)>IS的時間間隔,控制器也將認(rèn)為是正常中斷。
在VC中使用網(wǎng)上的CSerial類進(jìn)行串口通訊,部分代碼如下:
void CSerialTestDlg::OnCom1Send()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
char buf[100];
m_str_Com1Send="";
char temp=13;
m_str_Com1Send=":00040001";
m_str_Com1Send+=temp;
temp=10;
m_str_Com1Send+=temp;
memset(&buf, 0, sizeof(buf));
memcpy(buf,m_str_Com1Send,100);
m_ComPort.WriteToPort(buf);
Sleep(1000);
m_ComPort.ReadData(&read_BUFFER,1);
}
下面是它的文檔的部分說明,請高手指點:
ASCII幀
在ASCII模式中,以(:)號(ASCII3AH)表示信息開始,以回撤一換行鍵(CRLF) (ASCII OD和OAH)表示信息結(jié)束。
對其它的區(qū),允許發(fā)送的字符為16進(jìn)制字符0-9,A-F。網(wǎng)絡(luò)中設(shè)備連續(xù)檢測并接收一個冒號(:)時,每臺設(shè)備對地址區(qū)解碼,找出要尋址的設(shè)備。
字符之間的最大間隔為1S,若大于1S,則接收設(shè)備認(rèn)為出現(xiàn)了一個錯誤。 典型的信息幀見下表
開始 地址 功能 數(shù)據(jù) 縱向冗余檢查 結(jié)束
1字符
: 2字符 2字符 n字符 2字符 2字符
圖3 ASCII信息幀
例外:對于584和984A/B/X控制器,一個ASCII信息可在LRC區(qū)后正常終止,而不需發(fā)送CRLF字符,此時出現(xiàn)>IS的時間間隔,控制器也將認(rèn)為是正常中斷。
在VC中使用網(wǎng)上的CSerial類進(jìn)行串口通訊,部分代碼如下:
void CSerialTestDlg::OnCom1Send()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
char buf[100];
m_str_Com1Send="";
char temp=13;
m_str_Com1Send=":00040001";
m_str_Com1Send+=temp;
temp=10;
m_str_Com1Send+=temp;
memset(&buf, 0, sizeof(buf));
memcpy(buf,m_str_Com1Send,100);
m_ComPort.WriteToPort(buf);
Sleep(1000);
m_ComPort.ReadData(&read_BUFFER,1);
}