谁有电力101和104规约用单片机stm32程序代码开发的
stm32和51单片机相比,代码效率高(32位包含信息量大,多数指令一个字节搞定)、执行速度快(72MHz系统时钟不是盖的)、功能强大(外设丰富、管脚多、管脚功能可重映射),优点多多。编程的区别,stm32基本别比划汇编了,能把脑袋搞大大滴,寄存器太多了,位数也多,我一直搞51汇编也放弃了。C语言编程区别就不大了,况且stm32在国内技术支持很到位,资料丰富(关键是不但有E文,中文资料翻译的也多),还有完整的库函数支持,从51转过去没太大困难。有51相似电路的程序,移植的话好多都不用改的,只是针对寄存器、IO口、中断等的修改,软件流程、控制逻辑基本不用改。
说了一大堆,不是说stm32有多好学,还是有点难度,但比起它的优越来,付出是值得的。希望对你有所帮助。
什么是IEC101/104通讯规约
IEC104规约由国际电工委员会制定。IEC104规约把IEC101的应用服务数据单元(ASDU)用网络规约TCP/IP进行传输的标准,该标准为远动信息的网络传输提供了通信规约依据。采用104规约组合101规约的ASDU的方式后,可很好的保证规约的标准化和通信的可靠性。
IEC101/104规约有两种传输方式:平衡式和非平衡式传输。
1、在点对点和多个点对点的全双工通道结构中采用平衡式传输方式,在其它通道结构中只采用非平衡式传输方式。
2、平衡式传输方式中101规约是一种“问答+循环”式规约,即主站端和子站端都可以作为启动站;而当其用于非平衡式传输方式时101规约是问答式规约,只有主站端可以作为启动站。
扩展资料:
IEC870-101规约帧格式简单说明
1、固定帧长格式
启动字符(10H)
控制域(C) 、
链路地址域(A)
帧校验和(CS)
结束字符(16H)
2、可变帧长格式
启动字符(68H)
长度(L)
长度重复(L)
启动字符(68H)
控制域(C)
链路地址域(A)
链路用户数据(可变长度)
帧校验和(CS)
结束字符(16H)
参考资料来源:百度百科-IEC104
C语言 UDP socket 简单客户端 编程,急
提一下,你那个地址不好用,换成了127.0.0.1,端口可以用,完全按照要求写的,编译没错误,调试通过:
gcc server.c -o server
gcc client.c -o client
打开2个控制台:一个运行 ./server 另一个运行 ./client
server.c:
========================================
#include stdio.h
#include stdlib.h
#include string.h
#include sys/types.h
#include sys/socket.h
#include arpa/inet.h
#include errno.h
#define BUFFERSIZE 1024
typedef struct sockaddr SA;
int main(void)
{
char buf[BUFFERSIZE];
struct sockaddr_in addr_s;
struct sockaddr_in addr_c;
int sockfd;
socklen_t length;
int i;
if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1)
{
perror(“socket fail”);
return -1;
}
memset(addr_s,0,sizeof(addr_s));
addr_s.sin_family = AF_INET;
addr_s.sin_addr.s_addr = inet_addr(“127.0.0.1”);
addr_s.sin_port = htons(31180);
if(bind(sockfd,(SA *)addr_s,sizeof(addr_s)) == -1)
{
perror(“bind fail”);
return -1;
}
length = sizeof(addr_c);
memset(buf,’\0′,sizeof(buf));
if(recvfrom(sockfd,buf,sizeof(buf),0
,(SA *)addr_c,length) == -1)
{
perror(“recvfrom fail”);
}
printf(“recvfrom client:%s\n”,buf);
sendto(sockfd,buf,sizeof(buf),0,(SA *)addr_c,sizeof(addr_c));
close(sockfd);
}
====================================
client.c:
====================================
#include stdio.h
#include stdlib.h
#include string.h
#include sys/types.h
#include sys/socket.h
#include arpa/inet.h
#include errno.h
#define BUFFERSIZE 1024
typedef struct sockaddr SA;
int main(void)
{
int sockfd;
char buf[BUFFERSIZE];
struct sockaddr_in addr_s;
if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1)
{
perror(“socket fail”);
return -1;
}
memset(addr_s,0,sizeof(addr_s));
addr_s.sin_family = AF_INET;
addr_s.sin_addr.s_addr = inet_addr(“127.0.0.1”);
addr_s.sin_port = htons(31180);
memset(buf,’\0′,sizeof(buf));
sprintf(buf,”abcde”);
if(sendto(sockfd,buf,sizeof(buf)
,0,(SA *)addr_s,sizeof(addr_s)) 0)
{
perror(“sendto fail”);
}
memset(buf,’\0′,sizeof(buf));
recvfrom(sockfd,buf,sizeof(buf),0,NULL,NULL);
printf(“recvfrom server:%s\n”,buf);
close(sockfd);
}