环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產品分類

當前位置: 首頁 > 工業控制產品 > 自動化控制 > PLC可編程控制器

類型分類:
科普知識
數據分類:
PLC可編程控制器

三菱PLC編程口通訊C言語源代碼

發布日期:2022-04-26 點擊率:46 品牌:三菱_Mitsubishi


fxnew.h


#define DELAY_TIMES 30000L

#define TRUE 1
#define FALSE 0

#define TRUE 1
#define FALSE 0

#define FORCE_ON 0x37
#define FORCE_OFF 0x38

void init_plc(void);
int check_plc(void);
int _read_data_register(unsigned int uAddress,unsigned int number);
int _read_mdata_register(unsigned int uAddress,unsigned int number);
int _write_data_register(unsigned int uAddress,unsigned int number);
int _force_m_contact(unsigned int uAddress,unsigned char ucOn_off);
int read_data_register(unsigned int uAddress,unsigned int number);
int read_mdata_register(unsigned int uAddress,unsigned int number);
int write_data_register(unsigned int uAddress,unsigned int number);
int force_m_contact(unsigned int uAddress,unsigned char ucOn_off);
int _read_m_register(unsigned int uAddress,unsigned int number);
int read_m_register(unsigned int uAddress,unsigned int number);

int TESTING=0;

unsigned int uRead_value[25];
unsigned int uWrite_value[25];

unsigned int COMM_PORT=1;
unsigned int STATS_PORT=0x2fd;
unsigned int DATA_PORT=0x2f8;

void init_plc(void)
{ _AX=0xfa;
_DX=COMM_PORT;
geninterrupt(0x14);
while((inportb(STATS_PORT)&1)!=0)inportb(DATA_PORT);


}
int check_plc(void)
{ long lTmp;

if(TESTING==1)return TRUE;

init_plc();
for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&0x20)!=0)
break;
}

if(lTmp>=DELAY_TIMES)
return(FALSE);

outportb(DATA_PORT,5);
disable();
for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{enable();
return(FALSE);
}

if((lTmp=inportb(DATA_PORT))==6)
{ enable();
return(TRUE);
}
else
{ enable();
return(FALSE);
}
}
int read_data_register(unsigned int uAddress,unsigned int number)
{int i;
for(i=0;i<3;i++)
if(_read_data_register(uAddress,number)==TRUE)
return TRUE;
return FALSE;
}
int _read_data_register(unsigned int uAddress,unsigned int number)
{ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
unsigned char uReceive[104];
unsigned int uTmp;
unsigned int uSum;
unsigned int num;
long lTmp;
int i,j;

if(TESTING==1)
{ for(i=0;i<number;i++)uRead_value[i]=0;
return TRUE;
}

init_plc();
num=number*2;
if((num/16)>=10)
uSend[6]=(unsigned char)(num/16+0x41-10);
else
uSend[6]=(unsigned char)(num/16+0x30);
if((num%16)>=10)
uSend[7]=(unsigned char)((num%16)+0x41-10);
else
uSend[7]=(unsigned char)((num%16)+0x30);

uAddress=uAddress*2+0x1000;

uTmp=uAddress & 0x000f;
uSend[5]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>4) & 0x000f;
uSend[4]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>8) & 0x000f;
uSend[3]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>12)&0x000f;
uSend[2]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);

uSum=0;
for(i=1;i<9;i++)
uSum=uSum+(unsigned char)uSend[i];
uTmp=uSum&0x000f;
uSend[10]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uSum>>4)&0x000f;
uSend[9]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);


for(i=0;i<11;i++)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&0x20)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
return(FALSE);
}

outportb(DATA_PORT,uSend[i]);
}
disable();


for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
uReceive[0]=inportb(DATA_PORT);
if(uReceive[0]!=2)
{
enable();
return(FALSE);
}
for(i=1;i<number*4+4;i++)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
uReceive[i]=inportb(DATA_PORT);
}
enable();
uSum=0;
for(i=1;i<number*4+2;i++)
uSum=uSum+(unsigned int)uReceive[i];
uTmp=uSum&0xf;
uTmp=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);


if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);
uTmp=(uSum>>4)&0xf;
uTmp=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);


