��C�������Υץ�ץ����å����äƤߤ����פ���ˤ��Ƥߤޤ����� ���Ū�ˡ� Boost Preprocessor �饤�֥���ѡ����Ǥ���ۤɤΥץ�ץ����å� ���������뤳�Ȥ��Ǥ��ޤ����� �����������Υץ�ץ����å���C++�Τ���ǤϤʤ��� IEC 61131-3���� �ѤȤ��ƺ�ä���ΤǤ��� �ץ�ץ�������̤�IEC 61131-3�ƥ����Ȥ��Τ�ΤǤ��ꡢ�ǽ�Ū�ˤ�IEC 61131-10 XML���Ѵ����ޤ��Τǡ�������ץȤ�󤷤���Υ����������ɤ�PLC��ȯ�Ķ��ǰ������Ȥ��Ǥ��ޤ���
����ϡ�Jiecc
�Ȥ������եȥ��������Ȥ߹�������ȼ��Υץ�ץ����å����ɲä���C����äݤ�#include
��#define
�ʤɤε��Ҥ�
IEC 61131-3�����ɤ���Ȥ������褦�ˤ��Ƥߤޤ�����
�ܵ����Ǥϡ����γ�ȯ�����䡢Boost Preprocessor�ΰܿ����˶�ϫ�����ݥ���Ȥ��濴�˾Ҳ𤷤ޤ���
������ϥץ�����ߥ󥰤Ǥ⡢C++�ߤ����˥ޥ�����᥿�ץ�����ߥ󥰤���Ѥ����������Ȥ������ˤ��ä���Ω�ľ�����Ȼפ��ޤ��Τǡ����Ҥ�������������
IEC 61131-3�����ץ�ץ����å�������ͳ
�ޤ�������Ȥ��ơ�IEC 61131-3�����ˤ�ɸ��Υץ�ץ����å��Ȥ�����Τ�¸�ߤ��ޤ��� IEC 61131-3�Υ��ݡ��Ⱦ����ϡ��᡼�������Ȥˤޤ��ޤ��ǡ���ǽ��Í̵�䡢�����ܤ�Ʊ���Ǥ⿶���ñ¤¤¤Ëºï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Î¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½ ����˵��ʤ��Τ�Τ�᡼�������Ф����ݡ�����ˡ���������Ѱդ��Ƥ��뤿�ᡢ�᡼�����֥ݡ����ӥ�ƥ��Ϻ���ʾ����ˤ���ޤ��� ���������桼����¦�Dz�褹�뤿��μ��ʤȤ��ơ��᡼�����֤ǥץ��������Ѥ��뤳�Ȥ��Ǥ���ץ�ץ�������ǽ���ǤƤ��ޤ��� Beckhoff�ʤɡ�������PLC�٥�����ϥץ�ץ����å���ǽ���󶡤��Ƥ��뤳�Ȥ�����ޤ���������Ƴ����Ū�ϡ�¿���ۤʤ�ΤǤϤʤ����ȹͤ��ޤ���
�ץ�ץ�������ǽ��¸����뤿��˻��Ȥ���ΤϤ������gcc C����Υץ�ץ����å��Ǥ��� C����Υץ�ץ����å���ή�Ѥ��뤳�Ȥ��Ǥ��ʤ���ͳ�ϡ���#��¿�Ѥ����C����Υץ�ץ����å��פȡ�#���̤ΰ�̣�ǻȤ�IEC 61131-3����פǤ��� ��äơ��ȼ��Υץ�ץ����å���ɬ�פȤ��줿�ΤǤ���
�ºݤλ����㡧Boost Preprocessor��ȤäƤߤ�
�ºݤΤ��٤ƤΥե�������Ҥ���ź�դ��Ƥ��ޤ������㤨�С�����ʥ����ɤ�ƥ����ȥե�����˽񤤤ơ�
jiecc <�ƥ����ȥե�����> -I<�ܿ���Boost�饤�֥�꤬����ǥ��쥯�ȥ�> -o <����XML�ե�����>
�ȼ¹Ԥ���ȡ������ο���2�Ĥ���9�ĤޤǤ���8�����add
�ե��󥯥��������ä�XML����������ޤ���
�Ѥäȸ���C++���Ǥ��������ä���IEC 61131-3�Ȥ��ƥץ�ץ���������륤�᡼���Ǥ���
// Boost preprocessor�饤�֥��Ǥ���
{#include <boost/preprocessor/library.hpp>}
// inN���ѿ���������뤿��Υޥ����Ǥ���
{#define DEFINE_IN_VAR(z, n, data) BOOST_PP_CAT(in, BOOST_PP_ADD(n, 1)): data;}
// in0+in1+...�����뤿��Υޥ����Ǥ���
{#define SUM_IN_VARS(z, n, data) BOOST_PP_IF(n, +, ) BOOST_PP_CAT(in, BOOST_PP_ADD(n, 1))}
// addN�ե��󥯥��������Τ���Υޥ����Ǥ���
{#define DEFINE_ADD_FUNCTION(z, n, data) $
function BOOST_PP_CAT(add_, BOOST_PP_CAT(BOOST_PP_CAT(data, _), BOOST_PP_ADD(n, 2))): data $
var_input $
BOOST_PP_REPEAT(BOOST_PP_ADD(n, 2), DEFINE_IN_VAR, data) $
end_var $
${st$} $
BOOST_PP_CAT(add_, BOOST_PP_CAT(BOOST_PP_CAT(data, _), BOOST_PP_ADD(n, 2))) := BOOST_PP_REPEAT(BOOST_PP_ADD(n, 2), SUM_IN_VARS, _); $
${end$} $
end_function $
}
// 8�Ĥ�add�ե��󥯥������������ޤ���
BOOST_PP_REPEAT(8, DEFINE_ADD_FUNCTION, int)
�����ץ�ץ����å��ˤ�������Υ����������ɤϡ�IEC 61131-3������Ǥ���ե��󥯥����Ȥ��Ʋ��Ǥ��ޤ��� ����ˡ�Jiecc�κǽ����ƥåפ�IEC 61131-10 XML���Ѵ�����С�����Ū��PLC��ȯ�Ķ��ǰ����䤹����������夯�櫓�Ǥ��� �֥᥿�ץ�����ߥ󥰡�PLC������Ȥ����Ȥ߹�碌������äȿ����Ǥ���͡�
���Υ��եȥ������Υ��å�
����Υץ�ץ����å���Ȥä�IEC 61131-3������ĥ���뤳�Ȥǡ��ʲ��Τ褦�ʥ��åȤ����ԤǤ��ޤ���
-
�����ɺ��������θ�����
#include
��#define
����������ޥ�������Ѥ���С�Ʊ���褦��PLC��������å����٤âµï¿½Ò¤ï¿½ï¿½ï¿½ï¿½Ö¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ëºï¸ºï¿½ï¿½Ç½ï¿½ï¿½ - �ݼ������������Υ��å��� �귿�ѥ������ʣ���ʵ��Ҥ�ޥ���������С������������ɤò¥¹¥Ã¥ï¿½ï¿½ï¿½Þ¤È¤ï¿½ï¿½ï¿½ë¤¿ï¿½á¡¢ï¿½å¤«ï¿½é¸«ï¿½Æ¤ï¿½ï¿½ï¿½ï¿½ò¤·¤ä¤¹ï¿½ï¿½ï¿½Ê¤ï¿½Þ¤ï¿½ï¿½ï¿½
- C++���᥿�ץ�����ߥ󥰤�PLC�Ǽ¸��� Boost Preprocessor �饤�֥���ѡ����Ǥ���Τǡ��¼�Ū�ˡ�PLC�����˥ޥ���Ÿ�����Ȥ��������������פ���ǽ�ˤʤ�ޤ��� Beckhoff��PLC�Τ褦�ˡ���ʬŪ�ʥޥ�����ץ�ץ���������ǽ�ʴĶ��Ϥ���ޤ�����Boost Preprocessor���б����Ƥ��������ç¤ï¿½Ê¶ï¿½ï¿½ß¤Ç¤ï¿½ï¿½ï¿½
- IEC 61131-10 XML�����ؤ��Ѵ�����ñ�� Jiecc���̤��ƺǽ�Ū��ɸ��Ū��XML�������Ѵ�����뤿�ᡢ¾��IEC 61131-3�б��ġ���Ȥ�Ϣ�Ȥ����䤹���ʤ�ޤ���
- ����Ū�ʼ�ư������ĥ��;���� �ȡ����ó¥¥ï¿½Ã¥ï¿½ï¿½ï¿½Ê¤É¤ï¿½ï¿½ï¿½Ç½ï¿½ï¿½ï¿½ï¿½ï¿½ä¹½Ê¸ï¿½ï¿½ï¿½Ï¤Î¶ï¿½ï¿½ï¿½ï¿½Ë¤ï¿½Ã¤Æ¡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê£ï¿½ï¿½ï¿½Ê¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½çµ¬ï¿½Ï¥×¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½È¤Ø¤ï¿½Å¸ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ô¤Ç¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
������󡢤ޤ�®���̤ʤɤβ����¿���Ǥ������֥ץ�ץ����å���Ƴ��������åȡ��Ͻ�ʬ��������Ϥ��Ǥ��� Beckhoff��PLC�Ǥ��Ǥ˥ץ�ץ����å��Ķ���Ȥ�����Ƥ������ˤȤäƤ⡢���C++�饤���ʥ᥿�ץ�����ߥ���Ԥ�������硢 �ܥ��եȥ������Ͽ����������ˤʤ뤫�⤷��ޤ���
Boost Preprocessor�饤�֥��ΰܿ���Ǻ�������
Boost Preprocessor
�ϡ�#
��##
������ˤ�!
�ʤɤ򹪤ߤ˻Ȥäƹ��٤ʥޥ���Ÿ����Ԥ��饤�֥��Ǥ���
��������
IEC 61131-3����
�Ǥϥ�ƥ������Ҥ�#
��¿�Ѥ��Ƥ��뤿�ᡢ���ͤ��򤱤��ޤ���Ǥ�����
�����ǡ�##
��@@
���֤������롢!
��not
�˽ñ¤´ï¿½ï¿½ï¿½ï¿½ï¿½Ê¤É¡ï¿½ï¿½Ù¤ï¿½ï¿½ï¿½Ä´ï¿½ï¿½ï¿½ï¿½Ô¤ï¿½ï¿½Ê¤ï¿½ï¿½é¡¢
�ۤܤ��Τޤޤι�¤�ǰܿ��Ǥ���褦�˹��פ��Ƥ��ޤ���
��̡�����Ū���Ѵ������IEC 61131-3�Ǥ�Boost Preprocessor��ư�������褦�ʥ��������Ǥ�������ޤ�����
���ꥸ�ʥ��Boost 1.87��Preprocessor�饤�֥��ȡ������Jiecc�����ؤΰܿ��ե��������٤��ʬ����ޤ����� ��¤Ū�ˤϤۤ�Ʊ���ˤʤäƤ��ޤ�������äȤ����ִ��롼���������ǡ���֡�C++���ʡ��פȻפ��褦�ʽ����� IEC 61131-3�����ɤ����Ѥ�ꤹ���Ǥ��͡�
�����Ƕ�ϫ���������Ƶ��ޥ�����if�ǥ��쥯�ƥ���
- �����Υץ�ץ����å������ɥ饤���Ǥϡ��Ƶ��ޥ������ǽ�ʸ¤�Ÿ���������ˤǡ� ���ο����񤤤μ��������ʤ�ǥꥱ�����Ǥ������ͥ��Ȥ����ޥ����ƤӽФ������դ��ޥ���Ÿ���������������Τ����ѤǤ���
-
if�ǥ��쥯�ƥ��֤Υͥ��������Ǻ�ߤΥ��ͤǤ�����
#if
��#elif
��#else
�ʤɤ�³���ȡ� ̵���֥��å��������̵�뤷�ʤ��Ȥ����ޤ��󡣷�ɡ���ʸ���ϴ���ܳ�Ƴ�����ʤ���ˡ������å¤ï¿½Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ IEC 61131-3�Υѡ�����¦��Ϣ�Ȥ����ƥ��С����Ƥ��봶���Ǥ�. - �ȡ����󲽽�������Ω���������Ȥǡ�Ʊ���ե������ʣ���󥤥󥯥롼���������Ǥ�ȡ�����ò¥¥ï¿½Ã¥ï¿½ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½ ���ȤߤϺ��䤹���ʤ�ޤ��������������ºݤ˥���å��岽�Ϥޤ�̤�����ʤΤǡ���ǽ�ϲ����Ǥ���;�Ϥ�Ĥ����ޤޤǤ���
��ǽ�β��ꡧ���Ϥޤ�gcc��100��1000���٤�
���ֲ���򴶤��Ƥ���Τ�®���Ǥ��͡�
����äȤ�����Ǥ��δĶ��Ǥ�15�äۤɤ����ꡢgcc -E
�ǤΥץ�ץ���������Ӥ���ȡ��δ�Ū��100��1000���٤��Ǥ���
����ϥ��󥿥ץ꥿����ǽ񤤤Ƥ���Τ���ͳ�ΤҤȤĤǤ�������Ϥ�����å������ץ��ե�����ˤ���Ŭ�����Բķ�����˴����Ƥ��ޤ���
�ȤϤ�����®���̤�����С֤�����ư���Ƥ���פ��Ȥϳ�ǧ�Ǥ��Ƥ���Τǡ� �֤Ȥꤢ���� Boost��Preprocessor ��IEC 61131-3�ǻ�Ƥߤ��������Ȥ������Ӥˤϸ����Ǥ�Ȥ���Ȼפ��ޤ��� �����Python�Υץ��ե��������Ѥ��ƥܥȥ�ͥå��������Ф�������å����Ƴ������ʤɤ��ơ� ���ѥ�٥�ǤΥӥ�ɻ��֤˶�Ť��Ƥ��������Ǥ���
����ץ�ե�����ȥ��ꥸ�ʥ륽���������
�ºݤΥե���������ʲ��˼����ޤ������ϥե����뤫��ץ�ץ������Τߤ�ܤ����ƥ����ȡ������ƺǽ�Ū��XML���ϥե�������Ѱդ��ޤ����Τǡ� �ɤΤ褦���Ѵ�����Ƥ��뤫��ǧ���ƤߤƤ���������
- ���ϥƥ����ȥե�����
- �ץ�ץ�������Υƥ����ȥե�����������Ѥߡ�
- ����XML�ե�����
�ޤ���Boost Preprocessor�Υ��ꥸ�ʥ륽�����ȡ�
IEC 61131-3�����Jiecc���͡ˤ˰ܿ������ե���������󤲤Ƥ����ޤ���
�ե������ĥ�ҤϽ��פǤϤ���ޤ��󡣥ץ�ץ����å��ǥ��쥯�ƥ��֤�##
�黻�Ҥ��ִ���@@
�ˡ�
!
�黻�Ҥ�not
���ʤɤΰ㤤����������ǡ�ξ�Ԥι�¤���ΤϤۤ�Ʊ��Ǥ�������Ū�ʰܿ�����ǽ�Ǥ���
- Boost preprocessor���ꥸ�ʥ��repeat.hpp
- IEC 61131-3�����Jiecc���͡ˤ˰ܿ�����repeat.hpp
����ˡ��ܵ�����ɮ���κǿ��Ǥ��� Boost 1.87 ��١����ˤ���Boost preprocessor�饤�֥�����ΤΥ��ꥸ�ʥ��ǤȰܿ��Ǥ�ޤȤ�Ƥ��ޤ���
- ���ꥸ�ʥ��Boost preprocessor�饤�֥���7z������
- IEC 61131-3�����Jiecc���͡ˤ˰ܿ�����Boost preprocessor�饤�֥���7z������
�ޤȤᡧC++���᥿�ץ�����ߥ󥰤�PLC����dzڤ������
�������Ƹ���ȡ� IEC 61131-3���� ��C�������ץ�ץ����å�����������ߤ� ���ʤ�ޥ˥��å��ǤϤ����ΤΡ��֥ޥ����ǥ����ɤ��̻�������Ȥ��������Ǥ��ç¤ï¿½Ê¥ï¿½ï¿½Ã¥È¤ò´¶¤ï¿½ï¿½Æ¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½ ����PLC��ȯ���귿Ū�ʥ����ɤ��̻����Ƥ������ϡ������������ѤǸ�Ψ��夲�����ǽ�����礤�ˤ���Ǥ��礦�� Beckhoff�Τ褦�˴��˥ץ�ץ����å�Ū���ץ�������������Ƥ���PLC�᡼�����⤢��ޤ����� Boost Preprocessor��ľ�����ѤǤ��������ܥ��եȥ������ʤ�ǤϤ���ħ�Ǥ��� �ޤ��ޤ�������;�ϤϤ���ޤ�������Boost��Preprocessor��Ȥ���ץ�ץ����å����Ȥ��������� �勞�勞��������¿���Ϥ��Ǥ�.
�Ǹ�ˡ����ꥸ�ʥ��Boost Preprocessor�饤�֥���Ver.1.87�ˤȡ� IEC 61131-3��Jiecc���͡ˤ˰ܿ������ե�������Ƽ異�åפ��Ƥ���Τǡ� �ºݤ˥���������ɤ���ư�����Ƥߤ�����򤤤Ȼפ��ޤ��� ���ϥƥ����ȥե�����䡢�ץ�ץ�������Υƥ����ȡ�����XML�ե��������Ӥ⤼�һ�ƤߤƤ���������
�����Ÿ˾�Ȥ��Ƥϡ�����å�����Ȥä��ӥ�ɻ���û���䡢 ��ʸ�����ζ������᥿�ץ�����ߥ��ˤ�뤵��ʤ륳���������ƥ��˥å��θ���ʤɤ�����ޤ��� ��PLC��C++�äݤ��᥿�ץ�����ߥ󥰤�ڤ������פ���뤫�⤷��ޤ��� �⤷����̣������С����Ҥ����ȼ��ץ�ץ����å��򤤤����������äƤߤƤ���������
JUGEM�ơ��ޡ�����ԥ塼��