- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
台达B系列触摸屏与高压变频器DSP的通讯连接测试方式.
台达B系列触摸屏与高压变频器DSP的通讯连接测试方式
哈尔滨机电 王鹏九
关键词:VC++软件 通讯模拟器 自由通讯宏
内容提要:本文介绍了触摸屏与特定协议的DSP进行通讯的方式,并介绍了在没有实际产品的情况下,如何验证程序及模拟通讯器的编辑方式
概述
哈尔滨JZ公司生产一型高压变频器,需要一种人机界面读取DSP当中的数据,由于其DSP的通讯方式为自己定义,不能使用已有的通讯方式进行通讯,只能应用触摸屏中的宏通讯指令和其进行通讯。为了展示我们的通讯方式正确,我还使用VC++编辑了一款模拟器,来模拟从站DSP,以得到用户的认可。
DSP的通讯协议分析
其通讯方式共有3种,其中写操作在其协议中是没有回应的,因此,不做模拟,以下为其他两种通讯协议,
读故障
F8 52校验和A0 03 1D 00 F9
(首址928(03A0),长度29(001D))6KV
校验和= A0 + 03 + 1D + 00 = C0
返回:F8 _ _ _… …_ _ _ F9(返回60 Bytes,29*2+2)
读四个显示数据
F8 55 校验和 00 FF 00 FF F9
校验和= 00 + FF + 00 + FF
码:F8 55 FE 00 FF 00 FF F9
返回:
F8
频率整L, 频率整H, 频率小L/1000, 频率小H/1000,
电压整L, 电压整H, 电压小L/1000, 电压小H/1000,
实频整L, 实频整H, 实频小L/1000, 实频小H/1000,
电流整L, 电流整H, 电流小L/1000, 电流小H/1000,
F9。
以上可以看出只有发送报文时才需要进行校验,而返回的报文不需要进行校验计算,校验计算以和校验为准,不同于其他类型的和校验,它的协议的和校验只校验一个字节,因此,要注意其求和后的数据处理问题。
模拟器结构
模拟器采用VC++语言编制,使用windows多线程技术来解决通讯循环的问题,在接收到触摸屏的发送字符串后,对报文进行分析,然后,根据输入框不同的数据对指令进行回复。通讯过程没有使用大家常用的MSCOMM控件,而是使用自己编制的通讯类,使用自己编制的通讯类虽然在代码的编写上有些麻烦,但也只限于第一次使用,以后可以直接引用类,并对其进行继承!而且,自己编制的通讯类在多串口通讯时,更具功效。
线程中的主要代码如下所示:
UINT Comm(LPVOID pParam)
{
BOOL bCtrl;
// int iNum=0;
BYTE byRcv[50];
BYTE bySend[80];
DWORD dwRcv,dwCnt;
// BYTE bySend[10]={0x10,0x00,0x80,0x00,0x7f,0x00,0x04,0xe7,0x00,0x00};
// DWORD dwNum;
CString str,m_strRcv,m_strSend;
// DWORD i=0;
int i=0;
bCtrl=TRUE;
CNs_jzDlg* pdlg=(CNs_jzDlg*)pParam;
do
{
if(pdlg-m_hCom.m_hCom!=NULL)
{
dwRcv=pdlg-m_hCom.ReceiveComm(byRcv);
if(dwRcv!=-1)
{
m_strRcv.Empty();
for(dwCnt=0;dwCntdwRcv;dwCnt++)
{
str.Format(%x-,byRcv[dwCnt]);
m_strRcv+=str;
}
pdlg-m_listRcv.AddString(m_strRcv);
Sleep(3);
switch(byRcv[1])
{
case 0x55:
if(byRcv[0]==0xf8)
{
bySend[0]=0xf8;
// bySend[1]=byRcv[1];
for(i=0;i16;i++)
bySend[i+1]=pdlg-byFour[i];
bySend[17]=0xf9;
pdlg-m_hCom.WriteComm((char*)bySend,18);
m_strSend.Empty();
for(i=0;i18;i++)
{
str.Format(%x-,bySend[i]);
m_strSend+=str;
}
文档评论(0)