if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);
for(j=0;j<number;j++)
{for(i=j*4+1;i<j*4+5;i++)
uReceive[i]=(uReceive[i]>0x39)uReceive[i]-0x41+0xa:uReceive[i]-0x30;
uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];
}
return TRUE;
}
int read_mdata_register(unsigned int uAddress,unsigned int number)
{int i;
for(i=0;i<3;i++)
if(_read_mdata_register(uAddress,number)==TRUE)
return TRUE;
return FALSE;
}
int _read_mdata_register(unsigned int uAddress,unsigned int number)
{ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
unsigned char uReceive[104];
unsigned int uTmp;
unsigned int uSum;
unsigned int num;
long lTmp;
int i,j;

if(TESTING==1)
{ for(i=0;i<number;i++)uRead_value[i]=0;
return TRUE;
}

init_plc();
num=number*2;
if((num/16)>=10)
uSend[6]=(unsigned char)(num/16+0x41-10);
else
uSend[6]=(unsigned char)(num/16+0x30);
if((num%16)>=10)
uSend[7]=(unsigned char)((num%16)+0x41-10);
else
uSend[7]=(unsigned char)((num%16)+0x30);

uTmp=uAddress & 0x000f;
uSend[5]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>4) & 0x000f;
uSend[4]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>8) & 0x000f;
uSend[3]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>12)&0x000f;
uSend[2]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);

uSum=0;
for(i=1;i<9;i++)
uSum=uSum+(unsigned char)uSend[i];
uTmp=uSum&0x000f;
uSend[10]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uSum>>4)&0x000f;
uSend[9]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);

for(i=0;i<11;i++)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&0x20)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
return(FALSE);
}

outportb(DATA_PORT,uSend[i]);
}
disable();


for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
uReceive[0]=inportb(DATA_PORT);
if(uReceive[0]!=2)
{
enable();
return(FALSE);
}
for(i=1;i<number*4+4;i++)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
uReceive[i]=inportb(DATA_PORT);
}
enable();
uSum=0;
for(i=1;i<number*4+2;i++)
uSum=uSum+(unsigned int)uReceive[i];
uTmp=uSum&0xf;
uTmp=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);


if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);
uTmp=(uSum>>4)&0xf;
uTmp=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);


if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);
for(j=0;j<number;j++)
{for(i=j*4+1;i<j*4+5;i++)
uReceive[i]=(uReceive[i]>0x39)uReceive[i]-0x41+0xa:uReceive[i]-0x30;
uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];
}
return TRUE;
}
int write_data_register(unsigned int uAddress,unsigned int number)
{int i;
for(i=0;i<3;i++)
if(_write_data_register(uAddress,number)==TRUE)
return TRUE;
return FALSE;
}
int _write_data_register(unsigned int uAddress,unsigned int number)
{ unsigned char uSend[111];
unsigned int uTmp,uSum,num;
long lTmp;

int i;

if(TESTING==1)return TRUE;


init_plc();
uSend[0]=2;
uSend[1]=0x31;
uSend[number*4+8]=3;
num=(number*2)/16;
if(num>=10)uSend[6]=num+0x41-10;
else uSend[6]=num+0x30;
num=(number*2)%16;
if(num>=10)uSend[7]=num+0x41-10;
else uSend[7]=num+0x30;

uAddress=0x1000+2*uAddress;

uTmp=uAddress&0x000f;
uSend[5]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>4)&0x000f;
uSend[4]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>8)&0x000f;
uSend[3]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>12)&0x000f;
uSend[2]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);

for(i=0;i<number;i++)
{
uTmp=uWrite_value[i]&0x000f;
uSend[i*4+9]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uWrite_value[i]>>4)&0x000f;
uSend[i*4+8]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uWrite_value[i]>>8)&0x000f;
uSend[i*4+11]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uWrite_value[i]>>12)&0x000f;
uSend[i*4+10]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
}

uSum=0;
for(i=1;i<9+number*4;i++)
uSum+=uSend[i];
uTmp=uSum&0x000f;
uSend[number*4+10]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uSum>>4)&0x000f;
uSend[number*4+9]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
for(i=0;i<11+number*4;i++)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&0x20)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{

return(FALSE);
}
outportb(DATA_PORT,uSend[i]);
}
disable();

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
if(inportb(DATA_PORT)!=6)
{
enable();
return(FALSE);
}
else
{
enable();
return(TRUE);
}

}
int force_m_contact(unsigned uAddress,unsigned char ucOn_off)
{int i;
for(i=0;i<3;i++)
if(_force_m_contact(uAddress,ucOn_off)==TRUE)
return TRUE;
return FALSE;
}
int _force_m_contact(unsigned uAddress,unsigned char ucOn_off)
{ unsigned uSend[]={2,0x37,0x30,0x30,0x30,0x30,3,0x30,0x30};
unsigned uTmp,uSum,i;
long lTmp;
if(TESTING==1)return TRUE;

init_plc();
uAddress=uAddress+0x800;
uSend[1]=ucOn_off;
uTmp=uAddress&0x000f;
uSend[3]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>4)&0x000f;
uSend[2]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>8)&0x000f;
uSend[5]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>12)&0x000f;
uSend[4]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uSum=0;
for(i=1;i<7;i++)
uSum+=uSend[i];
uTmp=uSum&0x000f;
uSend[8]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uSum>>4)&0x000f;
uSend[7]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);

