开源PLC学习笔记20( 迷你PWM文件转C)——2013_12_18
三菱PLC的PWM文件其实就是通讯代码的文件格式,比如,LD X2
OUT Y5
生成PWM文件后,使用16进制打开
上图红色圈内 02 24 05 C5 就是对应的代码,再复习一下
后面的很多FF只是为了凑足8K PLC空间(或其它大小)。
另外命令的起始地址就是 0x015C,在程序中会利用到。
***********************************
因为VC本身对我来说难度也非常大,所以学习方法和以前一样,只求简单。这里只会翻译LD OUT END指令,其它指令都忽略。
再复习一下计算偏移地址的方法
寄存器位(点)元件地址 ppp = 0-FFF,其分布如下:
寄存器名称 =位地址 + 偏移量 = 实际地址ppp
X0-377(八进制) =(0-FF) + 400=400-4FF
Y0-377(八进制) =(0-FF) + 500=500-5FF
对应的函数就是
//对应函数
void ppp(unsigned int a)
{
a &= 0xfff;
if((a>=0x400)&&(a<0x500))
{
sprintf(buf,"_X%0o_",a-0x400);
}
else if((a>=0x500) && (a<0x600))
{
sprintf(buf,"_Y%0o_",a-0x500);
}
}
void ppp_YM(unsigned int a)
{
a &= 0xfff;
if ((a>=0x500) && (a<0x600))
{
sprintf(buf,"_Y%0o_",a-0x500);
}
else
{
sprintf(buf,"__ERROR__%#03x!\r\n",a);
}
}
***************************************
另外程序中使用了
CFile和
CFileDialoge类,
搜一下,资料很多,摘录一下,
//创建/打开文件
CFile file;
file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
//写入数据
CString strValue = "Hello World!";
file.Write(strValue,strValue.GetLength());
//关闭文件
file.Close();
MFC的类CFileDialog用于实现这种功能。使用CFileDialog声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。
CFileDialog mFileDlg(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
"All Files (*.*)|*.*||",AfxGetMainWnd());
内容很多,以后慢慢理解,因为直接使用现成的就可以了。
******************************************
先搭框架
基于对话框,去掉菜单
void CPWM2C_MINIDlg::OnOpenfile()
void CPWM2C_MINIDlg::OnCompile()
编辑时,需要加入头文件
#include "stdio.h"
#include "string.h"
另外还需要定义全局变量
//********定义全局变量
unsigned long La=0;
char buf; //存放翻译的缓存
CFile outc; //C输出文件
char * fp;
CString FilePMW;
CString m_FileC;
//*******定义完成*********
然后把上面的框架补充完整,就可以了。
只能识别LD OUT END命令和X Y寄存器
呃,楼主可以出书了。看看会不会有主编联系你 楼主辛苦了,楼主在这方面确实做大大量工作,希望能将这方面的东西整理出一本书!!! yayasoso 发表于 2013-12-19 09:12
楼主辛苦了,楼主在这方面确实做大大量工作,希望能将这方面的东西整理出一本书!!! ...
学习别人,才走了一步,就要出书,没这么夸张的。 讲解很细致,楼主可以出个教程,多谢 佩服楼主{:victory:} 厉害,有空慢慢看
页:
[1]