PMAC上位机编程基础2---上位机发送指令

编程环境配置完成后,就可以开始写界面。
1.首先打开解决方案资源管理器界面(视图->解决方案资源管理器)和资源视图界面(视图->资源视图).分别在头文件和源文件中添加myRuntime.h文件和myRuntime.cpp文件。



2.点击资源视图,在窗口中添加控件,如下图
添加控件
![](http://a2.qpic.cn/psb?/V135QPDB2w0C70/W7AJvpIo0OtCS.yz2tMBD7MR2KTtgnxUFuIYJyQjork!/b/dF0BAAAAAAAA&ek=1&kp=1&pt=0&bo=QAKiAQAAAAAFB8U!&sce=0-12-12&rf=viewer_4)

分别双击各个按钮,添加事件处理程序,代码如下:

  1 #include "stdafx.h"
  2 #include "pmac1.h"
  3 #include "pmac1Dlg.h"
  4 #include "afxdialogex.h"
  5 #include "myRuntime.h"
  6 
  7 void Cpmac1Dlg::OnBnClickedButton3()
  8 {
  9     // TODO: 在此添加控件通知处理程序代码
 10     if (NULL != OpenRuntimeLink())  
 11       {  
 12         AfxMessageBox(TEXT("加载动态链接库成功!"));  
 13     }  
 14     else  
 15     {  
 16         AfxMessageBox(TEXT("加载动态链接库失败!"));  
 17         return;  
 18     }  
 19   
 20     //打开指定卡号PMAC,这里打开0号卡  
 21     if (TRUE == OpenPmacDevice(0))  
 22     {  
 23         AfxMessageBox(TEXT("PMAC连接成功!"));  
 24     }  
 25     else  
 26     {  
 27         AfxMessageBox(TEXT("PMAC连接失败!"));  
 28     }  
 29     ClosePmacDevice(0);  
 30       
 31     //FreeLibrary  
 32     CloseRuntimeLink(); 
 33 }
 34 void Cpmac1Dlg::OnBnClickedButton2()
 35 {
 36     // TODO: 在此添加控件通知处理程序代码
 37     OpenRuntimeLink();
 38     OpenPmacDevice(0);
 39 
 40     TCHAR res[MAX_PATH];  
 41     TCHAR cmd[MAX_PATH];  
 42 
 43 
 44     //将要发送的指令存入cmd数组  
 45     lstrcpy(cmd, "i100=1");  
 46     //i100=1即为激活电机#1指令
 47     //GetDlgItemText(IDE_COMMAND, szCmd, MAX_PATH);  
 48   
 49     //发送指令和接受往回发的指令填充到szRes  
 50     PmacGetResponse(0,res,MAX_PATH,cmd);  
 51   
 52     //显示接受指令  
 53     //SetDlgItemText(IDE_RECEIVE, szRes);  
 54     ClosePmacDevice(0);  
 55       
 56     //FreeLibrary  
 57     CloseRuntimeLink(); 
 58 }
 59 void Cpmac1Dlg::OnBnClickedButton6()
 60 {
 61     
 62     OpenRuntimeLink();
 63     OpenPmacDevice(0);
 64     // TODO: 在此添加控件通知处理程序代码
 65     TCHAR res[MAX_PATH];  
 66     TCHAR cmd[MAX_PATH];  
 67 
 68     //将要发送的指令存入cmd数组  
 69     lstrcpy(cmd, "#1j/");  
 70     //i100=1即为激活电机#1指令
 71     //GetDlgItemText(IDE_COMMAND, szCmd, MAX_PATH);  
 72   
 73     //发送指令和接受往回发的指令填充到szRes  
 74     PmacGetResponse(0,res,MAX_PATH,cmd);  
 75   
 76     //显示接受指令  
 77     //SetDlgItemText(IDE_RECEIVE, szRes);  
 78     ClosePmacDevice(0);  
 79       
 80     //FreeLibrary  
 81     CloseRuntimeLink(); 
 82 }
 83 void Cpmac1Dlg::OnBnClickedButton4()
 84 {
 85     OpenRuntimeLink();
 86     OpenPmacDevice(0);
 87     // TODO: 在此添加控件通知处理程序代码
 88     // TODO: 在此添加控件通知处理程序代码
 89     TCHAR res[MAX_PATH];  
 90     TCHAR cmd[MAX_PATH];  
 91 
 92     //将要发送的指令存入cmd数组  
 93     lstrcpy(cmd, "#1J+");  
 94     //i100=1即为激活电机#1指令
 95     //GetDlgItemText(IDE_COMMAND, szCmd, MAX_PATH);  
 96   
 97     //发送指令和接受往回发的指令填充到szRes  
 98     PmacGetResponse(0,res,MAX_PATH,cmd);  
 99   
100     //显示接受指令  
101     //SetDlgItemText(IDE_RECEIVE, szRes);  
102     ClosePmacDevice(0);  
103       
104     //FreeLibrary  
105     CloseRuntimeLink(); 
106 }
107 void Cpmac1Dlg::OnBnClickedButton5()
108 {
109     OpenRuntimeLink();
110     OpenPmacDevice(0);
111     // TODO: 在此添加控件通知处理程序代码
112     // TODO: 在此添加控件通知处理程序代码
113     TCHAR res[MAX_PATH];  
114     TCHAR cmd[MAX_PATH];  
115 
116     //将要发送的指令存入cmd数组  
117     lstrcpy(cmd, "#1J-");  
118     //i100=1即为激活电机#1指令
119     //GetDlgItemText(IDE_COMMAND, szCmd, MAX_PATH);  
120   
121     //发送指令和接受往回发的指令填充到szRes  
122     PmacGetResponse(0,res,MAX_PATH,cmd);  
123   
124     //显示接受指令  
125     //SetDlgItemText(IDE_RECEIVE, szRes);  
126     ClosePmacDevice(0);  
127       
128     //FreeLibrary  
129     CloseRuntimeLink(); 
130 }
131 void Cpmac1Dlg::OnBnClickedButton7()
132 {
133     OpenRuntimeLink();
134     OpenPmacDevice(0);
135     // TODO: 在此添加控件通知处理程序代码
136     // TODO: 在此添加控件通知处理程序代码
137     TCHAR res[MAX_PATH];  
138     TCHAR cmd[MAX_PATH];  
139 
140     //将要发送的指令存入cmd数组  
141     lstrcpy(cmd, "k");  
142     //i100=1即为激活电机#1指令
143     //GetDlgItemText(IDE_COMMAND, szCmd, MAX_PATH);  
144   
145     //发送指令和接受往回发的指令填充到szRes  
146     PmacGetResponse(0,res,MAX_PATH,cmd);  
147   
148     //显示接受指令  
149     //SetDlgItemText(IDE_RECEIVE, szRes);  
150     ClosePmacDevice(0);  
151       
152     //FreeLibrary  
153     CloseRuntimeLink(); 
154 }

代码亲测可用。

3.可能出现的问题

a.error C2664

pmac1Dlg.cpp(224): error C2664: “lstrcpyW”: 不能将参数 2 从“const char [7]”转换为“LPCWSTR”与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换。



错误处理:
点击项目->属性->配置属性->常规->字符集
将字符集由“使用 Unicode 字符集”改为“使用多字节字符集”

b.修改界面显示风格
在stdafx.h文件最后添加代码     

//#ifdef _UNICODE
    #if defined _M_IX86
    #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'"")
    #elif defined _M_X64
    #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'"")
    #else
    #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")
    #endif
    //#endif

可以将界面从经典风格改为xp风格,显示效果如下:


xp风格

xp风格

经典风格

经典风格





原文地址:https://www.cnblogs.com/zhengkang/p/4992332.html