for(i=0;i<9;i++)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&0x20)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
outportb(DATA_PORT,uSend[i]);
}
disable();

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
if(inportb(DATA_PORT)!=6)
{
enable();
return(FALSE);
}
else
{ enable();
return(TRUE);
}
}
int read_m_register(unsigned int uAddress,unsigned int number)
{int i;
for(i=0;i<3;i++)
if(_read_m_register(uAddress,number)==TRUE)
return TRUE;
return FALSE;
}
int _read_m_register(unsigned int uAddress,unsigned int number)
{ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
unsigned char uReceive[54];
unsigned int uTmp;
unsigned int uSum;
unsigned int num;
long lTmp;
int i,j;

if(TESTING==1)
{ for(i=0;i<number;i++)uRead_value[i]=0;
return TRUE;
}

init_plc();
num=number;
if((num/16)>=10)
uSend[6]=(unsigned char)(num/16+0x41-10);
else
uSend[6]=(unsigned char)(num/16+0x30);
if((num%16)>=10)
uSend[7]=(unsigned char)((num%16)+0x41-10);
else
uSend[7]=(unsigned char)((num%16)+0x30);

uAddress=uAddress/8+0x100;

uTmp=uAddress & 0x000f;
uSend[5]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>4) & 0x000f;
uSend[4]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>8) & 0x000f;
uSend[3]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uAddress>>12)&0x000f;
uSend[2]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);

uSum=0;
for(i=1;i<9;i++)
uSum=uSum+(unsigned char)uSend[i];
uTmp=uSum&0x000f;
uSend[10]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uSum>>4)&0x000f;
uSend[9]=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);


for(i=0;i<11;i++)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&0x20)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{

return(FALSE);
}

outportb(DATA_PORT,uSend[i]);
}
disable();


for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
uReceive[0]=inportb(DATA_PORT);
if(uReceive[0]!=2)
{
enable();
return(FALSE);
}
for(i=1;i<number*2+4;i++)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
{ if((inportb(STATS_PORT)&1)!=0)
break;
}
if(lTmp>=DELAY_TIMES)
{
enable();
return(FALSE);
}
uReceive[i]=inportb(DATA_PORT);
}
enable();

uSum=0;
for(i=1;i<number*2+2;i++)
uSum=uSum+(unsigned int)uReceive[i];
uTmp=uSum&0xf;
uTmp=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);


if((unsigned char)uTmp!=uReceive[number*2+3])return(FALSE);
uTmp=(uSum>>4)&0xf;
uTmp=(uTmp<10)(uTmp+0x30):(uTmp+0x41-0xa);


if((unsigned char)uTmp!=uReceive[number*2+2])return(FALSE);
for(j=0;j<number;j++)
{for(i=j*2+1;i<j*2+3;i++)
uReceive[i]=(uReceive[i]>0x39)uReceive[i]-0x41+0xa:uReceive[i]-0x30;
uRead_value[j]=((uReceive[j*2+1])<<4)+uReceive[j*2+2];
}
return TRUE;
}


下一篇: PLC、DCS、FCS三大控

上一篇: MATLAB和Simulink在航

推薦產品

更多
主站蜘蛛池模板: 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 篮球地板厂家_舞台木地板品牌_体育运动地板厂家_凯洁地板 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 进口试验机价格-进口生物材料试验机-西安卡夫曼测控技术有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 浙江浩盛阀门有限公司| 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 模切之家-专注服务模切行业的B2B平台! | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 液压升降货梯_导轨式升降货梯厂家_升降货梯厂家-河南东圣升降设备有限公司 | 纯水设备_苏州皙全超纯水设备水处理设备生产厂家 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 酸度计_PH计_特斯拉计-西安云仪 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn | 箱式破碎机_移动方箱式破碎机/价格/厂家_【华盛铭重工】 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 浙江宝泉阀门有限公司| 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 | 北京公积金代办/租房发票/租房备案-北京金鼎源公积金提取服务中心 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 |