发表于:2003/9/14 15:43:00
#0楼
我使用施奈德的TWDLMDA20DRT PLC,采用串口232通讯, 在VC中开发PC与PLC的通讯程序,但是发送数据帧后,没有回应帧,不知道为什么?
下面是它的文档的部分说明,请高手指点:
ASCII帧
在ASCII模式中,以(:)号(ASCII3AH)表示信息开始,以回撤一换行键(CRLF) (ASCII OD和OAH)表示信息结束。
对其它的区,允许发送的字符为16进制字符0-9,A-F。网络中设备连续检测并接收一个冒号(:)时,每台设备对地址区解码,找出要寻址的设备。
字符之间的最大间隔为1S,若大于1S,则接收设备认为出现了一个错误。 典型的信息帧见下表
开始 地址 功能 数据 纵向冗余检查 结束
1字符
: 2字符 2字符 n字符 2字符 2字符
图3 ASCII信息帧
例外:对于584和984A/B/X控制器,一个ASCII信息可在LRC区后正常终止,而不需发送CRLF字符,此时出现>IS的时间间隔,控制器也将认为是正常中断。
在VC中使用网上的CSerial类进行串口通讯,部分代码如下:
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)表示信息结束。
对其它的区,允许发送的字符为16进制字符0-9,A-F。网络中设备连续检测并接收一个冒号(:)时,每台设备对地址区解码,找出要寻址的设备。
字符之间的最大间隔为1S,若大于1S,则接收设备认为出现了一个错误。 典型的信息帧见下表
开始 地址 功能 数据 纵向冗余检查 结束
1字符
: 2字符 2字符 n字符 2字符 2字符
图3 ASCII信息帧
例外:对于584和984A/B/X控制器,一个ASCII信息可在LRC区后正常终止,而不需发送CRLF字符,此时出现>IS的时间间隔,控制器也将认为是正常中断。
在VC中使用网上的CSerial类进行串口通讯,部分代码如下:
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);
}